Source: zoom_setting_recording.js

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

/**
*@module
*/
var ZoomRecordingSetting = (function () {

  var instance;
   /**
   * mode: Zoom SDK RecordingSetting Service Init
   * @param {Object} addon zoom sdk module
   * @return {ZoomRecordingSetting}
   */
  function init(opts) {
    let clientOpts = opts || {};
    // Private methods and variables
    let _addon = clientOpts.addon.GetSettingRecordingCtrl() || null;
    let _onCloudRecordingStorageInfo = clientOpts.onCloudRecordingStorageInfo || null;

    function onCloudRecordingStorageInfo(storage_total_size, storage_used_size, allow_exceed_storage) {
      if (_onCloudRecordingStorageInfo) {
        _onCloudRecordingStorageInfo(storage_total_size, storage_used_size, allow_exceed_storage)
      }
    }
    
    if (_addon) {
      _addon.SetonCloudRecordingStorageInfoCB(onCloudRecordingStorageInfo);
    }

    return {
      /**
      * mode: Setb on Cloud Recording Storage Info CB
      * @param {Function} onCloudRecordingStorageInfo
      * @return {Boolean}
      */
      Setting_SetonCloudRecordingStorageInfoCB: function (onCloudRecordingStorageInfo) {
        if (_addon && onCloudRecordingStorageInfo && onCloudRecordingStorageInfo instanceof Function) {
          _onCloudRecordingStorageInfo = onCloudRecordingStorageInfo;
          return true;
        }
        return false;
      },
      /** Set Recording Path
      * @param {String} szPath
      * @return {ZoomSDKError}
      */
      Setting_SetRecordingPath: function (opts) {
        if (_addon) {
          let clientOpts = opts || {};
          let zn_szPath = clientOpts.zn_szPath;
          try {
            let SetRecordingPathParams = new messages.SetRecordingPathParams();
            SetRecordingPathParams.setRecpath(zn_szPath);
            let bytes = SetRecordingPathParams.serializeBinary();
            return _addon.SetRecordingPath(bytes);
          } catch (error) {
            return ZoomSDKError.SDKERR_INVALID_PARAMETER;
          }
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE;
      },
      /** mode: Get Recording Path
      * @return {ZoomSDKError}
      */
      Getting_GetRecordingPath: function () {
        if (_addon) {
          return _addon.GetRecordingPath();
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE;
      },
      /** Can Get Cloud Recording Storage Info
      * @return {ZoomSDKError}
      */
      Setting_CanGetCloudRecordingStorageInfo: function () {
        if (_addon) {
          return _addon.CanGetCloudRecordingStorageInfo();
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE;
      },
      /** Get Cloud Recording Storage Info
      * @return {ZoomSDKError}
      */
      Getting_GetCloudRecordingStorageInfo: function () {
        if (_addon) {
          return _addon.GetCloudRecordingStorageInfo();
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE;
      },
      /** Get Recording Management URL
      * @return {ZoomSDKError}
      */
      Getting_GetRecordingManagementURL: function () {
        if (_addon) {
          return _addon.GetRecordingManagementURL();
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE;
      },
      /** Can Get Recording Management URL
      * @return {ZoomSDKError}
      */
      Setting_CanGetRecordingManagementURL: function () {
        if (_addon) {
          return _addon.CanGetRecordingManagementURL();
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE;
      },
      /** Enable Select Record File Location After Meeting
      * @param {Boolean} bEnable
      * @return {ZoomSDKError}
      */
      Setting_EnableSelectRecordFileLocationAfterMeeting: function (opts) {
        if (_addon) {
          let clientOpts = opts || {};
          let bEnable = clientOpts.bEnable;
          try {
            let EnableSelectRecordFileLocationAfterMeetingParams = new messages.EnableSelectRecordFileLocationAfterMeetingParams();
            EnableSelectRecordFileLocationAfterMeetingParams.setBenable(bEnable);
            let bytes = EnableSelectRecordFileLocationAfterMeetingParams.serializeBinary();
            return _addon.EnableSelectRecordFileLocationAfterMeeting(bytes);
          } catch (error) {
            return ZoomSDKError.SDKERR_INVALID_PARAMETER;
          }
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE;
      },
      /** Is Select Record File Location After Meeting Enabled
      * @return {ZoomSDKError}
      */
      Setting_IsSelectRecordFileLocationAfterMeetingEnabled: function () {
        if (_addon) {
          return _addon.IsSelectRecordFileLocationAfterMeetingEnabled();
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE;
      },
      /** Enable Multi Audio Stream Record
      * @param {Boolean} bEnable
      * @return {ZoomSDKError}
      */
      Setting_EnableMultiAudioStreamRecord: function (opts) {
        if (_addon) {
          let clientOpts = opts || {};
          let bEnable = clientOpts.bEnable;
          try {
            let EnableMultiAudioStreamRecordParams = new messages.EnableMultiAudioStreamRecordParams();
            EnableMultiAudioStreamRecordParams.setBenable(bEnable);
            let bytes = EnableMultiAudioStreamRecordParams.serializeBinary();
            return _addon.EnableMultiAudioStreamRecord(bytes);
          } catch (error) {
            return ZoomSDKError.SDKERR_INVALID_PARAMETER;
          }
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE;
      },
      /** Is Multi Audio Stream Record Enabled
      * @return {ZoomSDKError}
      */
      Setting_IsMultiAudioStreamRecordEnabled: function () {
        if (_addon) {
          return _addon.IsMultiAudioStreamRecordEnabled();
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE;
      },
      /** Enable Add Time stamp Water mark
      * @param {Boolean} bEnable
      * @return {ZoomSDKError}
      */
      Setting_EnableAddTimestampWatermark: function (opts) {
        if (_addon) {
          let clientOpts = opts || {};
          let bEnable = clientOpts.bEnable;
          try {
            let EnableAddTimestampWatermarkParams = new messages.EnableAddTimestampWatermarkParams();
            EnableAddTimestampWatermarkParams.setBenable(bEnable);
            let bytes = EnableAddTimestampWatermarkParams.serializeBinary();
            return _addon.EnableAddTimestampWatermark(bytes);
          } catch (error) {
            return ZoomSDKError.SDKERR_INVALID_PARAMETER;
          }
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE;
      },
      /** Is Add Time stamp Water mark Enabled
      * @return {ZoomSDKError}
      */
      Setting_IsAddTimestampWatermarkEnabled: function () {
        if (_addon) {
          return _addon.IsAddTimestampWatermarkEnabled();
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE;
      },
      /** Enable Optimize For 3rd Party Video Editor
      * @param {Boolean} bEnable
      * @return {ZoomSDKError}
      */
      Setting_EnableOptimizeFor3rdPartyVideoEditor: function (opts) {
        if (_addon) {
          let clientOpts = opts || {};
          let bEnable = clientOpts.bEnable;
          try {
            let EnableOptimizeFor3rdPartyVideoEditorParams = new messages.EnableOptimizeFor3rdPartyVideoEditorParams();
            EnableOptimizeFor3rdPartyVideoEditorParams.setBenable(bEnable);
            let bytes = EnableOptimizeFor3rdPartyVideoEditorParams.serializeBinary();
            return _addon.EnableOptimizeFor3rdPartyVideoEditor(bytes);
          } catch (error) {
            return ZoomSDKError.SDKERR_INVALID_PARAMETER;
          }
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE;
      },
      /** Is Optimize For 3rd Party Video Editor Enabled
      * @return {ZoomSDKError}
      */
      Setting_IsOptimizeFor3rdPartyVideoEditorEnabled: function () {
        if (_addon) {
          return _addon.IsOptimizeFor3rdPartyVideoEditorEnabled();
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE;
      },
      /** Enable Show Video Thumbnail When Share
      * @param {Boolean} bEnable
      * @return {ZoomSDKError}
      */
      Setting_EnableShowVideoThumbnailWhenShare: function (opts) {
        if (_addon) {
          let clientOpts = opts || {};
          let bEnable = clientOpts.bEnable;
          try {
            let EnableShowVideoThumbnailWhenShareParams = new messages.EnableShowVideoThumbnailWhenShareParams();
            EnableShowVideoThumbnailWhenShareParams.setBenable(bEnable);
            let bytes = EnableShowVideoThumbnailWhenShareParams.serializeBinary();
            return _addon.EnableShowVideoThumbnailWhenShare(bytes);
          } catch (error) {
            return ZoomSDKError.SDKERR_INVALID_PARAMETER;
          }
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE;
      },
      /** Is Show Video Thumbnail When Share Enabled
      * @return {ZoomSDKError}
      */
      Setting_IsShowVideoThumbnailWhenShareEnabled: function () {
        if (_addon) {
          return _addon.IsShowVideoThumbnailWhenShareEnabled();
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE;
      },
      /** Enable Place Video Next To Share In Record
      * @param {Boolean} bEnable
      * @return {ZoomSDKError}
      */
      Setting_EnablePlaceVideoNextToShareInRecord: function (opts) {
        if (_addon) {
          let clientOpts = opts || {};
          let bEnable = clientOpts.bEnable;
          try {
            let EnablePlaceVideoNextToShareInRecordParams = new messages.EnablePlaceVideoNextToShareInRecordParams();
            EnablePlaceVideoNextToShareInRecordParams.setBenable(bEnable);
            let bytes = EnablePlaceVideoNextToShareInRecordParams.serializeBinary();
            return _addon.EnablePlaceVideoNextToShareInRecord(bytes);
          } catch (error) {
            return ZoomSDKError.SDKERR_INVALID_PARAMETER;
          }
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE;
      },
      /** Is Place Video Next To Share In Record Enabled
      * @return {ZoomSDKError}
      */
      Setting_IsPlaceVideoNextToShareInRecordEnabled: function () {
        if (_addon) {
          return _addon.IsPlaceVideoNextToShareInRecordEnabled();
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE;
      }
    };
  };
  return {
    /**
     * mode: Get Zoom SDK General Setting Service Module
     * @return {ZoomGeneralSetting}
    */
    getInstance: function (opts) {
      if (!instance) {
        instance = init(opts);
      }
      return instance;
    }
  };
})();

module.exports = {
  ZoomRecordingSetting: ZoomRecordingSetting
}