JC Brand 8 лет назад
Родитель
Сommit
da74615b07
4 измененных файлов с 184 добавлено и 100 удалено
  1. 46 25
      dist/converse-mobile.js
  2. 46 25
      dist/converse-no-dependencies.js
  3. 46 25
      dist/converse.js
  4. 46 25
      dist/inverse.js

+ 46 - 25
dist/converse-mobile.js

@@ -48542,7 +48542,7 @@ return Backbone.BrowserStorage;
         Strophe.addNamespace('CSI', 'urn:xmpp:csi:0');
         Strophe.addNamespace('DELAY', 'urn:xmpp:delay');
         Strophe.addNamespace('HINTS', 'urn:xmpp:hints');
-        Strophe.addNamespace('MAM', 'urn:xmpp:mam:0');
+        Strophe.addNamespace('MAM', 'urn:xmpp:mam:2');
         Strophe.addNamespace('NICK', 'http://jabber.org/protocol/nick');
         Strophe.addNamespace('PUBSUB', 'http://jabber.org/protocol/pubsub');
         Strophe.addNamespace('ROSTERX', 'http://jabber.org/protocol/rosterx');
@@ -58861,6 +58861,23 @@ Strophe.RSM.prototype = {
             },
 
             ChatRoomView: {
+
+                initialize: function () {
+                    var _converse = this.__super__._converse;
+                    this.__super__.initialize.apply(this, arguments);
+                    this.model.on('change:mam_enabled', function () {
+                        // Fetch messages again if we find out that mam has
+                        // been enabled (because the first attempt would then
+                        // have failed.
+                        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});
+                    }, this);
+                },
+
                 render: function () {
                     var result = this.__super__.render.apply(this, arguments);
                     if (!this.disable_mam) {
@@ -58886,7 +58903,6 @@ Strophe.RSM.prototype = {
                      * Then, upon receiving them, call onChatRoomMessage
                      * so that they are displayed inside it.
                      */
-                    var that = this;
                     var _converse = this.__super__._converse;
                     if (!_converse.features.findWhere({'var': Strophe.NS.MAM})) {
                         _converse.log(
@@ -58898,6 +58914,8 @@ Strophe.RSM.prototype = {
                         return;
                     }
                     this.addSpinner();
+
+                    var that = this;
                     _converse.api.archive.query(_.extend(options, {'groupchat': true}),
                         function (messages) {
                             that.clearSpinner();
@@ -58952,18 +58970,13 @@ Strophe.RSM.prototype = {
                     callback = options;
                     errback = callback;
                 }
-                /*
-                if (!_converse.features.findWhere({'var': Strophe.NS.MAM})) {
-                    _converse.log('This server does not support XEP-0313, Message Archive Management');
-                    errback(null);
-                    return;
-                }
-                */
                 var queryid = _converse.connection.getUniqueId();
                 var attrs = {'type':'set'};
                 if (!_.isUndefined(options) && options.groupchat) {
                     if (!options['with']) {
-                        throw new Error('You need to specify a "with" value containing the chat room JID, when querying groupchat messages.');
+                        throw new Error(
+                            'You need to specify a "with" value containing '+
+                            'the chat room JID, when querying groupchat messages.');
                     }
                     attrs.to = options['with'];
                 }
@@ -58994,23 +59007,31 @@ Strophe.RSM.prototype = {
                     }
                 }
 
-                if (_.isFunction(callback)) {
-                    _converse.connection.addHandler(function (message) {
-                        var $msg = $(message), rsm,
-                            $fin = $msg.find('fin[xmlns="'+Strophe.NS.MAM+'"]');
-                        if ($fin.length && $fin.attr('queryid') === queryid) {
-                            rsm = new Strophe.RSM({xml: $fin.find('set')[0]});
-                            _.extend(rsm, _.pick(options, ['max']));
-                            _.extend(rsm, _.pick(options, MAM_ATTRIBUTES));
+                var message_handler = _converse.connection.addHandler(function (message) {
+                    var result = message.querySelector('result');
+                    if (!_.isNull(result) && result.getAttribute('queryid') === queryid) {
+                        messages.push(message);
+                    }
+                    return true;
+                }, Strophe.NS.MAM);
+
+                _converse.connection.sendIQ(
+                    stanza,
+                    function (iq) {
+                        _converse.connection.deleteHandler(message_handler);
+                        if (_.isFunction(callback)) {
+                            var set = iq.querySelector('set');
+                            var rsm = new Strophe.RSM({xml: set});
+                            _.extend(rsm, _.pick(options, _.concat(MAM_ATTRIBUTES, ['max'])));
                             callback(messages, rsm);
-                            return false; // We've received all messages, decommission this handler
-                        } else if (queryid === $msg.find('result').attr('queryid')) {
-                            messages.push(message);
                         }
-                        return true;
-                    }, Strophe.NS.MAM);
-                }
-                _converse.connection.sendIQ(stanza, null, errback, _converse.message_archiving_timeout);
+                    },
+                    function () {
+                        _converse.connection.deleteHandler(message_handler);
+                        if (_.isFunction(errback)) { errback.apply(this, arguments); }
+                    },
+                    _converse.message_archiving_timeout
+                );
             };
 
             _.extend(_converse.api, {

+ 46 - 25
dist/converse-no-dependencies.js

@@ -6666,7 +6666,7 @@ return __p
         Strophe.addNamespace('CSI', 'urn:xmpp:csi:0');
         Strophe.addNamespace('DELAY', 'urn:xmpp:delay');
         Strophe.addNamespace('HINTS', 'urn:xmpp:hints');
-        Strophe.addNamespace('MAM', 'urn:xmpp:mam:0');
+        Strophe.addNamespace('MAM', 'urn:xmpp:mam:2');
         Strophe.addNamespace('NICK', 'http://jabber.org/protocol/nick');
         Strophe.addNamespace('PUBSUB', 'http://jabber.org/protocol/pubsub');
         Strophe.addNamespace('ROSTERX', 'http://jabber.org/protocol/rosterx');
@@ -16583,6 +16583,23 @@ return __p
             },
 
             ChatRoomView: {
+
+                initialize: function () {
+                    var _converse = this.__super__._converse;
+                    this.__super__.initialize.apply(this, arguments);
+                    this.model.on('change:mam_enabled', function () {
+                        // Fetch messages again if we find out that mam has
+                        // been enabled (because the first attempt would then
+                        // have failed.
+                        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});
+                    }, this);
+                },
+
                 render: function () {
                     var result = this.__super__.render.apply(this, arguments);
                     if (!this.disable_mam) {
@@ -16608,7 +16625,6 @@ return __p
                      * Then, upon receiving them, call onChatRoomMessage
                      * so that they are displayed inside it.
                      */
-                    var that = this;
                     var _converse = this.__super__._converse;
                     if (!_converse.features.findWhere({'var': Strophe.NS.MAM})) {
                         _converse.log(
@@ -16620,6 +16636,8 @@ return __p
                         return;
                     }
                     this.addSpinner();
+
+                    var that = this;
                     _converse.api.archive.query(_.extend(options, {'groupchat': true}),
                         function (messages) {
                             that.clearSpinner();
@@ -16674,18 +16692,13 @@ return __p
                     callback = options;
                     errback = callback;
                 }
-                /*
-                if (!_converse.features.findWhere({'var': Strophe.NS.MAM})) {
-                    _converse.log('This server does not support XEP-0313, Message Archive Management');
-                    errback(null);
-                    return;
-                }
-                */
                 var queryid = _converse.connection.getUniqueId();
                 var attrs = {'type':'set'};
                 if (!_.isUndefined(options) && options.groupchat) {
                     if (!options['with']) {
-                        throw new Error('You need to specify a "with" value containing the chat room JID, when querying groupchat messages.');
+                        throw new Error(
+                            'You need to specify a "with" value containing '+
+                            'the chat room JID, when querying groupchat messages.');
                     }
                     attrs.to = options['with'];
                 }
@@ -16716,23 +16729,31 @@ return __p
                     }
                 }
 
-                if (_.isFunction(callback)) {
-                    _converse.connection.addHandler(function (message) {
-                        var $msg = $(message), rsm,
-                            $fin = $msg.find('fin[xmlns="'+Strophe.NS.MAM+'"]');
-                        if ($fin.length && $fin.attr('queryid') === queryid) {
-                            rsm = new Strophe.RSM({xml: $fin.find('set')[0]});
-                            _.extend(rsm, _.pick(options, ['max']));
-                            _.extend(rsm, _.pick(options, MAM_ATTRIBUTES));
+                var message_handler = _converse.connection.addHandler(function (message) {
+                    var result = message.querySelector('result');
+                    if (!_.isNull(result) && result.getAttribute('queryid') === queryid) {
+                        messages.push(message);
+                    }
+                    return true;
+                }, Strophe.NS.MAM);
+
+                _converse.connection.sendIQ(
+                    stanza,
+                    function (iq) {
+                        _converse.connection.deleteHandler(message_handler);
+                        if (_.isFunction(callback)) {
+                            var set = iq.querySelector('set');
+                            var rsm = new Strophe.RSM({xml: set});
+                            _.extend(rsm, _.pick(options, _.concat(MAM_ATTRIBUTES, ['max'])));
                             callback(messages, rsm);
-                            return false; // We've received all messages, decommission this handler
-                        } else if (queryid === $msg.find('result').attr('queryid')) {
-                            messages.push(message);
                         }
-                        return true;
-                    }, Strophe.NS.MAM);
-                }
-                _converse.connection.sendIQ(stanza, null, errback, _converse.message_archiving_timeout);
+                    },
+                    function () {
+                        _converse.connection.deleteHandler(message_handler);
+                        if (_.isFunction(errback)) { errback.apply(this, arguments); }
+                    },
+                    _converse.message_archiving_timeout
+                );
             };
 
             _.extend(_converse.api, {

+ 46 - 25
dist/converse.js

@@ -48542,7 +48542,7 @@ return Backbone.BrowserStorage;
         Strophe.addNamespace('CSI', 'urn:xmpp:csi:0');
         Strophe.addNamespace('DELAY', 'urn:xmpp:delay');
         Strophe.addNamespace('HINTS', 'urn:xmpp:hints');
-        Strophe.addNamespace('MAM', 'urn:xmpp:mam:0');
+        Strophe.addNamespace('MAM', 'urn:xmpp:mam:2');
         Strophe.addNamespace('NICK', 'http://jabber.org/protocol/nick');
         Strophe.addNamespace('PUBSUB', 'http://jabber.org/protocol/pubsub');
         Strophe.addNamespace('ROSTERX', 'http://jabber.org/protocol/rosterx');
@@ -58991,6 +58991,23 @@ Strophe.RSM.prototype = {
             },
 
             ChatRoomView: {
+
+                initialize: function () {
+                    var _converse = this.__super__._converse;
+                    this.__super__.initialize.apply(this, arguments);
+                    this.model.on('change:mam_enabled', function () {
+                        // Fetch messages again if we find out that mam has
+                        // been enabled (because the first attempt would then
+                        // have failed.
+                        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});
+                    }, this);
+                },
+
                 render: function () {
                     var result = this.__super__.render.apply(this, arguments);
                     if (!this.disable_mam) {
@@ -59016,7 +59033,6 @@ Strophe.RSM.prototype = {
                      * Then, upon receiving them, call onChatRoomMessage
                      * so that they are displayed inside it.
                      */
-                    var that = this;
                     var _converse = this.__super__._converse;
                     if (!_converse.features.findWhere({'var': Strophe.NS.MAM})) {
                         _converse.log(
@@ -59028,6 +59044,8 @@ Strophe.RSM.prototype = {
                         return;
                     }
                     this.addSpinner();
+
+                    var that = this;
                     _converse.api.archive.query(_.extend(options, {'groupchat': true}),
                         function (messages) {
                             that.clearSpinner();
@@ -59082,18 +59100,13 @@ Strophe.RSM.prototype = {
                     callback = options;
                     errback = callback;
                 }
-                /*
-                if (!_converse.features.findWhere({'var': Strophe.NS.MAM})) {
-                    _converse.log('This server does not support XEP-0313, Message Archive Management');
-                    errback(null);
-                    return;
-                }
-                */
                 var queryid = _converse.connection.getUniqueId();
                 var attrs = {'type':'set'};
                 if (!_.isUndefined(options) && options.groupchat) {
                     if (!options['with']) {
-                        throw new Error('You need to specify a "with" value containing the chat room JID, when querying groupchat messages.');
+                        throw new Error(
+                            'You need to specify a "with" value containing '+
+                            'the chat room JID, when querying groupchat messages.');
                     }
                     attrs.to = options['with'];
                 }
@@ -59124,23 +59137,31 @@ Strophe.RSM.prototype = {
                     }
                 }
 
-                if (_.isFunction(callback)) {
-                    _converse.connection.addHandler(function (message) {
-                        var $msg = $(message), rsm,
-                            $fin = $msg.find('fin[xmlns="'+Strophe.NS.MAM+'"]');
-                        if ($fin.length && $fin.attr('queryid') === queryid) {
-                            rsm = new Strophe.RSM({xml: $fin.find('set')[0]});
-                            _.extend(rsm, _.pick(options, ['max']));
-                            _.extend(rsm, _.pick(options, MAM_ATTRIBUTES));
+                var message_handler = _converse.connection.addHandler(function (message) {
+                    var result = message.querySelector('result');
+                    if (!_.isNull(result) && result.getAttribute('queryid') === queryid) {
+                        messages.push(message);
+                    }
+                    return true;
+                }, Strophe.NS.MAM);
+
+                _converse.connection.sendIQ(
+                    stanza,
+                    function (iq) {
+                        _converse.connection.deleteHandler(message_handler);
+                        if (_.isFunction(callback)) {
+                            var set = iq.querySelector('set');
+                            var rsm = new Strophe.RSM({xml: set});
+                            _.extend(rsm, _.pick(options, _.concat(MAM_ATTRIBUTES, ['max'])));
                             callback(messages, rsm);
-                            return false; // We've received all messages, decommission this handler
-                        } else if (queryid === $msg.find('result').attr('queryid')) {
-                            messages.push(message);
                         }
-                        return true;
-                    }, Strophe.NS.MAM);
-                }
-                _converse.connection.sendIQ(stanza, null, errback, _converse.message_archiving_timeout);
+                    },
+                    function () {
+                        _converse.connection.deleteHandler(message_handler);
+                        if (_.isFunction(errback)) { errback.apply(this, arguments); }
+                    },
+                    _converse.message_archiving_timeout
+                );
             };
 
             _.extend(_converse.api, {

+ 46 - 25
dist/inverse.js

@@ -48542,7 +48542,7 @@ return Backbone.BrowserStorage;
         Strophe.addNamespace('CSI', 'urn:xmpp:csi:0');
         Strophe.addNamespace('DELAY', 'urn:xmpp:delay');
         Strophe.addNamespace('HINTS', 'urn:xmpp:hints');
-        Strophe.addNamespace('MAM', 'urn:xmpp:mam:0');
+        Strophe.addNamespace('MAM', 'urn:xmpp:mam:2');
         Strophe.addNamespace('NICK', 'http://jabber.org/protocol/nick');
         Strophe.addNamespace('PUBSUB', 'http://jabber.org/protocol/pubsub');
         Strophe.addNamespace('ROSTERX', 'http://jabber.org/protocol/rosterx');
@@ -58991,6 +58991,23 @@ Strophe.RSM.prototype = {
             },
 
             ChatRoomView: {
+
+                initialize: function () {
+                    var _converse = this.__super__._converse;
+                    this.__super__.initialize.apply(this, arguments);
+                    this.model.on('change:mam_enabled', function () {
+                        // Fetch messages again if we find out that mam has
+                        // been enabled (because the first attempt would then
+                        // have failed.
+                        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});
+                    }, this);
+                },
+
                 render: function () {
                     var result = this.__super__.render.apply(this, arguments);
                     if (!this.disable_mam) {
@@ -59016,7 +59033,6 @@ Strophe.RSM.prototype = {
                      * Then, upon receiving them, call onChatRoomMessage
                      * so that they are displayed inside it.
                      */
-                    var that = this;
                     var _converse = this.__super__._converse;
                     if (!_converse.features.findWhere({'var': Strophe.NS.MAM})) {
                         _converse.log(
@@ -59028,6 +59044,8 @@ Strophe.RSM.prototype = {
                         return;
                     }
                     this.addSpinner();
+
+                    var that = this;
                     _converse.api.archive.query(_.extend(options, {'groupchat': true}),
                         function (messages) {
                             that.clearSpinner();
@@ -59082,18 +59100,13 @@ Strophe.RSM.prototype = {
                     callback = options;
                     errback = callback;
                 }
-                /*
-                if (!_converse.features.findWhere({'var': Strophe.NS.MAM})) {
-                    _converse.log('This server does not support XEP-0313, Message Archive Management');
-                    errback(null);
-                    return;
-                }
-                */
                 var queryid = _converse.connection.getUniqueId();
                 var attrs = {'type':'set'};
                 if (!_.isUndefined(options) && options.groupchat) {
                     if (!options['with']) {
-                        throw new Error('You need to specify a "with" value containing the chat room JID, when querying groupchat messages.');
+                        throw new Error(
+                            'You need to specify a "with" value containing '+
+                            'the chat room JID, when querying groupchat messages.');
                     }
                     attrs.to = options['with'];
                 }
@@ -59124,23 +59137,31 @@ Strophe.RSM.prototype = {
                     }
                 }
 
-                if (_.isFunction(callback)) {
-                    _converse.connection.addHandler(function (message) {
-                        var $msg = $(message), rsm,
-                            $fin = $msg.find('fin[xmlns="'+Strophe.NS.MAM+'"]');
-                        if ($fin.length && $fin.attr('queryid') === queryid) {
-                            rsm = new Strophe.RSM({xml: $fin.find('set')[0]});
-                            _.extend(rsm, _.pick(options, ['max']));
-                            _.extend(rsm, _.pick(options, MAM_ATTRIBUTES));
+                var message_handler = _converse.connection.addHandler(function (message) {
+                    var result = message.querySelector('result');
+                    if (!_.isNull(result) && result.getAttribute('queryid') === queryid) {
+                        messages.push(message);
+                    }
+                    return true;
+                }, Strophe.NS.MAM);
+
+                _converse.connection.sendIQ(
+                    stanza,
+                    function (iq) {
+                        _converse.connection.deleteHandler(message_handler);
+                        if (_.isFunction(callback)) {
+                            var set = iq.querySelector('set');
+                            var rsm = new Strophe.RSM({xml: set});
+                            _.extend(rsm, _.pick(options, _.concat(MAM_ATTRIBUTES, ['max'])));
                             callback(messages, rsm);
-                            return false; // We've received all messages, decommission this handler
-                        } else if (queryid === $msg.find('result').attr('queryid')) {
-                            messages.push(message);
                         }
-                        return true;
-                    }, Strophe.NS.MAM);
-                }
-                _converse.connection.sendIQ(stanza, null, errback, _converse.message_archiving_timeout);
+                    },
+                    function () {
+                        _converse.connection.deleteHandler(message_handler);
+                        if (_.isFunction(errback)) { errback.apply(this, arguments); }
+                    },
+                    _converse.message_archiving_timeout
+                );
             };
 
             _.extend(_converse.api, {