feat: expose matrixRTCEventStream
currently only supports participant join/leave updates
This commit is contained in:
parent
579546bb4d
commit
2e1e3a48c7
|
|
@ -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';
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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});
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue