zoom_setting_video.js

const { ZoomSDKError } = require('./settings.js');
const messages = require('./electron_sdk_pb.js');

var ZoomVideoSetting = (function () {
  let instance;
  /**
   * Zoom Video Setting
   * @module zoom_setting_video
   * @param {Function} onComputerCamDeviceChanged Callback event if the SDK detects that the computer camera devices have been changed.
   * @param {Function} onDefaultCamDeviceChanged Notify the user that a camera device is selected.
   * @return {ZoomVideoSetting}
   */
  function init(opts) {
 
    let clientOpts = opts || {};

    // Private methods and variables
    let _addon = clientOpts.addon.GetSettingVideoCtrl() || null;
    let _onComputerCamDeviceChanged = clientOpts.onComputerCamDeviceChanged || null;
    let _onDefaultCamDeviceChanged = clientOpts.onDefaultCamDeviceChanged || null;
    
    let cameraItem = {};
    
    /**
      Callback event if the SDK detects that the computer camera devices have been changed.
      @event onComputerCamDeviceChanged
      @param {Array} newCameraList The new list of all camera devices plugged into the computer. 
    */
    function onComputerCamDeviceChanged(newCameraList) {
      if (_onComputerCamDeviceChanged) {
        _onComputerCamDeviceChanged(newCameraList)
      }
    }
    
    /**
      Notify the user that a camera device is selected.
      @event onDefaultCamDeviceChanged
      @param {String} deviceId Specify a device to be selected.
      @param {String} deviceName Specify the device name assigned by deviceId.
    */
    function onDefaultCamDeviceChanged(deviceId, deviceName) {
      if (_onDefaultCamDeviceChanged) {
        _onDefaultCamDeviceChanged(deviceId, deviceName)
      }
    }
    
    if (_addon) {
      _addon.SetComputerCamDeviceChangedCB(onComputerCamDeviceChanged);
      _addon.SetDefaultCamDeviceChangedCB(onDefaultCamDeviceChanged);
    }

    return {
      /**
      * Set Computer Cam Device Changed Callback
      * @method Setting_SetComputerCamDeviceChangedCB
      * @param {Function} onComputerCamDeviceChanged
      * @return {Boolean}
      */
      Setting_SetComputerCamDeviceChangedCB: function (onComputerCamDeviceChanged) {
        if (_addon && onComputerCamDeviceChanged && onComputerCamDeviceChanged instanceof Function) {
          _onComputerCamDeviceChanged = onComputerCamDeviceChanged;
          return true;
        }
        return false;
      },
      /**
      * Set Default Cam Device Changed Callback
      * @method Setting_SetDefaultCamDeviceChangedCB
      * @param {Function} onDefaultCamDeviceChanged
      * @return {Boolean}
      */
      Setting_SetDefaultCamDeviceChangedCB: function (onDefaultCamDeviceChanged) {
        if (_addon && onDefaultCamDeviceChanged && onDefaultCamDeviceChanged instanceof Function) {
          _onDefaultCamDeviceChanged = onDefaultCamDeviceChanged;
          return true;
        }
        return false;
      },
      /** 
      * Select camera device.
      * @method Setting_SelectVideoCamera
      * @param {String} zn_deviceId Specify a device to be selected.
      * @return {Number} If the function succeed, the return value is SDKERR_SUCCESS.
        Otherwise failed. To get extended error information, Defined in: {@link ZoomSDKError} 
      */
      Setting_SelectVideoCamera: function(opts) {
        if (_addon) {
          let clientOpts = opts || {};
          let zn_deviceId = clientOpts.zn_deviceId || cameraItem.deviceId;
          try {
            let SelectVideoCameraParams = new messages.SelectVideoCameraParams();
            SelectVideoCameraParams.setDeviceid(zn_deviceId);
            let bytes = SelectVideoCameraParams.serializeBinary();
            return _addon.SelectVideoCamera(bytes);
          } catch (error) {
            return ZoomSDKError.SDKERR_INVALID_PARAMETER;
          }
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE;
      },
      /** 
      * Get camera device list.
      * @method Setting_GetCameraList
      * @return {Array} If the function succeed, the return value the is camera device list. Otherwise failed, returns NULL.
      */
      Setting_GetCameraList: function () {
        if (_addon) {
          let cameraList = _addon.GetCameraList();
          cameraList.forEach(function (item, index) {
            cameraItem.deviceName = item.deviceName
            cameraItem.deviceId = item.deviceId
            cameraItem.isSelected = item.isSelected
          });
          return cameraList
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE;
      },
      /** 
      * Enable or disable video mirror effect.
      * @method Setting_EnableVideoMirrorEffect
      * @param {Boolean} zn_bEnable TRUE indicates to enable the video mirror effect.
      * @return {Number} If the function succeed, the return value is SDKERR_SUCCESS.
	      Otherwise failed. To get extended error information, Defined in: {@link ZoomSDKError} 
      */
      Setting_EnableVideoMirrorEffect: function (opts) {
        if (_addon) {
          let clientOpts = opts || {};
          let zn_bEnable = clientOpts.zn_bEnable;
          try {
            let EnableVideoMirrorEffectParams = new messages.EnableVideoMirrorEffectParams();
            EnableVideoMirrorEffectParams.setBenable(zn_bEnable);
            let bytes = EnableVideoMirrorEffectParams.serializeBinary();
            return _addon.EnableVideoMirrorEffect(bytes);
          } catch (error) {
            return ZoomSDKError.SDKERR_INVALID_PARAMETER;
          }
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE
      },
      /** 
      * Enable or disable the video facial beauty effect.
      * @method Setting_EnableFaceBeautyEffect
      * @param {Boolean} zn_bEnable TRUE indicates to enable the video facial beauty effect.
      * @return {Number} If the function succeed, the return value is SDKERR_SUCCESS.
	      Otherwise failed. To get extended error information, Defined in: {@link ZoomSDKError} 
      */
      Setting_EnableFaceBeautyEffect: function (opts) {
        if (_addon) {
          let clientOpts = opts || {};
          let zn_bEnable = clientOpts.zn_bEnable;
          try {
            let EnableFaceBeautyEffectParams = new messages.EnableFaceBeautyEffectParams();
            EnableFaceBeautyEffectParams.setBenable(zn_bEnable);
            let bytes = EnableFaceBeautyEffectParams.serializeBinary();
            return _addon.EnableFaceBeautyEffect(bytes);
          } catch (error) {
            return ZoomSDKError.SDKERR_INVALID_PARAMETER;
          }
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE;
      },
      /** 
      * Check if Video Mirror Effect Enabled
      * @method Checking_IsMirrorEffectEnabled
      * @return {Boolean}
      */
      Checking_IsMirrorEffectEnabled: function () {
        if (_addon) {
          return _addon.IsMirrorEffectEnabled();
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE
      },
      /** 
      * Get the flag to enable/disable the video facial beauty effect.
      * @method Checking_IsFaceBeautyEffectEnabled
      * @return {Boolean} Enabled or disabled.
      */
      Checking_IsFaceBeautyEffectEnabled: function (opts) {
        if (_addon) {
          return _addon.IsFaceBeautyEffectEnabled();
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE
      },
      /** 
      * Enable or disable HD video.
      * @method Setting_EnableHDVideo
      * @param {Boolean} bEnable TRUE indicates to enable the HD video.
      * @return {Number} If the function succeed, the return value is SDKERR_SUCCESS.
	      Otherwise failed. To get extended error information, Defined in: {@link ZoomSDKError} 
      */
      Setting_EnableHDVideo: function (opts) {
        if (_addon) {
          let clientOpts = opts || {};
          let bEnable = clientOpts.bEnable;
          try {
            let EnableHDVideoParams = new messages.EnableHDVideoParams();
            EnableHDVideoParams.setBenable(bEnable);
            let bytes = EnableHDVideoParams.serializeBinary();
            return _addon.EnableHDVideo(bytes);
          } catch (error) {
            return ZoomSDKError.SDKERR_INVALID_PARAMETER;
          }
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE;
      },
      /** 
      * Get the flag to enable/disable the HD video.
      * @method Setting_IsHDVideoEnabled
      * @return {Boolean} Enabled or disabled.
      */
      Setting_IsHDVideoEnabled: function () {
        if (_addon) {
          return _addon.IsHDVideoEnabled();
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE;
      },
      /** 
      * Enable or disable to show the username on the video.
      * @method Setting_EnableAlwaysShowNameOnVideo
      * @param {Boolean} bEnable TRUE indicates to show the username on the video.
      * @return {Number} If the function succeed, the return value is SDKERR_SUCCESS.
	      Otherwise failed. To get extended error information, Defined in: {@link ZoomSDKError} 
      */
      Setting_EnableAlwaysShowNameOnVideo: function (opts) {
        if (_addon) {
          let clientOpts = opts || {};
          let bEnable = clientOpts.bEnable;
          try {
            let EnableAlwaysShowNameOnVideoParams = new messages.EnableAlwaysShowNameOnVideoParams();
            EnableAlwaysShowNameOnVideoParams.setBenable(bEnable);
            let bytes = EnableAlwaysShowNameOnVideoParams.serializeBinary();
            return _addon.EnableAlwaysShowNameOnVideo(bytes);
          } catch (error) {
            return ZoomSDKError.SDKERR_INVALID_PARAMETER;
          }
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE;
      },
      /** 
      * Get the flag to enable/disable to show the username on video.
      * @method Setting_IsAlwaysShowNameOnVideoEnabled
      * @return {Boolean} Enabled or disabled.
      */
      Setting_IsAlwaysShowNameOnVideoEnabled: function () {
        if (_addon) {
          return _addon.IsAlwaysShowNameOnVideoEnabled();
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE;
      },
      /** 
      * Enable or disable to turn off the video when join meeting
      * @method Setting_EnableAutoTurnOffVideoWhenJoinMeeting
      * @param {Boolean} bEnable TRUE indicates to enable to turn off the video when join meeting
      * @return {Number} If the function succeed, the return value is SDKERR_SUCCESS.
	      Otherwise failed. To get extended error information, Defined in: {@link ZoomSDKError} 
      */
      Setting_EnableAutoTurnOffVideoWhenJoinMeeting: function (opts) {
        if (_addon) {
          let clientOpts = opts || {};
          let bEnable = clientOpts.bEnable;
          try {
            let EnableAutoTurnOffVideoWhenJoinMeetingParams = new messages.EnableAutoTurnOffVideoWhenJoinMeetingParams();
            EnableAutoTurnOffVideoWhenJoinMeetingParams.setBenable(bEnable);
            let bytes = EnableAutoTurnOffVideoWhenJoinMeetingParams.serializeBinary();
            return _addon.EnableAutoTurnOffVideoWhenJoinMeeting(bytes);
          } catch (error) {
            return ZoomSDKError.SDKERR_INVALID_PARAMETER;
          }
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE;
      },
      /** 
      * Get the flag to enable to turn off the video when join meeting.
      * @method Setting_IsAutoTurnOffVideoWhenJoinMeetingEnabled
      * @return {Boolean} Enabled or disabled.
      */
      Setting_IsAutoTurnOffVideoWhenJoinMeetingEnabled: function () {
        if (_addon) {
          return _addon.IsAutoTurnOffVideoWhenJoinMeetingEnabled();
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE;
      },
      /** 
      * Enable or disable to spotlight the video.
      * @method Setting_EnableSpotlightSelf
      * @param {Boolean} bEnable TRUE indicates to enable to spotlight the video.
      * @return {Number} If the function succeed, the return value is SDKERR_SUCCESS.
	      Otherwise failed. To get extended error information, Defined in: {@link ZoomSDKError} 
      */
      Setting_EnableSpotlightSelf: function (opts) {
        if (_addon) {
          let clientOpts = opts || {};
          let bEnable = clientOpts.bEnable;
          try {
            let EnableSpotlightSelfParams = new messages.EnableSpotlightSelfParams();
            EnableSpotlightSelfParams.setBenable(bEnable);
            let bytes = EnableSpotlightSelfParams.serializeBinary();
            return _addon.EnableSpotlightSelf(bytes);
          } catch (error) {
            return ZoomSDKError.SDKERR_INVALID_PARAMETER;
          }
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE;
      },
      /** 
      * Get the flag to enable/disable to spotlight video.
      * @method Setting_IsSpotlightSelfEnabled
      * @return {Boolean} Enabled or disabled.
      */
      Setting_IsSpotlightSelfEnabled: function () {
        if (_addon) {
          return _addon.IsSpotlightSelfEnabled();
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE;
      },
      /** 
      * Enable or disable the hardware acceleration.
      * @method Setting_EnableHardwareEncode
      * @param {Boolean} bEnable TRUE indicates to enable the hardware acceleration.
      * @param {Number} encodeType Defined in: {@link ZoomSDKVideoHardwareEncodeType} 
      * @return {Number} If the function succeed, the return value is SDKERR_SUCCESS.
	      Otherwise failed. To get extended error information, Defined in: {@link ZoomSDKError} 
      */
      Setting_EnableHardwareEncode: function (opts) {
        if (_addon) {
          let clientOpts = opts || {};
          let bEnable = clientOpts.bEnable;
          let encodeType = clientOpts.encodeType;
          try {
            let EnableHardwareEncodeParams = new messages.EnableHardwareEncodeParams();
            EnableHardwareEncodeParams.setBenable(bEnable);
            EnableHardwareEncodeParams.setEncodetype(encodeType);
            let bytes = EnableHardwareEncodeParams.serializeBinary();
            return _addon.EnableHardwareEncode(bytes);
          } catch (error) {
            return ZoomSDKError.SDKERR_INVALID_PARAMETER;
          }
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE;
      },
      /** 
      * Get the flag to enable/disable the hardware acceleration.
      * @method Setting_IsHardwareEncodeEnabled
      * @param {Number} encodeType Defined in: {@link ZoomSDKVideoHardwareEncodeType} 
      * @return {Boolean} Enabled or disabled.
      */
      Setting_IsHardwareEncodeEnabled: function () {
        if (_addon) {
          let clientOpts = opts || {};
          let encodeType = clientOpts.encodeType;
          try {
            let IsHardwareEncodeEnabledParams = new messages.IsHardwareEncodeEnabledParams();
            IsHardwareEncodeEnabledParams.setEncodetype(encodeType);
            let bytes = IsHardwareEncodeEnabledParams.serializeBinary();
            return _addon.IsHardwareEncodeEnabled(bytes);
          } catch (error) {
            return ZoomSDKError.SDKERR_INVALID_PARAMETER;
          }
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE;
      },
      /** 
      * Enable or disable to show the participants in Gallery View up to 49 per screen.
      * @method Setting_Enable49VideoesInGallaryView
      * @param {Boolean} bEnable TRUE indicates to show the participants in Gallery View up to 49 per screen.
      * @return {Number} If the function succeed, the return value is SDKERR_SUCCESS.
	      Otherwise failed. To get extended error information, Defined in: {@link ZoomSDKError} 
      */
      Setting_Enable49VideoesInGallaryView: function (opts) {
        if (_addon) {
          let clientOpts = opts || {};
          let bEnable = clientOpts.bEnable;
          try {
            let Enable49VideoesInGallaryViewParams = new messages.Enable49VideoesInGallaryViewParams();
            Enable49VideoesInGallaryViewParams.setBenable(bEnable);
            let bytes = Enable49VideoesInGallaryViewParams.serializeBinary();
            return _addon.Enable49VideoesInGallaryView(bytes);
          } catch (error) {
            return ZoomSDKError.SDKERR_INVALID_PARAMETER;
          }
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE;
      },
      /** 
      * Get the flag to enable/disable to show the participants in Gallery View up to 49 per screen.
      * @method Setting_Is49VideoesInGallaryViewEnabled
      * @return {Boolean} Enabled or disabled.
      */
      Setting_Is49VideoesInGallaryViewEnabled: function () {
        if (_addon) {
          return _addon.Is49VideoesInGallaryViewEnabled();
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE;
      },
      /** 
      * Enable or disable to hide the non-video participants.
      * @method Setting_EnableHideNoVideoUsersOnWallView
      * @param {Boolean} bEnable TRUE indicates to hide the non-video Participants.
      * @return {Number} If the function succeed, the return value is SDKERR_SUCCESS.
	      Otherwise failed. To get extended error information, Defined in: {@link ZoomSDKError} 
      */
      Setting_EnableHideNoVideoUsersOnWallView: function (opts) {
        if (_addon) {
          let clientOpts = opts || {};
          let bEnable = clientOpts.bEnable;
          try {
            let EnableHideNoVideoUsersOnWallViewParams = new messages.EnableHideNoVideoUsersOnWallViewParams();
            EnableHideNoVideoUsersOnWallViewParams.setBenable(bEnable);
            let bytes = EnableHideNoVideoUsersOnWallViewParams.serializeBinary();
            return _addon.EnableHideNoVideoUsersOnWallView(bytes);
          } catch (error) {
            return ZoomSDKError.SDKERR_INVALID_PARAMETER;
          }
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE;
      },
      /** 
      * Get the flag to enable/disable to hide non-video participants.
      * @method Setting_IsHideNoVideoUsersOnWallViewEnabled
      * @return {Boolean} Enabled or disabled.
      */
      Setting_IsHideNoVideoUsersOnWallViewEnabled: function () {
        if (_addon) {
          return _addon.IsHideNoVideoUsersOnWallViewEnabled();
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE;
      },
      /** 
      * Enable or disable to show the video preview dialog when join meeting
      * @method Setting_EnableVideoPreviewDialog
      * @param {Boolean} bEnable TRUE indicates to enable to show the video preview dialog when join meeting
      * @return {Number} If the function succeed, the return value is SDKERR_SUCCESS.
	      Otherwise failed. To get extended error information, Defined in: {@link ZoomSDKError} 
      */
      Setting_EnableVideoPreviewDialog: function (opts) {
        if (_addon) {
          let clientOpts = opts || {};
          let bEnable = clientOpts.bEnable;
          try {
            let EnableVideoPreviewDialogParams = new messages.EnableVideoPreviewDialogParams();
            EnableVideoPreviewDialogParams.setBenable(bEnable);
            let bytes = EnableVideoPreviewDialogParams.serializeBinary();
            return _addon.EnableVideoPreviewDialog(bytes);
          } catch (error) {
            return ZoomSDKError.SDKERR_INVALID_PARAMETER;
          }
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE;
      },
      /** 
      * Get the flag to enable to show the video preview dialog when join meeting.
      * @method Setting_IsVideoPreviewDialogEnabled
      * @return {Boolean} Enabled or disabled.
      */
      Setting_IsVideoPreviewDialogEnabled: function () {
        if (_addon) {
          return _addon.IsVideoPreviewDialogEnabled();
        }
        return false;
      }
    };
};
  return {
    getInstance: function (opts) {
      if (!instance) {
        instance = init(opts)
      }
      return instance
    }
  };
})();

module.exports = {
  ZoomVideoSetting: ZoomVideoSetting
}