diff --git a/doc/api.md b/doc/api.md index fed58c86d..161e51995 100644 --- a/doc/api.md +++ b/doc/api.md @@ -123,12 +123,13 @@ You can also execute multiple commands using the `executeCommands` method: ```javascript api.executeCommands(commands) ``` -The `commands` parameter is an object with the names of the commands as keys and the arguments for the commands asvalues: +The `commands` parameter is an object with the names of the commands as keys and the arguments for the commands as values: ```javascript api.executeCommands({displayName: ['nickname'], toggleAudio: []}); ``` You can add event listeners to the embedded Jitsi Meet using the `addEventListener` method. +*NOTE: This method still exists but it is deprecated. JitsiMeetExternalAPI class extends [EventEmitter]. Use [EventEmitter] methods (`addListener` or `on`).* ```javascript api.addEventListener(event, listener) ``` @@ -198,6 +199,7 @@ changes. The listener will receive an object with the following structure: You can also add multiple event listeners by using `addEventListeners`. This method requires one argument of type Object. The object argument must have the names of the events as keys and the listeners of the events as values. +*NOTE: This method still exists but it is deprecated. JitsiMeetExternalAPI class extends [EventEmitter]. Use [EventEmitter] methods.* ```javascript function incomingMessageListener(object) @@ -216,12 +218,13 @@ api.addEventListeners({ ``` If you want to remove a listener you can use `removeEventListener` method with argument the name of the event. - +*NOTE: This method still exists but it is deprecated. JitsiMeetExternalAPI class extends [EventEmitter]. Use [EventEmitter] methods( `removeListener`).* ```javascript api.removeEventListener("incomingMessage"); ``` If you want to remove more than one event you can use `removeEventListeners` method with an Array with the names of the events as an argument. +*NOTE: This method still exists but it is deprecated. JitsiMeetExternalAPI class extends [EventEmitter]. Use [EventEmitter] methods.* ```javascript api.removeEventListeners(["incomingMessage", "outgoingMessageListener"]); ``` @@ -240,3 +243,4 @@ NOTE: It's a good practice to remove the conference before the page is unloaded. [config.js]: https://github.com/jitsi/jitsi-meet/blob/master/config.js [interface_config.js]: https://github.com/jitsi/jitsi-meet/blob/master/interface_config.js +[EventEmitter]: https://nodejs.org/api/events.html diff --git a/modules/API/external/external_api.js b/modules/API/external/external_api.js index 75a51da68..c61b147c3 100644 --- a/modules/API/external/external_api.js +++ b/modules/API/external/external_api.js @@ -1,5 +1,6 @@ const logger = require("jitsi-meet-logger").getLogger(__filename); import postisInit from "postis"; +import EventEmitter from "events"; /** * The minimum width for the Jitsi Meet frame @@ -99,7 +100,7 @@ function configToURLParamsArray(config) { /** * The IFrame API interface class. */ -class JitsiMeetExternalAPI { +class JitsiMeetExternalAPI extends EventEmitter { /** * Constructs new API instance. Creates iframe element that loads * Jitsi Meet. @@ -119,6 +120,8 @@ class JitsiMeetExternalAPI { */ constructor(domain, room_name, width, height, parentNode, configOverwrite, interfaceConfigOverwrite, noSsl, jwt) { + super(); + if (!width || width < MIN_WIDTH) { width = MIN_WIDTH; } @@ -283,6 +286,8 @@ class JitsiMeetExternalAPI { * readyToClose - all hangup operations are completed and Jitsi Meet is * ready to be disposed. * @param object + * + * NOTE: This method is not removed for backward comatability purposes. */ addEventListeners(object) { for (var i in object) { @@ -336,41 +341,26 @@ class JitsiMeetExternalAPI { * }} * @param event the name of the event * @param listener the listener + * + * NOTE: This method is not removed for backward comatability purposes. */ addEventListener(event, listener) { - if (!(event in events)) { - logger.error("Not supported event name."); - return; - } - // We cannot remove listeners from postis that's why we are handling the - // callback that way. - if (!this.postisListeners[event]) { - this.postis.listen(events[event], data => { - if((event in this.eventHandlers) && - typeof this.eventHandlers[event] === "function") - this.eventHandlers[event].call(null, data); - }); - this.postisListeners[event] = true; - } - this.eventHandlers[event] = listener; + this.on(event, listener); } /** * Removes event listener. * @param event the name of the event. + * NOTE: This method is not removed for backward comatability purposes. */ removeEventListener(event) { - if(!(event in this.eventHandlers)) - { - logger.error("The event " + event + " is not registered."); - return; - } - delete this.eventHandlers[event]; + this.removeListeners(event); } /** * Removes event listeners. * @param events array with the names of the events. + * NOTE: This method is not removed for backward comatability purposes. */ removeEventListeners(events) { for(var i = 0; i < events.length; i++) { @@ -395,6 +385,12 @@ class JitsiMeetExternalAPI { changeParticipantNumber.bind(null, this, 1)); this.postis.listen("participant-left", changeParticipantNumber.bind(null, this, -1)); + + for (const eventName in events) { + const postisMethod = events[eventName]; + this.postis.listen(postisMethod, + (...args) => this.emit(eventName, ...args)); + } } /**