feat: expose matrixRTCEventStream

currently only supports participant join/leave updates
This commit is contained in:
td 2024-05-30 18:21:13 +05:30
parent 579546bb4d
commit 2e1e3a48c7
No known key found for this signature in database
GPG Key ID: 62A30523D4D6CE28
3 changed files with 28 additions and 0 deletions

View File

@ -42,6 +42,7 @@ export 'src/voip/models/call_events.dart';
export 'src/voip/models/webrtc_delegate.dart'; export 'src/voip/models/webrtc_delegate.dart';
export 'src/voip/models/call_participant.dart'; export 'src/voip/models/call_participant.dart';
export 'src/voip/models/key_provider.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/conn_tester.dart';
export 'src/voip/utils/voip_constants.dart'; export 'src/voip/utils/voip_constants.dart';
export 'src/voip/utils/rtc_candidate_extension.dart'; export 'src/voip/utils/rtc_candidate_extension.dart';

View File

@ -58,6 +58,9 @@ class GroupCallSession {
final CachedStreamController<GroupCallStateChange> onGroupCallEvent = final CachedStreamController<GroupCallStateChange> onGroupCallEvent =
CachedStreamController(); CachedStreamController();
final CachedStreamController<MatrixRTCCallEvent> matrixRTCEventStream =
CachedStreamController();
Timer? _resendMemberStateEventTimer; Timer? _resendMemberStateEventTimer;
factory GroupCallSession.withAutoGenId( factory GroupCallSession.withAutoGenId(
@ -254,6 +257,8 @@ class GroupCallSession {
await backend.onNewParticipant(this, nonLocalAnyJoined.toList()); await backend.onNewParticipant(this, nonLocalAnyJoined.toList());
} }
_participants.addAll(anyJoined); _participants.addAll(anyJoined);
matrixRTCEventStream
.add(ParticipantsJoinEvent(participants: anyJoined.toList()));
} }
if (anyLeft.isNotEmpty) { if (anyLeft.isNotEmpty) {
final nonLocalAnyLeft = Set<CallParticipant>.from(anyLeft) final nonLocalAnyLeft = Set<CallParticipant>.from(anyLeft)
@ -264,6 +269,8 @@ class GroupCallSession {
await backend.onLeftParticipant(this, nonLocalAnyLeft.toList()); await backend.onLeftParticipant(this, nonLocalAnyLeft.toList());
} }
_participants.removeAll(anyLeft); _participants.removeAll(anyLeft);
matrixRTCEventStream
.add(ParticipantsLeftEvent(participants: anyLeft.toList()));
} }
onGroupCallEvent.add(GroupCallStateChange.participantsChanged); onGroupCallEvent.add(GroupCallStateChange.participantsChanged);

View File

@ -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<CallParticipant> participants;
ParticipantsJoinEvent({required this.participants});
}
final class ParticipantsLeftEvent implements ParticipantsChangeEvent {
final List<CallParticipant> participants;
ParticipantsLeftEvent({required this.participants});
}