mirror of
				https://gitlab.com/comunic/comunicmobile
				synced 2025-11-04 12:14:11 +00:00 
			
		
		
		
	Can request call offer
This commit is contained in:
		@@ -34,4 +34,8 @@ class CallsHelper {
 | 
				
			|||||||
                ))
 | 
					                ))
 | 
				
			||||||
            .toList()
 | 
					            .toList()
 | 
				
			||||||
            .cast<CallMember>());
 | 
					            .cast<CallMember>());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /// Request an offer to access another peer's stream
 | 
				
			||||||
 | 
					  static Future<void> requestOffer(int callID, int peerID) async =>
 | 
				
			||||||
 | 
					      await ws("calls/request_offer", {"callID": callID, "peerID": peerID});
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,4 +14,8 @@ class CallMembersList extends AbstractList<CallMember> {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  /// Get the connection of a specific user
 | 
					  /// Get the connection of a specific user
 | 
				
			||||||
  CallMember getUser(int userID) => this.firstWhere((f) => f.userID == userID);
 | 
					  CallMember getUser(int userID) => this.firstWhere((f) => f.userID == userID);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /// Extract ready peers from this list
 | 
				
			||||||
 | 
					  CallMembersList get readyPeers =>
 | 
				
			||||||
 | 
					      CallMembersList()..addAll(where((f) => f.status == MemberStatus.READY));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -101,6 +101,10 @@ class _CallScreenState extends SafeState<CallScreen> {
 | 
				
			|||||||
      this.listen<CallClosedEvent>((e) {
 | 
					      this.listen<CallClosedEvent>((e) {
 | 
				
			||||||
        if (e.callID == convID) _leaveCall(needConfirm: false);
 | 
					        if (e.callID == convID) _leaveCall(needConfirm: false);
 | 
				
			||||||
      });
 | 
					      });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      // Connect to ready peers
 | 
				
			||||||
 | 
					      for (final peer in _membersList.readyPeers)
 | 
				
			||||||
 | 
					        await this._memberReady(peer.userID);
 | 
				
			||||||
    } catch (e, stack) {
 | 
					    } catch (e, stack) {
 | 
				
			||||||
      print("Could not initialize call! $e\n$stack");
 | 
					      print("Could not initialize call! $e\n$stack");
 | 
				
			||||||
      setState(() => _error = true);
 | 
					      setState(() => _error = true);
 | 
				
			||||||
@@ -128,10 +132,17 @@ class _CallScreenState extends SafeState<CallScreen> {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /// Call this when a user started to stream media
 | 
					  /// Call this when a user started to stream media
 | 
				
			||||||
  void _memberReady(int memberID) {
 | 
					  Future<void> _memberReady(int memberID) async {
 | 
				
			||||||
 | 
					    try {
 | 
				
			||||||
      _membersList.getUser(memberID).status = MemberStatus.READY;
 | 
					      _membersList.getUser(memberID).status = MemberStatus.READY;
 | 
				
			||||||
 | 
					 | 
				
			||||||
      setState(() {});
 | 
					      setState(() {});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      // Request an offer to establish a peer connection
 | 
				
			||||||
 | 
					      await CallsHelper.requestOffer(convID, memberID);
 | 
				
			||||||
 | 
					    } catch (e, stack) {
 | 
				
			||||||
 | 
					      print("Could not connect to remote peer $e\n$stack!");
 | 
				
			||||||
 | 
					      showSimpleSnack(context, tr("Could not connect to a remote peer!"));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /// Call this when a user has interrupted streaming
 | 
					  /// Call this when a user has interrupted streaming
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user