Skip to content

Commit f013e92

Browse files
refactor: BREAKING merge onGroupCallState and onGroupCallEvent into matrixRTCEventStream with proper types
1 parent 28b6f9d commit f013e92

File tree

4 files changed

+96
-54
lines changed

4 files changed

+96
-54
lines changed

lib/src/voip/backend/mesh_backend.dart

Lines changed: 26 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ class MeshBackend extends CallBackend {
133133
Future<void> _addCall(GroupCallSession groupCall, CallSession call) async {
134134
_callSessions.add(call);
135135
_initCall(groupCall, call);
136-
groupCall.onGroupCallEvent.add(GroupCallStateChange.callsChanged);
136+
groupCall.matrixRTCEventStream.add(GroupCallAddedEvent());
137137
}
138138

139139
/// init a peer call from group calls.
@@ -183,7 +183,7 @@ class MeshBackend extends CallBackend {
183183
_registerListenersBeforeCallAdd(replacementCall);
184184
_initCall(groupCall, replacementCall);
185185

186-
groupCall.onGroupCallEvent.add(GroupCallStateChange.callsChanged);
186+
groupCall.matrixRTCEventStream.add(GroupCallReplacedEvent());
187187
}
188188

189189
/// Removes a peer call from group calls.
@@ -196,7 +196,7 @@ class MeshBackend extends CallBackend {
196196

197197
_callSessions.removeWhere((element) => call.callId == element.callId);
198198

199-
groupCall.onGroupCallEvent.add(GroupCallStateChange.callsChanged);
199+
groupCall.matrixRTCEventStream.add(GroupCallRemovedEvent());
200200
}
201201

202202
Future<void> _disposeCall(
@@ -375,7 +375,7 @@ class MeshBackend extends CallBackend {
375375

376376
if (nextActiveSpeaker != null && _activeSpeaker != nextActiveSpeaker) {
377377
_activeSpeaker = nextActiveSpeaker;
378-
groupCall.onGroupCallEvent.add(GroupCallStateChange.activeSpeakerChanged);
378+
groupCall.matrixRTCEventStream.add(GroupCallActiveSpeakerChanged());
379379
}
380380
_activeSpeakerLoopTimeout?.cancel();
381381
_activeSpeakerLoopTimeout = Timer(
@@ -401,8 +401,8 @@ class MeshBackend extends CallBackend {
401401
) {
402402
_screenshareStreams.add(stream);
403403
onStreamAdd.add(stream);
404-
groupCall.onGroupCallEvent
405-
.add(GroupCallStateChange.screenshareStreamsChanged);
404+
groupCall.matrixRTCEventStream
405+
.add(GroupCallScreenShareStreamsChanged(GroupCallStreamsChange.added));
406406
}
407407

408408
Future<void> _replaceScreenshareStream(
@@ -423,8 +423,9 @@ class MeshBackend extends CallBackend {
423423
_screenshareStreams.replaceRange(streamIndex, 1, [replacementStream]);
424424

425425
await existingStream.dispose();
426-
groupCall.onGroupCallEvent
427-
.add(GroupCallStateChange.screenshareStreamsChanged);
426+
groupCall.matrixRTCEventStream.add(
427+
GroupCallScreenShareStreamsChanged(GroupCallStreamsChange.replaced),
428+
);
428429
}
429430

430431
Future<void> _removeScreenshareStream(
@@ -450,8 +451,9 @@ class MeshBackend extends CallBackend {
450451
await stopMediaStream(stream.stream);
451452
}
452453

453-
groupCall.onGroupCallEvent
454-
.add(GroupCallStateChange.screenshareStreamsChanged);
454+
groupCall.matrixRTCEventStream.add(
455+
GroupCallScreenShareStreamsChanged(GroupCallStreamsChange.removed),
456+
);
455457
}
456458

457459
Future<void> _onCallStateChanged(CallSession call, CallState state) async {
@@ -486,8 +488,8 @@ class MeshBackend extends CallBackend {
486488
) async {
487489
_userMediaStreams.add(stream);
488490
onStreamAdd.add(stream);
489-
groupCall.onGroupCallEvent
490-
.add(GroupCallStateChange.userMediaStreamsChanged);
491+
groupCall.matrixRTCEventStream
492+
.add(GroupCallUserMediaStreamsChanged(GroupCallStreamsChange.added));
491493
}
492494

493495
Future<void> _replaceUserMediaStream(
@@ -508,8 +510,8 @@ class MeshBackend extends CallBackend {
508510
_userMediaStreams.replaceRange(streamIndex, 1, [replacementStream]);
509511

510512
await existingStream.dispose();
511-
groupCall.onGroupCallEvent
512-
.add(GroupCallStateChange.userMediaStreamsChanged);
513+
groupCall.matrixRTCEventStream
514+
.add(GroupCallUserMediaStreamsChanged(GroupCallStreamsChange.replaced));
513515
}
514516

515517
Future<void> _removeUserMediaStream(
@@ -536,12 +538,12 @@ class MeshBackend extends CallBackend {
536538
await stopMediaStream(stream.stream);
537539
}
538540

539-
groupCall.onGroupCallEvent
540-
.add(GroupCallStateChange.userMediaStreamsChanged);
541+
groupCall.matrixRTCEventStream
542+
.add(GroupCallUserMediaStreamsChanged(GroupCallStreamsChange.removed));
541543

542544
if (_activeSpeaker == stream.participant && _userMediaStreams.isNotEmpty) {
543545
_activeSpeaker = _userMediaStreams[0].participant;
544-
groupCall.onGroupCallEvent.add(GroupCallStateChange.activeSpeakerChanged);
546+
groupCall.matrixRTCEventStream.add(GroupCallActiveSpeakerChanged());
545547
}
546548
}
547549

@@ -663,7 +665,7 @@ class MeshBackend extends CallBackend {
663665
}
664666
}
665667

666-
groupCall.onGroupCallEvent.add(GroupCallStateChange.localMuteStateChanged);
668+
groupCall.matrixRTCEventStream.add(GroupCallLocalMutedChanged(muted, kind));
667669
return;
668670
}
669671

@@ -799,8 +801,8 @@ class MeshBackend extends CallBackend {
799801

800802
_addScreenshareStream(groupCall, localScreenshareStream!);
801803

802-
groupCall.onGroupCallEvent
803-
.add(GroupCallStateChange.localScreenshareStateChanged);
804+
groupCall.matrixRTCEventStream
805+
.add(GroupCallLocalScreenshareStateChanged(true));
804806
for (final call in _callSessions) {
805807
await call.addLocalStream(
806808
await localScreenshareStream!.stream!.clone(),
@@ -813,7 +815,8 @@ class MeshBackend extends CallBackend {
813815
return;
814816
} catch (e, s) {
815817
Logs().e('[VOIP] Enabling screensharing error', e, s);
816-
groupCall.onGroupCallEvent.add(GroupCallStateChange.error);
818+
groupCall.matrixRTCEventStream
819+
.add(GroupCallStateError(e.toString(), s));
817820
return;
818821
}
819822
} else {
@@ -826,8 +829,8 @@ class MeshBackend extends CallBackend {
826829

827830
await groupCall.sendMemberStateEvent();
828831

829-
groupCall.onGroupCallEvent
830-
.add(GroupCallStateChange.localMuteStateChanged);
832+
groupCall.matrixRTCEventStream
833+
.add(GroupCallLocalScreenshareStateChanged(false));
831834
return;
832835
}
833836
}

lib/src/voip/group_call_session.dart

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -51,12 +51,6 @@ class GroupCallSession {
5151

5252
String groupCallId;
5353

54-
final CachedStreamController<GroupCallState> onGroupCallState =
55-
CachedStreamController();
56-
57-
final CachedStreamController<GroupCallStateChange> onGroupCallEvent =
58-
CachedStreamController();
59-
6054
final CachedStreamController<MatrixRTCCallEvent> matrixRTCEventStream =
6155
CachedStreamController();
6256

@@ -102,8 +96,7 @@ class GroupCallSession {
10296

10397
void setState(GroupCallState newState) {
10498
state = newState;
105-
onGroupCallState.add(newState);
106-
onGroupCallEvent.add(GroupCallStateChange.groupCallStateChanged);
99+
matrixRTCEventStream.add(GroupCallStateChanged(newState));
107100
}
108101

109102
bool hasLocalParticipant() {
@@ -268,8 +261,6 @@ class GroupCallSession {
268261
matrixRTCEventStream
269262
.add(ParticipantsLeftEvent(participants: anyLeft.toList()));
270263
}
271-
272-
onGroupCallEvent.add(GroupCallStateChange.participantsChanged);
273264
}
274265
}
275266
}

lib/src/voip/models/matrixrtc_call_event.dart

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,85 @@ import 'package:matrix/matrix.dart';
55
/// often.
66
sealed class MatrixRTCCallEvent {}
77

8+
/// Event type for participants change
89
sealed class ParticipantsChangeEvent implements MatrixRTCCallEvent {}
910

1011
final class ParticipantsJoinEvent implements ParticipantsChangeEvent {
12+
/// The participants who joined the call
1113
final List<CallParticipant> participants;
1214

1315
ParticipantsJoinEvent({required this.participants});
1416
}
1517

1618
final class ParticipantsLeftEvent implements ParticipantsChangeEvent {
19+
/// The participants who left the call
1720
final List<CallParticipant> participants;
1821

1922
ParticipantsLeftEvent({required this.participants});
2023
}
24+
25+
/// Group call active speaker changed event
26+
final class GroupCallActiveSpeakerChanged implements MatrixRTCCallEvent {}
27+
28+
/// Group calls changed event
29+
sealed class GroupCallsChanged implements MatrixRTCCallEvent {}
30+
31+
final class GroupCallAddedEvent implements GroupCallsChanged {}
32+
33+
final class GroupCallRemovedEvent implements GroupCallsChanged {}
34+
35+
final class GroupCallReplacedEvent implements GroupCallsChanged {}
36+
37+
enum GroupCallStreamsChange {
38+
added,
39+
removed,
40+
replaced,
41+
}
42+
43+
/// Group call user media streams changed event
44+
final class GroupCallUserMediaStreamsChanged implements MatrixRTCCallEvent {
45+
final GroupCallStreamsChange change;
46+
GroupCallUserMediaStreamsChanged(this.change);
47+
}
48+
49+
/// Group call screen share streams changed event
50+
final class GroupCallScreenShareStreamsChanged implements MatrixRTCCallEvent {
51+
final GroupCallStreamsChange change;
52+
GroupCallScreenShareStreamsChanged(this.change);
53+
}
54+
55+
/// Group call local screenshare state changed event
56+
final class GroupCallLocalScreenshareStateChanged
57+
implements MatrixRTCCallEvent {
58+
final bool screensharing;
59+
GroupCallLocalScreenshareStateChanged(this.screensharing);
60+
}
61+
62+
/// Group call local muted changed event
63+
final class GroupCallLocalMutedChanged implements MatrixRTCCallEvent {
64+
final bool muted;
65+
final MediaInputKind kind;
66+
GroupCallLocalMutedChanged(this.muted, this.kind);
67+
}
68+
69+
enum GroupCallState {
70+
localCallFeedUninitialized,
71+
initializingLocalCallFeed,
72+
localCallFeedInitialized,
73+
entering,
74+
entered,
75+
ended
76+
}
77+
78+
/// Group call state changed event
79+
final class GroupCallStateChanged implements MatrixRTCCallEvent {
80+
final GroupCallState state;
81+
GroupCallStateChanged(this.state);
82+
}
83+
84+
/// Group call error event
85+
final class GroupCallStateError implements MatrixRTCCallEvent {
86+
final String msg;
87+
final dynamic err;
88+
GroupCallStateError(this.msg, this.err);
89+
}

lib/src/voip/utils/types.dart

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -164,24 +164,3 @@ class GroupCallError extends Error {
164164
return 'Group Call Error: [$code] $msg, err: ${err.toString()}';
165165
}
166166
}
167-
168-
enum GroupCallStateChange {
169-
groupCallStateChanged,
170-
activeSpeakerChanged,
171-
callsChanged,
172-
userMediaStreamsChanged,
173-
screenshareStreamsChanged,
174-
localScreenshareStateChanged,
175-
localMuteStateChanged,
176-
participantsChanged,
177-
error
178-
}
179-
180-
enum GroupCallState {
181-
localCallFeedUninitialized,
182-
initializingLocalCallFeed,
183-
localCallFeedInitialized,
184-
entering,
185-
entered,
186-
ended
187-
}

0 commit comments

Comments
 (0)