瀏覽代碼

MUC: Small updates to message fetching and queueing

- Always clear queue after fetching messages from cache
- Empty `message_queue` without waiting for all messages to first be processed.
- Don't assume that `this.messages` is set by the time `queueMessage` is called
JC Brand 5 年之前
父節點
當前提交
5ea7a4d127
共有 1 個文件被更改,包括 9 次插入9 次删除
  1. 9 9
      src/headless/converse-muc.js

+ 9 - 9
src/headless/converse-muc.js

@@ -413,7 +413,6 @@ converse.plugins.add('converse-muc', {
                     await new Promise(resolve => this.features.fetch({'success': resolve, 'error': resolve}));
                     await this.fetchOccupants();
                     await this.fetchMessages();
-                    await this.clearMessageQueue();
                     return true;
                 } else {
                     await this.clearCache();
@@ -457,6 +456,13 @@ converse.plugins.add('converse-muc', {
                 return this;
             },
 
+            async fetchMessages () {
+                await _converse.ChatBox.prototype.fetchMessages.call(this);
+                const queued_messages = this.message_queue.map(m => this.queueMessage(m));
+                this.message_queue = [];
+                return Promise.all(queued_messages);
+            },
+
             async clearCache () {
                 this.session.save('connection_status', converse.ROOMSTATUS.DISCONNECTED);
                 if (this.occupants.length) {
@@ -509,20 +515,14 @@ converse.plugins.add('converse-muc', {
             },
 
             initMessages () {
-                _converse.ChatBox.prototype.initMessages.call(this);
-                this.message_queue = [];
-            },
-
-            async clearMessageQueue () {
-                await Promise.all(this.message_queue.map(m => this.queueMessage(m)));
                 this.message_queue = [];
+                _converse.ChatBox.prototype.initMessages.call(this);
             },
 
             async onConnectionStatusChanged () {
                 if (this.session.get('connection_status') === converse.ROOMSTATUS.ENTERED) {
                     await this.occupants.fetchMembers();
                     await this.fetchMessages();
-                    await this.clearMessageQueue();
                     /**
                      * Triggered when the user has entered a new MUC
                      * @event _converse#enteredNewRoom
@@ -1896,7 +1896,7 @@ converse.plugins.add('converse-muc', {
              * @param { XMLElement } stanza - The message stanza.
              */
             queueMessage (stanza) {
-                if (this.messages.fetched) {
+                if (this.messages?.fetched) {
                     this.msg_chain = (this.msg_chain || this.messages.fetched);
                     this.msg_chain = this.msg_chain.then(() => this.onMessage(stanza));
                     return this.msg_chain;