modifySettings function

Future<void> modifySettings(
  1. ModifySettingsOptions options
)

Modifies settings for a given room and updates the state accordingly.

  • options: Options for modifying settings, including:
    • showAlert: Function to show alert messages (optional).
    • roomName: The name of the room.
    • audioSet: The audio setting to be applied.
    • videoSet: The video setting to be applied.
    • screenshareSet: The screenshare setting to be applied.
    • chatSet: The chat setting to be applied.
    • socket: The socket instance for emitting events.
    • updateAudioSetting: Function to update the audio setting state.
    • updateVideoSetting: Function to update the video setting state.
    • updateScreenshareSetting: Function to update the screenshare setting state.
    • updateChatSetting: Function to update the chat setting state.
    • updateIsSettingsModalVisible: Function to update the visibility of the settings modal.

Throws an alert if any setting is set to "approval" in demo mode (room name starts with "d").

Example usage:

modifySettings(
  ModifySettingsOptions(
    roomName: "d123",
    audioSet: "allow",
    videoSet: "allow",
    screenshareSet: "deny",
    chatSet: "allow",
    socket: mySocketInstance,
    updateAudioSetting: setAudioSetting,
    updateVideoSetting: setVideoSetting,
    updateScreenshareSetting: setScreenshareSetting,
    updateChatSetting: setChatSetting,
    updateIsSettingsModalVisible: setIsSettingsModalVisible,
    showAlert: (options) => alertUser(options),
  ),
);

Implementation

Future<void> modifySettings(ModifySettingsOptions options) async {
  if (options.roomName.toLowerCase().startsWith('d')) {
    // None of the settings should be set to 'approval' in demo mode
    if (options.audioSet == 'approval' ||
        options.videoSet == 'approval' ||
        options.screenshareSet == 'approval' ||
        options.chatSet == 'approval') {
      options.showAlert?.call(
        message: 'You cannot set approval for demo mode.',
        type: 'danger',
        duration: 3000,
      );
      return;
    }
  }

  // Update settings based on the provided options
  if (options.audioSet.isNotEmpty) options.updateAudioSetting(options.audioSet);
  if (options.videoSet.isNotEmpty) options.updateVideoSetting(options.videoSet);
  if (options.screenshareSet.isNotEmpty) {
    options.updateScreenshareSetting(options.screenshareSet);
  }
  if (options.chatSet.isNotEmpty) options.updateChatSetting(options.chatSet);

  // Emit updated settings
  final settings = [
    options.audioSet,
    options.videoSet,
    options.screenshareSet,
    options.chatSet
  ];
  options.socket!.emit('updateSettingsForRequests', {
    'settings': settings,
    'roomName': options.roomName,
  });

  // Close modal
  options.updateIsSettingsModalVisible(false);
}