setRemoteVideoEnabled method

Future<void> setRemoteVideoEnabled(
  1. bool enabled
)

Sets inbound video in this OngoingCall as enabled or not.

No-op if isRemoteVideoEnabled is already enabled.

Implementation

Future<void> setRemoteVideoEnabled(bool enabled) async {
  Log.debug('setRemoteVideoEnabled($enabled)', '$runtimeType');

  if (_videoGuard.isLocked) {
    return;
  }

  await _videoGuard.protect(() async {
    final Map<CallMemberId, bool> previous = Map.fromEntries(
      members.values
          .where((e) => e.id != _me)
          .map((e) => MapEntry(e.id, e.hasVideo.value)),
    );

    try {
      for (var e in members.values.where((e) => e.id != _me)) {
        e.hasVideo.value = enabled;
      }

      if (enabled) {
        await _room?.enableRemoteVideo();
      } else {
        await _room?.disableRemoteVideo();
      }

      isRemoteVideoEnabled.value = enabled;
    } on MediaStateTransitionException catch (_) {
      // No-op.
    } catch (e) {
      for (var e in previous.entries) {
        members[e.key]?.hasVideo.value = e.value;
      }

      rethrow;
    }
  });
}