浏览代码

Add support for handling multiple `stanza-id` elements

JC Brand 6 年之前
父节点
当前提交
7e34a462c1
共有 4 个文件被更改,包括 24 次插入22 次删除
  1. 12 11
      dist/converse.js
  2. 1 1
      spec/messages.js
  3. 3 3
      src/headless/converse-chatboxes.js
  4. 8 7
      src/headless/converse-muc.js

+ 12 - 11
dist/converse.js

@@ -61982,7 +61982,6 @@ _converse_core__WEBPACK_IMPORTED_MODULE_2__["default"].plugins.add('converse-cha
         const archive = sizzle(`result[xmlns="${Strophe.NS.MAM}"]`, original_stanza).pop(),
               spoiler = sizzle(`spoiler[xmlns="${Strophe.NS.SPOILER}"]`, original_stanza).pop(),
               delay = sizzle(`delay[xmlns="${Strophe.NS.DELAY}"]`, original_stanza).pop(),
-              stanza_id = sizzle(`stanza-id[xmlns="${Strophe.NS.SID}"]`, stanza).pop(),
               chat_state = stanza.getElementsByTagName(_converse.COMPOSING).length && _converse.COMPOSING || stanza.getElementsByTagName(_converse.PAUSED).length && _converse.PAUSED || stanza.getElementsByTagName(_converse.INACTIVE).length && _converse.INACTIVE || stanza.getElementsByTagName(_converse.ACTIVE).length && _converse.ACTIVE || stanza.getElementsByTagName(_converse.GONE).length && _converse.GONE;
 
         const attrs = {
@@ -61993,13 +61992,13 @@ _converse_core__WEBPACK_IMPORTED_MODULE_2__["default"].plugins.add('converse-cha
           'message': _converse.chatboxes.getMessageBody(stanza) || undefined,
           'msgid': stanza.getAttribute('id'),
           'references': this.getReferencesFromStanza(stanza),
-          'stanza_id': stanza_id ? stanza_id.getAttribute('id') : undefined,
-          'stanza_id_by_jid': stanza_id ? stanza_id.getAttribute('by') : undefined,
           'subject': _.propertyOf(stanza.querySelector('subject'))('textContent'),
           'thread': _.propertyOf(stanza.querySelector('thread'))('textContent'),
           'time': delay ? delay.getAttribute('stamp') : moment().format(),
           'type': stanza.getAttribute('type')
         };
+        const stanza_ids = sizzle(`stanza-id[xmlns="${Strophe.NS.SID}"]`, stanza);
+        stanza_ids.forEach(s => attrs[`stanza_id ${s.getAttribute('by')}`] = s.getAttribute('id'));
 
         if (attrs.type === 'groupchat') {
           attrs.from = stanza.getAttribute('from');
@@ -66952,10 +66951,9 @@ _converse_core__WEBPACK_IMPORTED_MODULE_6__["default"].plugins.add('converse-muc
           return false;
         }
 
-        const msg = this.messages.findWhere({
-          'stanza_id': stanza_id.getAttribute('id'),
-          'stanza_id_by_jid': by_jid
-        });
+        const query = {};
+        query[`stanza_id ${by_jid}`] = stanza_id.getAttribute('id');
+        const msg = this.messages.findWhere(query);
         return !_.isNil(msg);
       },
 
@@ -67004,11 +67002,14 @@ _converse_core__WEBPACK_IMPORTED_MODULE_6__["default"].plugins.add('converse-muc
           });
 
           if (msg) {
+            const attrs = {};
             const stanza_id = sizzle(`stanza-id[xmlns="${Strophe.NS.SID}"]`, stanza).pop();
-            const attrs = {
-              'stanza_id': stanza_id ? stanza_id.getAttribute('id') : undefined,
-              'stanza_id_by_jid': stanza_id ? stanza_id.getAttribute('by') : undefined
-            };
+            const by_jid = stanza_id ? stanza_id.getAttribute('by') : undefined;
+
+            if (by_jid) {
+              const key = `stanza_id ${by_jid}`;
+              attrs[key] = stanza_id.getAttribute('id');
+            }
 
             if (!msg.get('received')) {
               attrs.received = moment().format();

+ 1 - 1
spec/messages.js

@@ -2510,7 +2510,7 @@
             _converse.connection._dataRecv(test_utils.createRequest(stanza));
             await test_utils.waitUntil(() => view.model.reflectionHandled.calls.count() === 1);
             expect(view.model.messages.length).toBe(1);
-            expect(view.model.messages.at(0).get('stanza_id')).toBe("5f3dbc5e-e1d3-4077-a492-693f3769c7ad");
+            expect(view.model.messages.at(0).get('stanza_id room@muc.example.com')).toBe("5f3dbc5e-e1d3-4077-a492-693f3769c7ad");
             expect(view.model.messages.at(0).get('origin_id')).toBe(attrs.origin_id);
             done();
         }));

+ 3 - 3
src/headless/converse-chatboxes.js

@@ -596,7 +596,6 @@ converse.plugins.add('converse-chatboxes', {
                 const archive = sizzle(`result[xmlns="${Strophe.NS.MAM}"]`, original_stanza).pop(),
                       spoiler = sizzle(`spoiler[xmlns="${Strophe.NS.SPOILER}"]`, original_stanza).pop(),
                       delay = sizzle(`delay[xmlns="${Strophe.NS.DELAY}"]`, original_stanza).pop(),
-                      stanza_id = sizzle(`stanza-id[xmlns="${Strophe.NS.SID}"]`, stanza).pop(),
                       chat_state = stanza.getElementsByTagName(_converse.COMPOSING).length && _converse.COMPOSING ||
                             stanza.getElementsByTagName(_converse.PAUSED).length && _converse.PAUSED ||
                             stanza.getElementsByTagName(_converse.INACTIVE).length && _converse.INACTIVE ||
@@ -611,13 +610,14 @@ converse.plugins.add('converse-chatboxes', {
                     'message': _converse.chatboxes.getMessageBody(stanza) || undefined,
                     'msgid': stanza.getAttribute('id'),
                     'references': this.getReferencesFromStanza(stanza),
-                    'stanza_id': stanza_id ? stanza_id.getAttribute('id') : undefined,
-                    'stanza_id_by_jid': stanza_id ? stanza_id.getAttribute('by') : undefined,
                     'subject': _.propertyOf(stanza.querySelector('subject'))('textContent'),
                     'thread': _.propertyOf(stanza.querySelector('thread'))('textContent'),
                     'time': delay ? delay.getAttribute('stamp') : moment().format(),
                     'type': stanza.getAttribute('type')
                 };
+                const stanza_ids = sizzle(`stanza-id[xmlns="${Strophe.NS.SID}"]`, stanza);
+                stanza_ids.forEach(s => (attrs[`stanza_id ${s.getAttribute('by')}`] = s.getAttribute('id')));
+
                 if (attrs.type === 'groupchat') {
                     attrs.from = stanza.getAttribute('from');
                     attrs.nick = Strophe.unescapeNode(Strophe.getResourceFromJid(attrs.from));

+ 8 - 7
src/headless/converse-muc.js

@@ -958,10 +958,9 @@ converse.plugins.add('converse-muc', {
                 if (!result.length) {
                     return false;
                 }
-                const msg = this.messages.findWhere({
-                    'stanza_id': stanza_id.getAttribute('id'),
-                    'stanza_id_by_jid': by_jid
-                });
+                const query = {};
+                query[`stanza_id ${by_jid}`] = stanza_id.getAttribute('id');
+                const msg = this.messages.findWhere(query);
                 return !_.isNil(msg);
             },
 
@@ -1008,10 +1007,12 @@ converse.plugins.add('converse-muc', {
                         'sender': 'me'
                     });
                     if (msg) {
+                        const attrs = {};
                         const stanza_id = sizzle(`stanza-id[xmlns="${Strophe.NS.SID}"]`, stanza).pop();
-                        const attrs = {
-                            'stanza_id': stanza_id ? stanza_id.getAttribute('id') : undefined,
-                            'stanza_id_by_jid': stanza_id ? stanza_id.getAttribute('by') : undefined
+                        const by_jid = stanza_id ? stanza_id.getAttribute('by') : undefined;
+                        if (by_jid) {
+                            const key = `stanza_id ${by_jid}`;
+                            attrs[key] = stanza_id.getAttribute('id');
                         }
                         if (!msg.get('received')) {
                             attrs.received = moment().format();