diff --git a/public/lib/eventemitter.js b/public/lib/eventemitter.js index a1b40e38c..3177518de 100644 --- a/public/lib/eventemitter.js +++ b/public/lib/eventemitter.js @@ -42,6 +42,46 @@ EventEmitter.prototype.on = function (event, listener) { this.events[event].push(listener); }; +/** + * Makes the listener the last to be called when the event is emitted + * @param {string} event Event name + * @param {function} listener Event listener + */ +EventEmitter.prototype.makeLast = function (event, listener) { + if (typeof this.events[event] !== 'object') { + this.events[event] = []; + } + + const events = this.events[event]; + const idx = events.indexOf(listener); + + if (idx > -1) { + events.splice(idx, 1); + } + + events.push(listener); +} + +/** + * Makes the listener the first to be called when the event is emitted + * @param {string} event Event name + * @param {function} listener Event listener + */ +EventEmitter.prototype.makeFirst = function (event, listener) { + if (typeof this.events[event] !== 'object') { + this.events[event] = []; + } + + const events = this.events[event]; + const idx = events.indexOf(listener); + + if (idx > -1) { + events.splice(idx, 1); + } + + events.unshift(listener); +} + EventEmitter.prototype.removeListener = function (event, listener) { var idx; diff --git a/public/scripts/extensions/translate/index.js b/public/scripts/extensions/translate/index.js index 96b032752..9bbfc1098 100644 --- a/public/scripts/extensions/translate/index.js +++ b/public/scripts/extensions/translate/index.js @@ -642,9 +642,9 @@ jQuery(() => { loadSettings(); - eventSource.on(event_types.CHARACTER_MESSAGE_RENDERED, handleIncomingMessage); + eventSource.makeFirst(event_types.CHARACTER_MESSAGE_RENDERED, handleIncomingMessage); + eventSource.makeFirst(event_types.USER_MESSAGE_RENDERED, handleOutgoingMessage); eventSource.on(event_types.MESSAGE_SWIPED, handleIncomingMessage); - eventSource.on(event_types.USER_MESSAGE_RENDERED, handleOutgoingMessage); eventSource.on(event_types.IMPERSONATE_READY, handleImpersonateReady); eventSource.on(event_types.MESSAGE_EDITED, handleMessageEdit); diff --git a/public/scripts/extensions/tts/index.js b/public/scripts/extensions/tts/index.js index 3d5765eff..6d187c76b 100644 --- a/public/scripts/extensions/tts/index.js +++ b/public/scripts/extensions/tts/index.js @@ -1063,8 +1063,8 @@ $(document).ready(function () { eventSource.on(event_types.CHAT_CHANGED, onChatChanged); eventSource.on(event_types.MESSAGE_DELETED, onMessageDeleted); eventSource.on(event_types.GROUP_UPDATED, onChatChanged); - eventSource.on(event_types.MESSAGE_SENT, onMessageEvent); - eventSource.on(event_types.MESSAGE_RECEIVED, onMessageEvent); + eventSource.makeLast(event_types.CHARACTER_MESSAGE_RENDERED, onMessageEvent); + eventSource.makeLast(event_types.USER_MESSAGE_RENDERED, onMessageEvent); SlashCommandParser.addCommandObject(SlashCommand.fromProps({ name: 'speak', callback: onNarrateText, aliases: ['narrate', 'tts'],