diff --git a/lib/models/chat.dart b/lib/models/chat.dart index 34b22a20..7b37effc 100644 --- a/lib/models/chat.dart +++ b/lib/models/chat.dart @@ -152,7 +152,6 @@ sealed class CallParticipant with _$CallParticipant { required String accountId, @Default(null) SnAccount? account, required DateTime joinedAt, - @Default(false) bool isLocal, }) = _CallParticipant; factory CallParticipant.fromJson(Map json) => diff --git a/lib/pods/chat/call.dart b/lib/pods/chat/call.dart index 88944ecd..b3b53686 100644 --- a/lib/pods/chat/call.dart +++ b/lib/pods/chat/call.dart @@ -145,6 +145,7 @@ class CallNotifier extends _$CallNotifier { id: _webrtcManager!.roomId, name: userinfo.nick, userinfo: userinfo, + isLocal: true, )..remoteStream = _webrtcManager!.localStream, // Access local stream ); @@ -178,7 +179,6 @@ class CallNotifier extends _$CallNotifier { accountId: p.userinfo.id, account: p.userinfo, joinedAt: DateTime.now(), - isLocal: true, ); return CallParticipantLive( participant: participantInfo, diff --git a/lib/pods/chat/webrtc_manager.dart b/lib/pods/chat/webrtc_manager.dart index 9dd28d38..49169ff5 100644 --- a/lib/pods/chat/webrtc_manager.dart +++ b/lib/pods/chat/webrtc_manager.dart @@ -14,11 +14,13 @@ class WebRTCParticipant { bool isAudioEnabled = true; bool isVideoEnabled = false; bool isConnected = false; + bool isLocal = false; WebRTCParticipant({ required this.id, required this.name, required this.userinfo, + this.isLocal = false, }); } @@ -271,11 +273,7 @@ class WebRTCManager { } } - // Update audio enabled state for all participants (they share the same local stream) - for (final participant in _participants.values) { - participant.isAudioEnabled = enabled; - _participantController.add(participant); - } + _participants.values.where((e) => e.isLocal).firstOrNull?.isAudioEnabled = true; } Future toggleCamera(bool enabled) async { @@ -285,11 +283,7 @@ class WebRTCManager { }); } - // Update video enabled state for all participants (they share the same local stream) - for (final participant in _participants.values) { - participant.isVideoEnabled = enabled; - _participantController.add(participant); - } + _participants.values.where((e) => e.isLocal).firstOrNull?.isVideoEnabled = true; } List get participants => _participants.values.toList();