createGroupCallFromRoomStateEvent method

Future<void> createGroupCallFromRoomStateEvent(
  1. CallMembership membership, {
  2. bool emitHandleNewGroupCall = true,
})

Create a new group call from a room state event.

Implementation

Future<void> createGroupCallFromRoomStateEvent(
  CallMembership membership, {
  bool emitHandleNewGroupCall = true,
}) async {
  if (membership.isExpired) {
    Logs().d(
        'Ignoring expired membership in passive groupCall creator. ${membership.toJson()}');
    return;
  }

  final room = client.getRoomById(membership.roomId);

  if (room == null) {
    Logs().w('Couldn\'t find room ${membership.roomId} for GroupCallSession');
    return;
  }

  if (membership.application != 'm.call' && membership.scope != 'm.room') {
    Logs().w('Received invalid group call application or scope.');
    return;
  }

  final groupCall = GroupCallSession(
    client: client,
    voip: this,
    room: room,
    backend: membership.backend,
    groupCallId: membership.callId,
    application: membership.application,
    scope: membership.scope,
  );

  if (groupCalls.containsKey(
      VoipId(roomId: membership.roomId, callId: membership.callId))) {
    return;
  }

  setGroupCallById(groupCall);

  onIncomingGroupCall.add(groupCall);
  if (emitHandleNewGroupCall) {
    await delegate.handleNewGroupCall(groupCall);
  }
}