Ver código fonte

Don't query MAM upon every page load.

Instead we should only query for newly created chats.
JC Brand 6 anos atrás
pai
commit
f12c024b99
2 arquivos alterados com 24 adições e 2 exclusões
  1. 16 2
      src/headless/converse-mam.js
  2. 8 0
      src/headless/converse-muc.js

+ 16 - 2
src/headless/converse-mam.js

@@ -210,10 +210,24 @@ converse.plugins.add('converse-mam', {
             }
             }
         }
         }
 
 
+        _converse.api.listen.on('addClientFeatures', () => _converse.api.disco.own.features.add(Strophe.NS.MAM));
         _converse.api.listen.on('serviceDiscovered', getMAMPrefsFromFeature);
         _converse.api.listen.on('serviceDiscovered', getMAMPrefsFromFeature);
-        _converse.api.listen.on('afterMessagesFetched', chat => chat.fetchNewestMessages());
         _converse.api.listen.on('chatReconnected', chat => chat.fetchNewestMessages());
         _converse.api.listen.on('chatReconnected', chat => chat.fetchNewestMessages());
-        _converse.api.listen.on('addClientFeatures', () => _converse.api.disco.own.features.add(Strophe.NS.MAM));
+        _converse.api.listen.on('enteredNewRoom', chat => chat.fetchNewestMessages());
+
+        _converse.api.listen.on('afterMessagesFetched', chat => {
+            // XXX: We don't want to query MAM every time this is triggered
+            // since it's not necessary when the chat is restored from cache.
+            // (given that BOSH or SMACKS will ensure that you get messages
+            // sent during the reload).
+            //
+            // With MUCs we can listen for `enteredNewRoom` but for
+            // one-on-one we have to use this hacky solutoin for now.
+            // `chat_state` is `undefined` only for newly created chats.
+            if (chat.get('type') === _converse.PRIVATE_CHAT_TYPE && chat.get('chat_state') === undefined) {
+                chat.fetchNewestMessages();
+            }
+        });
 
 
         _converse.api.listen.on('chatRoomOpened', (room) => {
         _converse.api.listen.on('chatRoomOpened', (room) => {
             room.on('change:mam_enabled', room.fetchArchivedMessagesIfNecessary, room);
             room.on('change:mam_enabled', room.fetchArchivedMessagesIfNecessary, room);

+ 8 - 0
src/headless/converse-muc.js

@@ -428,6 +428,14 @@ converse.plugins.add('converse-muc', {
                     // thereby avoiding re-renders (and therefore DOM reflows).
                     // thereby avoiding re-renders (and therefore DOM reflows).
                     this.fetchMessages();
                     this.fetchMessages();
 
 
+                    /**
+                     * Triggered when the user has entered a new MUC and *after* cached messages have been fetched.
+                     * @event _converse#enteredNewRoom
+                     * @type { _converse.ChatRoom}
+                     * @example _converse.api.listen.on('enteredNewRoom', model => { ... });
+                     */
+                    _converse.api.trigger('enteredNewRoom', this);
+
                     if (_converse.auto_register_muc_nickname &&
                     if (_converse.auto_register_muc_nickname &&
                             await _converse.api.disco.supports(Strophe.NS.MUC_REGISTER, this.get('jid'))) {
                             await _converse.api.disco.supports(Strophe.NS.MUC_REGISTER, this.get('jid'))) {
                         this.registerNickname()
                         this.registerNickname()