Просмотр исходного кода

Combine duplicate `queryForArchivedMessages` methods

JC Brand 7 лет назад
Родитель
Сommit
bbf33a8e4f
1 измененных файлов с 41 добавлено и 77 удалено
  1. 41 77
      src/converse-mam.js

+ 41 - 77
src/converse-mam.js

@@ -197,44 +197,53 @@
                 },
 
                 fetchArchivedMessages (options) {
-                    /* Fetch archived chat messages from the XMPP server.
-                     *
-                     * Then, upon receiving them, call onMessage on the chat
-                     * box, so that they are displayed inside it.
-                     */
                     const { _converse } = this.__super__;
-                    if (!_converse.disco_entities.get(_converse.bare_jid)
-                            .features.findWhere({'var': Strophe.NS.MAM})) {
+                    if (this.disable_mam) { return; }
 
-                        _converse.log(
-                            "Attempted to fetch archived messages but this "+
-                            "user's server doesn't support XEP-0313",
-                            Strophe.LogLevel.WARN);
-                        return;
-                    }
-                    if (this.disable_mam) {
-                        return;
+                    const is_groupchat = this.model.get('type') === CHATROOMS_TYPE;
+
+                    let mam_jid, message_handler;
+                    if (is_groupchat) {
+                        mam_jid = this.model.get('jid');
+                        message_handler = this.model.onMessage.bind(this.model);
+                    } else {
+                        mam_jid = _converse.bare_jid;
+                        message_handler = _converse.chatboxes.onMessage.bind(_converse.chatboxes)
                     }
-                    this.addSpinner();
-                    _converse.api.archive.query(
-                        _.extend({
-                            'before': '', // Page backwards from the most recent message
-                            'max': _converse.archived_messages_page_size,
-                            'with': this.model.get('jid'),
-                        }, options),
-                        (messages) => { // Success
-                            this.clearSpinner();
-                            if (messages.length) {
-                                _.each(messages, _converse.chatboxes.onMessage.bind(_converse.chatboxes));
-                            }
+
+                    _converse.api.disco.supports(Strophe.NS.MAM, mam_jid).then(
+                        (results) => { // Success
+                            if (!results.length) { return; }
+                            this.addSpinner();
+                            _converse.api.archive.query(
+                                _.extend({
+                                    'groupchat': is_groupchat,
+                                    'before': '', // Page backwards from the most recent message
+                                    'max': _converse.archived_messages_page_size,
+                                    'with': this.model.get('jid'),
+                                }, options),
+                                (messages) => { // Success
+                                    this.clearSpinner();
+                                    _.each(messages, message_handler);
+                                },
+                                () => { // Error
+                                    this.clearSpinner();
+                                    _converse.log(
+                                        "Error or timeout while trying to fetch "+
+                                        "archived messages", Strophe.LogLevel.ERROR);
+                                }
+                            );
                         },
                         () => { // Error
-                            this.clearSpinner();
                             _converse.log(
-                                "Error or timeout while trying to fetch "+
-                                "archived messages", Strophe.LogLevel.ERROR);
+                                "Error or timeout while checking for MAM support",
+                                Strophe.LogLevel.ERROR
+                            );
                         }
-                    );
+                    ).catch((msg) => {
+                        this.clearSpinner();
+                        _converse.log(msg, Strophe.LogLevel.FATAL);
+                    });
                 },
 
                 onScroll (ev) {
@@ -295,52 +304,7 @@
                     }
                     this.fetchArchivedMessages();
                     this.model.save({'mam_initialized': true});
-                },
-
-                fetchArchivedMessages (options) {
-                    /* Fetch archived chat messages for this Chat Room
-                     *
-                     * Then, upon receiving them, call onMessage
-                     * so that they are displayed inside it.
-                     */
-                    const { _converse } = this.__super__,
-                          mam_jid = this.model.get('type') === CHATROOMS_TYPE ? this.model.get('jid') : _converse.bare_jid;
-
-                    _converse.api.disco.supports(Strophe.NS.MAM, mam_jid).then(
-                        (results) => { // Success
-                            if (!results.length) { return; }
-                            this.addSpinner();
-                            _converse.api.archive.query(
-                                _.extend({
-                                    'groupchat': true,
-                                    'before': '', // Page backwards from the most recent message
-                                    'with': this.model.get('jid'),
-                                    'max': _converse.archived_messages_page_size
-                                }, options),
-                                (messages) => {
-                                    this.clearSpinner();
-                                    if (messages.length) {
-                                        _.each(messages, this.model.onMessage.bind(this.model));
-                                    }
-                                },
-                                () => {
-                                    this.clearSpinner();
-                                    _converse.log(
-                                        "Error while trying to fetch archived messages",
-                                        Strophe.LogLevel.WARN);
-                                }
-                            );
-                        },
-                        () => { // Error
-                            _converse.log(
-                                "Error or timeout while checking for MAM support",
-                                Strophe.LogLevel.ERROR
-                            );
-                        }
-                    ).catch((msg) => {
-                        this.clearSpinner();
-                        _converse.log(msg, Strophe.LogLevel.FATAL);
-                    });
+                }
             }
         },