Source: zoom_premeeting.js

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

/**
*@module
*/
var ZoomPreMeeting = (function () {
  var instance;
  /**
   * mode: Zoom SDK ZoomPreMeeting Service Init
   * @param {Object} addon zoom sdk module
   * @return {ZoomPreMeeting}
   */
  function init(opts) { 
    var clientOpts = opts || {};

    // Private methods and variables
    var _addon = clientOpts.addon.GetPremeetingObj() || null;
    let _onScheduleOrEditMeeting = clientOpts.onScheduleOrEditMeeting || null;
    let _onListMeeting = clientOpts.onListMeeting || null;
    let _onDeleteMeeting = clientOpts.onDeleteMeeting || null;

    function onScheduleOrEditMeeting(result, meetingUniqueID) {
      if (_onScheduleOrEditMeeting) {
        _onScheduleOrEditMeeting(result, meetingUniqueID)
      }
    }

    function onListMeeting(result, meetingList) {
      if (_onListMeeting) {
        _onListMeeting(result, meetingList)
      }
    }

    function onDeleteMeeting(result) {
      if (_onDeleteMeeting) {
        _onDeleteMeeting(result)
      }
    }

    if (_addon) {
      _addon.SetOnScheduleOrEditMeetingCB(onScheduleOrEditMeeting);
      _addon.SetOnListMeetingCB(onListMeeting);
      _addon.SetOnDeleteMeetingCB(onDeleteMeeting);
    }

    return {
      /**
      * mode: Set On Schedule Or Edit Meeting CB
      * @param {Function} onScheduleOrEditMeeting
      * @return {Boolean}
      */
      SetOnScheduleOrEditMeetingCB: function (onScheduleOrEditMeeting) {
        if (_addon && onScheduleOrEditMeeting && onScheduleOrEditMeeting instanceof Function) {
          _onScheduleOrEditMeeting = onScheduleOrEditMeeting;
          return true;
        }
        return false;
      },
      /**
      * mode: Set On List Meeting CB
      * @param {Function} onListMeeting
      * @return {Boolean}
      */
      SetOnListMeetingCB: function (onListMeeting) {
        if (_addon && onListMeeting && onListMeeting instanceof Function) {
          _onListMeeting = onListMeeting;
          return true;
        }
        return false;
      },
      /**
      * mode: Set On Delete Meeting CB
      * @param {Function} onDeleteMeeting
      * @return {Boolean}
      */
      SetOnDeleteMeetingCB: function (onDeleteMeeting) {
        if (_addon && onDeleteMeeting && onDeleteMeeting instanceof Function) {
          _onDeleteMeeting = onDeleteMeeting;
          return true;
        }
        return false;
      },
      /**
      * mode: Schedule Meeting With WndParams
      * @param {String} hSelfWnd SelfWnd (win platform require hexadecimal, mac platform means height)
      * @param {String} hParent parent window handle (win platform require hexadecimal, mac platform means width)
      * @param {String} left chat window left pos
      * @param {String} top chat window top pos
      * @return {ZoomSDKError}
      */
      ScheduleMeetingWithWndParams: function (opts) {
        if (_addon) {
          let clientOpts = opts || {};
          let hSelfWnd = clientOpts.hSelfWnd || '0';
          let hParent = clientOpts.hParent || '0';
          let left = clientOpts.left || '0';
          let top = clientOpts.top || '0';
          try {
            let ScheduleMeetingWithWndParams = new messages.ScheduleMeetingWithWndParams();
            ScheduleMeetingWithWndParams.setHselfwnd(hSelfWnd);
            ScheduleMeetingWithWndParams.setHparent(hParent);
            ScheduleMeetingWithWndParams.setLeft(left);
            ScheduleMeetingWithWndParams.setTop(top);
            let bytes = ScheduleMeetingWithWndParams.serializeBinary();
            return _addon.ScheduleMeetingWithWndParams(bytes);
          } catch (error) {
            return ZoomSDKError.SDKERR_INVALID_PARAMETER;
          }
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE;
      },
      /**
      * mode: Schedule Meeting
      * @return {ZoomSDKError}
      */
      ScheduleMeeting: function (opts) {
        if (_addon) {
          return _addon.ScheduleMeeting();
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE;
      },
      /**
      * mode: Edit Meeting
      * @param {Number} meetingUniqueID
      * @return {ZoomSDKError}
      */
      EditMeeting: function (opts) {
        if (_addon) {
          let clientOpts = opts || {};
          let meetingUniqueID = clientOpts.meetingUniqueID;
          try {
            let EditMeetingParams = new messages.EditMeetingParams();
            EditMeetingParams.setMeetingnumber(Number(meetingUniqueID));
            let bytes = EditMeetingParams.serializeBinary();
            return _addon.EditMeeting(bytes);
          } catch (error) {
            return ZoomSDKError.SDKERR_INVALID_PARAMETER;
          }
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE;
      },
      /**
      * mode: Edit Meeting
      * @return {ZoomSDKError}
      */
      ListMeeting: function (opts) {
        if (_addon) {
          return _addon.ListMeeting();
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE;
      },
      /**
      * mode: Edit Meeting
      * @param {Number} meetingUniqueID
      * @return {ZoomSDKError}
      */
      DeleteMeeting: function (opts) {
        if (_addon) {
          let clientOpts = opts || {};
          let meetingUniqueID = clientOpts.meetingUniqueID;
          try {
            let DeleteMeetingParams = new messages.DeleteMeetingParams();
            DeleteMeetingParams.setMeetingnumber(Number(meetingUniqueID));
            let bytes = DeleteMeetingParams.serializeBinary();
            return _addon.DeleteMeeting(bytes);
          } catch (error) {
            return ZoomSDKError.SDKERR_INVALID_PARAMETER;
          }
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE;
      },
      /**
      * mode: Edit Meeting With Wnd Params
      * @param {String} hSelfWnd (win platform require hexadecimal, mac platform means height)
      * @param {String} hParent (win platform require hexadecimal, mac platform means width)
      * @param {String} left Float Video left pos
      * @param {String} top Float Video pos
      * @param {Number} meetingUniqueID
      * @return {ZoomSDKError}
      */
      EditMeetingWithWndParams: function (opts) {
        if (_addon) {
          let clientOpts = opts || {};
          let hSelfWnd = clientOpts.hSelfWnd || '0';
          let hParent = clientOpts.hParent || '0';
          let left = clientOpts.left || '0';
          let top = clientOpts.top || '0';
          let meetingUniqueID = clientOpts.meetingUniqueID;
          try {
            let EditMeetingWithWndParams = new messages.EditMeetingWithWndParams();
            EditMeetingWithWndParams.setHselfwnd(hSelfWnd);
            EditMeetingWithWndParams.setHparent(hParent);
            EditMeetingWithWndParams.setLeft(left);
            EditMeetingWithWndParams.setTop(top);
            EditMeetingWithWndParams.setMeetingnumber(Number(meetingUniqueID));
            let bytes = EditMeetingWithWndParams.serializeBinary();
            return _addon.EditMeetingWithWndParams(bytes);
          } catch (error) {
            return ZoomSDKError.SDKERR_INVALID_PARAMETER;
          }
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE;
      }
    };
  };
  return {
    /**
     * mode: Get Zoom SDK ZoomPreMeeting Service Module
     * @return {ZoomPreMeeting}
    */
    getInstance: function (opts) {
      if (!instance) {
        instance = init(opts);
      }
      return instance;
    }
  };
})();

module.exports = {
  ZoomPreMeeting: ZoomPreMeeting
}