浏览代码

MUC: Don't show duplicate subsequent `info` messages

JC Brand 5 年之前
父节点
当前提交
99f539b3cb
共有 2 个文件被更改,包括 34 次插入0 次删除
  1. 26 0
      spec/muc_messages.js
  2. 8 0
      src/headless/converse-muc.js

+ 26 - 0
spec/muc_messages.js

@@ -39,6 +39,32 @@
                 expect(u.hasClass('chat-msg--followup', messages[1])).toBe(false);
                 done();
             }));
+
+            it("is not shown if its a duplicate",
+                mock.initConverse(
+                    ['rosterGroupsFetched', 'chatBoxesFetched'], {},
+                    async function (done, _converse) {
+
+                const muc_jid = 'lounge@montague.lit';
+                await test_utils.openAndEnterChatRoom(_converse, muc_jid, 'romeo');
+                const view = _converse.api.chatviews.get(muc_jid);
+                await u.waitUntil(() => view.el.querySelectorAll('.chat-info').length);
+
+                const presence = u.toStanza(`
+                    <presence xmlns="jabber:client" to="${_converse.jid}" from="${muc_jid}/romeo">
+                        <x xmlns="http://jabber.org/protocol/muc#user">
+                            <status code="201"/>
+                            <item role="moderator" affiliation="owner" jid="${_converse.jid}"/>
+                            <status code="110"/>
+                        </x>
+                    </presence>
+                `);
+                _converse.connection._dataRecv(test_utils.createRequest(presence));
+                _converse.connection._dataRecv(test_utils.createRequest(presence));
+                await u.waitUntil(() => view.el.querySelectorAll('.chat-info').length > 1);
+                expect(view.el.querySelectorAll('.chat-info').length).toBe(2);
+                done();
+            }));
         });
 
 

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

@@ -1791,6 +1791,14 @@ converse.plugins.add('converse-muc', {
                         message = __(_converse.muc.new_nickname_messages[code], nick);
                     }
                     if (message) {
+                        if (code === "201" && this.messages.findWhere({'type': 'info', message})) {
+                            return;
+                        } else if (code in _converse.muc.info_messages &&
+                                this.messages.length &&
+                                this.messages.pop().get('message') === message) {
+                            // XXX: very naive duplication checking
+                            return;
+                        }
                         this.messages.create({'type': 'info', message});
                     }
                 });