zoom_meeting_close_caption.js

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

var ZoomMeetingCloseCaption = (function () {
    var instance;
  /**
   * Zoom Close Captions
   * @module zoom_meeting_close_caption
   * @param {Function} onLiveTranscriptionMsgInfoReceived Callback event used to inform the user once a live transcription message is received.
   * @param {Function} onOriginalLanguageMsgReceived Callback event used to inform the user once the original language message is received.
   * @return {ZoomMeetingCloseCaption}
   */
  function init(opts) {
    let clientOpts = opts || {};
    // Private methods and variables
    let _addon = clientOpts.addon.GetMeetingCloseCaptionCtrl() || null;

    let _onLiveTranscriptionMsgInfoReceived = clientOpts.onLiveTranscriptionMsgInfoReceived || null;
    let _onOriginalLanguageMsgReceived = clientOpts.onOriginalLanguageMsgReceived || null;

    /**
     * Live transcription message received callback.
     * @event onLiveTranscriptionMsgInfoReceived
     * @param {Object} messageInfo The live transcription message with the following properties:
     *   - messageID: The message ID of the current message.
     *   - speakerID: The speaker's ID.
     *   - speakerName: The speaker's name.
     *   - messageContent: The content of the current message.
     *   - timeStamp: The timestamp of the current message.
     *   - messageType: The type of the current message.
     */
    function onLiveTranscriptionMsgInfoReceived(messageInfo) {
      let meeting_close_caption = {
        messageID: messageInfo.messageID,
        speakerID: messageInfo.speakerID,
        speakerName: messageInfo.speakerName,
        messageContent: messageInfo.messageContent,
        timeStamp: messageInfo.timeStamp,
        messageType: messageInfo.messageType,
      }
      if (_onLiveTranscriptionMsgInfoReceived) {
        _onLiveTranscriptionMsgInfoReceived(meeting_close_caption);
      }
    }

    /**
     * Original language message received callback.
     * @event onOriginalLanguageMsgReceived
     * @param {Object} messageInfo The spoken language message with the following properties:
     *   - messageID: The message ID of the current message.
     *   - speakerID: The speaker's ID.
     *   - speakerName: The speaker's name.
     *   - messageContent: The content of the current message.
     *   - timeStamp: The timestamp of the current message.
     *   - messageType: The type of the current message.
     */
    function onOriginalLanguageMsgReceived(messageInfo) {
        let meeting_close_caption = {
            messageID: messageInfo.messageID,
            speakerID: messageInfo.speakerID,
            speakerName: messageInfo.speakerName,
            messageContent: messageInfo.messageContent,
            timeStamp: messageInfo.timeStamp,
            messageType: messageInfo.messageType,
        }
        if (_onOriginalLanguageMsgReceived) {
            _onOriginalLanguageMsgReceived(meeting_close_caption);
        }
    }

    if (_addon) {
      _addon.SetOnLiveTranscriptionMsgInfoReceivedCB(onLiveTranscriptionMsgInfoReceived);
      _addon.SetOnOriginalLanguageMsgReceivedCB(onOriginalLanguageMsgReceived);
    }

    return {
      // Public methods and variables
      /**
       * Set onLiveTranscriptionMsgInfoReceived callback.
       * @method SetOnLiveTranscriptionMsgInfoReceivedCB
       * @param {Function} onLiveTranscriptionMsgInfoReceived
       * @return {Boolean} true or false
       */
      SetOnLiveTranscriptionMsgInfoReceivedCB: function (onLiveTranscriptionMsgInfoReceived) {
        if (_addon && onLiveTranscriptionMsgInfoReceived && onLiveTranscriptionMsgInfoReceived instanceof Function) {
          _onLiveTranscriptionMsgInfoReceived = onLiveTranscriptionMsgInfoReceived;
          return true;
        }
        return false;
      },
      /**
       * Set onOriginalLanguageMsgReceived callback.
       * @method SetOnOriginalLanguageMsgReceivedCB
       * @param {Function} onOriginalLanguageMsgReceived
       * @return {Boolean} true or false
       */
      SetOnOriginalLanguageMsgReceivedCB: function (onOriginalLanguageMsgReceived) {
        if (_addon && onOriginalLanguageMsgReceived && onOriginalLanguageMsgReceived instanceof Function) {
          _onOriginalLanguageMsgReceived = onOriginalLanguageMsgReceived;
          return true;
        }
        return false;
      },
      GetAvailableMeetingSpokenLanguages: function () {
        if (_addon) {
          try {
            let languageList = _addon.GetAvailableMeetingSpokenLanguages();
            if (languageList) {
              return languageList;
            }
            return [];
          } catch (error) {
            return ZoomSDKError.SDKERR_UNINITIALIZE;
          }
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE;
      },
      GetAvailableTranslationLanguages: function () {
        if (_addon) {
          try {
            let languageList = _addon.GetAvailableTranslationLanguages();
            if (languageList) {
              return languageList;
            }
            return [];
          } catch (error) {
            return ZoomSDKError.SDKERR_UNINITIALIZE;
          }
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE;
      },
      GetTranslationLanguage: function () {
        if (_addon) {
          try {
            let language = _addon.GetTranslationLanguage();
            return language;
          } catch (error) {
            return ZoomSDKError.SDKERR_UNINITIALIZE;
          }
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE;
      },
      SetTranslationLanguage: function (opts) {
        if (_addon) {
          let clientOpts = opts || {};
          let languageID = clientOpts.languageID;
          if (languageID === undefined || languageID === null) {
            return ZoomSDKError.SDKERR_INVALID_PARAMETER;
          }
          try {
            let SetTranslationLanguageParams =
              new messages.SetTranslationLanguageParams();
            SetTranslationLanguageParams.setLanguageid(Number(languageID));
            let bytes = SetTranslationLanguageParams.serializeBinary();
            return _addon.SetTranslationLanguage(bytes);
          } catch (error) {
            return ZoomSDKError.SDKERR_INVALID_PARAMETER;
          }
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE;
      },
      SetMeetingSpokenLanguage: function (opts) {
        if (_addon) {
          let clientOpts = opts || {};
          let languageID = clientOpts.languageID;
          let isForAll = clientOpts.isForAll;
          if (languageID === undefined || languageID === null) {
            return ZoomSDKError.SDKERR_INVALID_PARAMETER;
          }
          try {
            let SetMeetingSpokenLanguageParams =
              new messages.SetMeetingSpokenLanguageParams();
            SetMeetingSpokenLanguageParams.setLanguageid(Number(languageID));
            SetMeetingSpokenLanguageParams.setIsforall(isForAll);
            let bytes = SetMeetingSpokenLanguageParams.serializeBinary();
            return _addon.SetMeetingSpokenLanguage(bytes);
          } catch (error) {
            return ZoomSDKError.SDKERR_INVALID_PARAMETER;
          }
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE;
      },
      EnableCaptions: function (opts) {
        if (_addon) {
          let clientOpts = opts || {};
          let enable = clientOpts.enable;
          try {
            let EnableCaptionsParams = new messages.EnableCaptionsParams();
            EnableCaptionsParams.setEnable(enable);
            let bytes = EnableCaptionsParams.serializeBinary();
            return _addon.EnableCaptions(bytes);
          } catch (error) {
            return ZoomSDKError.SDKERR_INVALID_PARAMETER;
          }
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE;
      },
      StartLiveTranscription: function () {
        if (_addon) {
          try {
            return _addon.StartLiveTranscription();
          } catch (error) {
            return ZoomSDKError.SDKERR_INVALID_PARAMETER;
          }
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE;
      },
      StopLiveTranscription: function () {
        if (_addon) {
          try {
            return _addon.StopLiveTranscription();
          } catch (error) {
            return ZoomSDKError.SDKERR_INVALID_PARAMETER;
          }
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE;
      },
      EnableReceiveSpokenLanguageContent: function (opts) {
        if (_addon) {
          let clientOpts = opts || {};
          let enable = clientOpts.enable;
          try {
            let EnableReceiveSpokenLanguageContentParams =
              new messages.EnableReceiveSpokenLanguageContentParams();
            EnableReceiveSpokenLanguageContentParams.setEnable(enable);
            let bytes =
              EnableReceiveSpokenLanguageContentParams.serializeBinary();
            return _addon.EnableReceiveSpokenLanguageContent(bytes);
          } catch (error) {
            return ZoomSDKError.SDKERR_INVALID_PARAMETER;
          }
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE;
      },
      IsReceiveSpokenLanguageContentEnabled: function () {
        if (_addon) {
          try {
            return _addon.IsReceiveSpokenLanguageContentEnabled();
          } catch (error) {
            return ZoomSDKError.SDKERR_INVALID_PARAMETER;
          }
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE;
      },
      IsLiveTranscriptionFeatureEnabled: function () {
        if (_addon) {
          try {
            return _addon.IsLiveTranscriptionFeatureEnabled();
          } catch (error) {
            return ZoomSDKError.SDKERR_INVALID_PARAMETER;
          }
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE;
      },
      IsMultiLanguageTranscriptionEnabled: function () {
        if (_addon) {
          try {
            return _addon.IsMultiLanguageTranscriptionEnabled();
          } catch (error) {
            return ZoomSDKError.SDKERR_INVALID_PARAMETER;
          }
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE;
      },
      IsTextLiveTranslationEnabled: function () {
        if (_addon) {
          try {
            return _addon.IsTextLiveTranslationEnabled();
          } catch (error) {
            return ZoomSDKError.SDKERR_INVALID_PARAMETER;
          }
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE;
      },
    };
  }

  return {
    getInstance: function (opts) {
      if (!instance) {
        instance = init(opts);
      }
      return instance;
    },
  };
})();

module.exports = {
  ZoomMeetingCloseCaption: ZoomMeetingCloseCaption,
}