From 2a81d2e6f38845afac90e64fb791a691ea984145 Mon Sep 17 00:00:00 2001 From: JC Brand Date: Sun, 4 Dec 2016 14:44:43 +0000 Subject: [PATCH] converse-mam: Don't fetch MAM messages on each page load. --- docs/CHANGES.md | 1 + src/converse-mam.js | 5 ++++- src/converse-muc.js | 11 ++++++----- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/docs/CHANGES.md b/docs/CHANGES.md index 53dccc997..5c1035cb8 100755 --- a/docs/CHANGES.md +++ b/docs/CHANGES.md @@ -3,6 +3,7 @@ ## 2.0.4 (Unreleased) - Bugfix. Switching from bookmarks form to config form shows only the spinner. [jcbrand] - Bugfix. Other room occupants sometimes not shown when reloading the page. [jcbrand] +- Optimize fetching of MAM messages (in some cases happened on each page load). [jcbrand] ## 2.0.3 (2016-11-30) - #735 Room configuration button not visible. [jcbrand] diff --git a/src/converse-mam.js b/src/converse-mam.js index 00075f072..341fa6166 100644 --- a/src/converse-mam.js +++ b/src/converse-mam.js @@ -69,12 +69,15 @@ if (this.disable_mam || !converse.features.findWhere({'var': Strophe.NS.MAM})) { return this.__super__.afterMessagesFetched.apply(this, arguments); } - if (this.model.messages.length < converse.archived_messages_page_size) { + if (!this.model.get('mam_initialized') && + this.model.messages.length < converse.archived_messages_page_size) { + this.fetchArchivedMessages({ 'before': '', // Page backwards from the most recent message 'with': this.model.get('jid'), 'max': converse.archived_messages_page_size }); + this.model.save({'mam_initialized': true}); } return this.__super__.afterMessagesFetched.apply(this, arguments); }, diff --git a/src/converse-muc.js b/src/converse-muc.js index ad39ac936..575f6f56f 100755 --- a/src/converse-muc.js +++ b/src/converse-muc.js @@ -1583,6 +1583,7 @@ * Then, upon receiving them, call onChatRoomMessage * so that they are displayed inside it. */ + var that = this; if (!converse.features.findWhere({'var': Strophe.NS.MAM})) { converse.log("Attempted to fetch archived messages but this user's server doesn't support XEP-0313"); return; @@ -1590,15 +1591,15 @@ this.addSpinner(); converse_api.archive.query(_.extend(options, {'groupchat': true}), function (messages) { - this.clearSpinner(); + that.clearSpinner(); if (messages.length) { - _.map(messages, this.onChatRoomMessage.bind(this)); + _.map(messages, that.onChatRoomMessage.bind(that)); } - }.bind(this), + }, function () { - this.clearSpinner(); + that.clearSpinner(); converse.log("Error while trying to fetch archived messages", "error"); - }.bind(this) + } ); } });