diff --git a/lib/src/voip/models/call_membership.dart b/lib/src/voip/models/call_membership.dart index 39fc6efc..86945de1 100644 --- a/lib/src/voip/models/call_membership.dart +++ b/lib/src/voip/models/call_membership.dart @@ -19,6 +19,7 @@ class FamedlyCallMemberEvent { mem, event.senderId, event.room.id, + event.eventId, voip, ); if (callMem != null) callMemberships.add(callMem); @@ -29,6 +30,31 @@ class FamedlyCallMemberEvent { } } +/// userId - The userId of the member +/// +/// callId - The callId the member is a part of, usually an empty string +/// +/// application, scope - something you can narrow down the calls with, might be +/// removed soon +/// +/// backend - The CallBackend, either mesh or livekit +/// +/// deviceId - The deviceId of the member +/// +/// eventId - The eventId in matrix for this call membership +/// not always present because we do not have it when we are just sending +/// the event +/// +/// expiresTs - Timestamp at which this membership event will be considered expired +/// +/// membershipId - A cachebuster for state events, usually is reset every time a client +/// loads +/// +/// feeds - Feeds from mesh calls, is not used for livekit calls +/// +/// voip - The voip parent class for using timeouts probably +/// +/// roomId - The roomId for the call class CallMembership { final String userId; final String callId; @@ -36,6 +62,7 @@ class CallMembership { final String? scope; final CallBackend backend; final String deviceId; + final String? eventId; final int expiresTs; final String membershipId; final List? feeds; @@ -47,6 +74,7 @@ class CallMembership { required this.callId, required this.backend, required this.deviceId, + this.eventId, required this.expiresTs, required this.roomId, required this.membershipId, @@ -63,6 +91,7 @@ class CallMembership { 'scope': scope, 'foci_active': [backend.toJson()], 'device_id': deviceId, + 'event_id': eventId, 'expires_ts': expiresTs, 'expires': 7200000, // element compatibiltiy remove asap 'membershipID': membershipId, // sessionId @@ -74,6 +103,7 @@ class CallMembership { Map json, String userId, String roomId, + String? eventId, VoIP voip, ) { try { @@ -87,6 +117,7 @@ class CallMembership { .map((e) => CallBackend.fromJson(e)) .first, deviceId: json['device_id'], + eventId: eventId, expiresTs: json['expires_ts'], membershipId: json['membershipID'] ?? 'someone_forgot_to_set_the_membershipID', @@ -111,6 +142,7 @@ class CallMembership { scope == other.scope && backend.type == other.backend.type && deviceId == other.deviceId && + eventId == other.eventId && membershipId == other.membershipId; @override @@ -122,6 +154,7 @@ class CallMembership { scope.hashCode, backend.type.hashCode, deviceId.hashCode, + eventId.hashCode, membershipId.hashCode, ); diff --git a/lib/src/voip/utils/famedly_call_extension.dart b/lib/src/voip/utils/famedly_call_extension.dart index 195f1fe8..354d691f 100644 --- a/lib/src/voip/utils/famedly_call_extension.dart +++ b/lib/src/voip/utils/famedly_call_extension.dart @@ -232,10 +232,10 @@ extension FamedlyCallMemberEventsExtension on Room { } else { throw MatrixSDKVoipException( ''' - User ${client.userID}:${client.deviceID} is not allowed to join famedly calls in room $id, - canJoinGroupCall: $canJoinGroupCall, - groupCallsEnabledForEveryone: $groupCallsEnabledForEveryone, - needed: ${powerForChangingStateEvent(EventTypes.GroupCallMember)}, + User ${client.userID}:${client.deviceID} is not allowed to join famedly calls in room $id, + canJoinGroupCall: $canJoinGroupCall, + groupCallsEnabledForEveryone: $groupCallsEnabledForEveryone, + needed: ${powerForChangingStateEvent(EventTypes.GroupCallMember)}, own: $ownPowerLevel} plMap: ${getState(EventTypes.RoomPowerLevels)?.content} ''', @@ -253,6 +253,7 @@ extension FamedlyCallMemberEventsExtension on Room { event.content, event.senderId, event.roomId!, + event.eventId, voip, ); } @@ -262,12 +263,13 @@ extension FamedlyCallMemberEventsExtension on Room { Map content, String senderId, String roomId, + String? eventId, VoIP voip, ) { final mems = content.tryGetList('memberships'); final callMems = []; for (final m in mems ?? []) { - final mem = CallMembership.fromJson(m, senderId, roomId, voip); + final mem = CallMembership.fromJson(m, senderId, roomId, eventId, voip); if (mem != null) callMems.add(mem); } return callMems;