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
This commit is contained in:
parent
df9612f937
commit
5ea7a4d127
|
@ -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 () {
|
||||
this.message_queue = [];
|
||||
_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 = [];
|
||||
},
|
||||
|
||||
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;
|
||||
|
|
Loading…
Reference in New Issue
Block a user