Переглянути джерело

Remove override in bookmarks plugin

JC Brand 5 місяців тому
батько
коміт
3660afa99e
2 змінених файлів з 34 додано та 17 видалено
  1. 12 15
      src/headless/plugins/bookmarks/plugin.js
  2. 22 2
      src/headless/plugins/muc/muc.js

+ 12 - 15
src/headless/plugins/bookmarks/plugin.js

@@ -20,21 +20,6 @@ Strophe.addNamespace('BOOKMARKS2', 'urn:xmpp:bookmarks:1');
 converse.plugins.add('converse-bookmarks', {
     dependencies: ['converse-chatboxes', 'converse-muc'],
 
-    overrides: {
-        // Overrides mentioned here will be picked up by converse.js's
-        // plugin architecture they will replace existing methods on the
-        // relevant objects or classes.
-        // New functions which don't exist yet can also be added.
-
-        ChatRoom: {
-            /** @param {string} nick */
-            getAndPersistNickname(nick) {
-                nick = nick || getNicknameFromBookmark(this.get('jid'));
-                return this.__super__.getAndPersistNickname.call(this, nick);
-            },
-        },
-    },
-
     initialize() {
         // Configuration values for this plugin
         // ====================================
@@ -54,6 +39,18 @@ converse.plugins.add('converse-bookmarks', {
         Object.assign(_converse, exports); // TODO: DEPRECATED
         Object.assign(_converse.exports, exports);
 
+        api.listen.on(
+            'getNicknameForMUC',
+            /**
+             * @param {import('../muc/muc').default} muc
+             * @param {string|null} nick
+             * @returns {string}
+             */
+            (muc, nick) => {
+                return nick || getNicknameFromBookmark(muc.get('jid'));
+            }
+        );
+
         api.listen.on(
             'parseMUCPresence',
             /**

+ 22 - 2
src/headless/plugins/muc/muc.js

@@ -1636,6 +1636,21 @@ class MUC extends ModelWithMessages(ColorAwareModel(ChatBoxBase)) {
         await this.occupants.fetchMembers();
     }
 
+    /**
+     * Triggers a hook which gives 3rd party plugins an opportunity to determine
+     * the nickname to use.
+     * @return {Promise<string>} A promise which resolves with the nickname
+     */
+    async getNicknameFromHook() {
+        /**
+         * *Hook* which allows plugins to determine which nickname to use for
+         * the given MUC
+         * @event _converse#getNicknameForMUC
+         * @type {string} The nickname to use
+         */
+        return await api.hook('getNicknameForMUC', this, null);
+    }
+
     /**
      * Given a nick name, save it to the model state, otherwise, look
      * for a server-side reserved nickname or default configured
@@ -1644,8 +1659,13 @@ class MUC extends ModelWithMessages(ColorAwareModel(ChatBoxBase)) {
      * @returns {Promise<string>} A promise which resolves with the nickname
      */
     async getAndPersistNickname (nick) {
-        nick = nick || this.get('nick') || (await this.getReservedNick()) || _converse.exports.getDefaultMUCNickname();
-        if (nick) safeSave(this, { nick }, { 'silent': true });
+        nick = nick ||
+            this.get('nick') ||
+            await this.getReservedNick() ||
+            await this.getNicknameFromHook() ||
+            _converse.exports.getDefaultMUCNickname();
+
+        if (nick) safeSave(this, { nick }, { silent: true });
         return nick;
     }