controlMedia function

Future<void> controlMedia(
  1. ControlMediaOptions options
)

Handles the controlMedia socket event. Called when media needs to be controlled due to focus mode.

Example:

socket.on("controlMedia", (data) async {
  await controlMedia(ControlMediaOptions(
    data: ControlMediaData.fromMap(data),
    showAlert: showAlert,
    clickAudio: clickAudio,
    clickVideo: clickVideo,
    audioAlreadyOn: audioAlreadyOn,
    videoAlreadyOn: videoAlreadyOn,
  ));
});

Implementation

Future<void> controlMedia(ControlMediaOptions options) async {
  try {
    final data = options.data;

    if (data.action == 'mute') {
      if (data.type == 'audio' &&
          options.audioAlreadyOn &&
          options.clickAudio != null) {
        options.clickAudio!();
      } else if (data.type == 'video' &&
          options.videoAlreadyOn &&
          options.clickVideo != null) {
        options.clickVideo!();
      }

      if (options.showAlert != null && data.reason != null) {
        final mediaType = data.type == 'audio' ? 'microphone' : 'camera';
        options.showAlert!(
          message: 'Your $mediaType has been muted. ${data.reason}',
          type: 'info',
          duration: 3000,
        );
      }
    }
  } catch (e) {
    debugPrint('Error handling controlMedia: $e');
  }
}