From 2e1e3a48c7f0cfc44eeb3d47a82f9a8cac3fdd23 Mon Sep 17 00:00:00 2001 From: td Date: Thu, 30 May 2024 18:21:13 +0530 Subject: [PATCH] feat: expose matrixRTCEventStream currently only supports participant join/leave updates --- lib/matrix.dart | 1 + lib/src/voip/group_call_session.dart | 7 +++++++ lib/src/voip/models/matrixrtc_call_event.dart | 20 +++++++++++++++++++ 3 files changed, 28 insertions(+) create mode 100644 lib/src/voip/models/matrixrtc_call_event.dart diff --git a/lib/matrix.dart b/lib/matrix.dart index f0ab4bbc..4ddc729b 100644 --- a/lib/matrix.dart +++ b/lib/matrix.dart @@ -42,6 +42,7 @@ export 'src/voip/models/call_events.dart'; export 'src/voip/models/webrtc_delegate.dart'; export 'src/voip/models/call_participant.dart'; export 'src/voip/models/key_provider.dart'; +export 'src/voip/models/matrixrtc_call_event.dart'; export 'src/voip/utils/conn_tester.dart'; export 'src/voip/utils/voip_constants.dart'; export 'src/voip/utils/rtc_candidate_extension.dart'; diff --git a/lib/src/voip/group_call_session.dart b/lib/src/voip/group_call_session.dart index c58734e9..cbd7528f 100644 --- a/lib/src/voip/group_call_session.dart +++ b/lib/src/voip/group_call_session.dart @@ -58,6 +58,9 @@ class GroupCallSession { final CachedStreamController onGroupCallEvent = CachedStreamController(); + final CachedStreamController matrixRTCEventStream = + CachedStreamController(); + Timer? _resendMemberStateEventTimer; factory GroupCallSession.withAutoGenId( @@ -254,6 +257,8 @@ class GroupCallSession { await backend.onNewParticipant(this, nonLocalAnyJoined.toList()); } _participants.addAll(anyJoined); + matrixRTCEventStream + .add(ParticipantsJoinEvent(participants: anyJoined.toList())); } if (anyLeft.isNotEmpty) { final nonLocalAnyLeft = Set.from(anyLeft) @@ -264,6 +269,8 @@ class GroupCallSession { await backend.onLeftParticipant(this, nonLocalAnyLeft.toList()); } _participants.removeAll(anyLeft); + matrixRTCEventStream + .add(ParticipantsLeftEvent(participants: anyLeft.toList())); } onGroupCallEvent.add(GroupCallStateChange.participantsChanged); diff --git a/lib/src/voip/models/matrixrtc_call_event.dart b/lib/src/voip/models/matrixrtc_call_event.dart new file mode 100644 index 00000000..531f6943 --- /dev/null +++ b/lib/src/voip/models/matrixrtc_call_event.dart @@ -0,0 +1,20 @@ +import 'package:matrix/matrix.dart'; + +/// UNSTABLE API WARNING +/// The class herirachy is currently experimental and could have breaking changes +/// often. +sealed class MatrixRTCCallEvent {} + +sealed class ParticipantsChangeEvent implements MatrixRTCCallEvent {} + +final class ParticipantsJoinEvent implements ParticipantsChangeEvent { + final List participants; + + ParticipantsJoinEvent({required this.participants}); +} + +final class ParticipantsLeftEvent implements ParticipantsChangeEvent { + final List participants; + + ParticipantsLeftEvent({required this.participants}); +}