Merge branch 'feat/room-state-event-listener' into 'main'

Add room state listener

See merge request famedly/company/frontend/famedlysdk!1095
This commit is contained in:
td 2022-08-09 07:51:16 +00:00
commit 543875e8cf
4 changed files with 12 additions and 32 deletions

View File

@ -1098,6 +1098,8 @@ class Client extends MatrixApi {
final CachedStreamController<Event> onGroupMember = CachedStreamController();
final CachedStreamController<Event> onRoomState = CachedStreamController();
/// How long should the app wait until it retrys the synchronisation after
/// an error?
int syncErrorTimeoutSec = 3;

View File

@ -197,6 +197,8 @@ class Room {
}
(states[state.type] ??= {})[stateKey] = state;
client.onRoomState.add(state);
}
/// ID of the fully read marker event.

View File

@ -197,9 +197,6 @@ class GroupCall {
Timer? activeSpeakerLoopTimeout;
Timer? retryCallLoopTimeout;
Map<String, num> retryCallCounts = {};
final CachedStreamController<GroupCall> onGroupCallFeedsChanged =
CachedStreamController();
@ -430,8 +427,6 @@ class GroupCall {
onMemberStateChanged(stateEvent);
});
retryCallLoopTimeout = Timer.periodic(
Duration(milliseconds: retryCallInterval), onRetryCallLoop);
onActiveSpeakerLoop();
voip.currentGroupCID = groupCallId;
@ -467,8 +462,6 @@ class GroupCall {
activeSpeaker = null;
activeSpeakerLoopTimeout?.cancel();
retryCallCounts.clear();
retryCallLoopTimeout?.cancel();
_callSubscription?.cancel();
}
@ -876,24 +869,6 @@ class GroupCall {
return memberDevices[0];
}
/// Monitor member status and respond to mesh calls by regularly updating
/// the state event in the room
void onRetryCallLoop(Timer _) async {
final memberStateEvents =
await getStateEventsList(EventTypes.GroupCallMemberPrefix);
memberStateEvents.forEach((event) {
final memberId = event.senderId;
final existingCall =
calls.indexWhere((call) => call.remoteUser!.id == memberId) != -1;
final retryCallCount = retryCallCounts[memberId] ?? 0;
if (!existingCall && retryCallCount < 3) {
retryCallCounts[memberId] = retryCallCount + 1;
onMemberStateChanged(event);
}
});
}
CallSession? getCallByUserId(String userId) {
final value = calls.where((item) => item.remoteUser!.id == userId);
if (value.isNotEmpty) {
@ -1064,10 +1039,6 @@ class GroupCall {
call.isLocalVideoMuted != videoMuted) {
call.setLocalVideoMuted(videoMuted);
}
if (state == CallState.kConnected) {
retryCallCounts.remove(call.remoteUser!.id);
}
}
void onCallHangup(CallSession call) {

View File

@ -68,9 +68,14 @@ class VoIP {
client.onAssertedIdentityReceived.stream
.listen((event) => _handleEvent(event, onAssertedIdentityReceived));
client.onGroupCallRequest.stream.listen((event) {
Logs().v('[VOIP] onGroupCallRequest: type ${event.toJson()}.');
onRoomStateChanged(event);
client.onRoomState.stream.listen((event) {
if ([
EventTypes.GroupCallPrefix,
EventTypes.GroupCallMemberPrefix,
].contains(event.type)) {
Logs().v('[VOIP] onRoomState: type ${event.toJson()}.');
onRoomStateChanged(event);
}
});
client.onToDeviceEvent.stream.listen((event) {