Don't show duplicate topic change notifications

This commit is contained in:
JC Brand 2020-04-08 13:08:15 +02:00
parent c4ba6735ba
commit bc4d016557
2 changed files with 35 additions and 10 deletions

View File

@ -608,19 +608,39 @@
</message>`))); </message>`)));
await u.waitUntil(() => view.model.handleSubjectChange.calls.count() === 2); await u.waitUntil(() => view.model.handleSubjectChange.calls.count() === 2);
const el = sizzle('.chat-info__message', view.el).pop(); let el = sizzle('.chat-info__message', view.el).pop();
expect(el.textContent.trim()).toBe('Topic set by ralphm'); expect(el.textContent.trim()).toBe('Topic set by ralphm');
await u.waitUntil(() => desc.textContent.trim() === 'This is a new topic'); await u.waitUntil(() => desc.textContent.trim() === 'This is a new topic');
// Doesn't show multiple subsequent topic change notifications
_converse.connection._dataRecv(test_utils.createRequest(u.toStanza(`
<message xmlns="jabber:client" to="${_converse.jid}" type="groupchat" from="jdev@conference.jabber.org/ralphm">
<subject>Yet another topic</subject>
</message>`)));
await u.waitUntil(() => view.model.handleSubjectChange.calls.count() === 3);
await u.waitUntil(() => desc.textContent.trim() === 'Yet another topic');
expect(sizzle('.chat-info__message', view.el).length).toBe(1);
// Sow multiple subsequent topic change notification from someone else
_converse.connection._dataRecv(test_utils.createRequest(u.toStanza(`
<message xmlns="jabber:client" to="${_converse.jid}" type="groupchat" from="jdev@conference.jabber.org/some1">
<subject>Some1's topic</subject>
</message>`)));
await u.waitUntil(() => view.model.handleSubjectChange.calls.count() === 4);
await u.waitUntil(() => desc.textContent.trim() === "Some1's topic");
expect(sizzle('.chat-info__message', view.el).length).toBe(2);
el = sizzle('.chat-info__message', view.el).pop();
expect(el.textContent.trim()).toBe('Topic set by some1');
// Removes current topic // Removes current topic
const stanza = u.toStanza( const stanza = u.toStanza(
`<message xmlns="jabber:client" to="${_converse.jid}" type="groupchat" from="jdev@conference.jabber.org/ralphm"> `<message xmlns="jabber:client" to="${_converse.jid}" type="groupchat" from="jdev@conference.jabber.org/some1">
<subject/> <subject/>
</message>`); </message>`);
_converse.connection._dataRecv(test_utils.createRequest(stanza)); _converse.connection._dataRecv(test_utils.createRequest(stanza));
await u.waitUntil(() => view.model.handleSubjectChange.calls.count() === 3); await u.waitUntil(() => view.model.handleSubjectChange.calls.count() === 5);
await u.waitUntil(() => view.el.querySelector('.chat-head__desc') === null); await u.waitUntil(() => view.el.querySelector('.chat-head__desc') === null);
expect(view.el.querySelector('.chat-info:last-child').textContent.trim()).toBe("Topic cleared by ralphm"); expect(view.el.querySelector('.chat-info:last-child').textContent.trim()).toBe("Topic cleared by some1");
done(); done();
})); }));
}); });

View File

@ -1703,12 +1703,17 @@ converse.plugins.add('converse-muc', {
}); });
if (!attrs.is_delayed) { if (!attrs.is_delayed) {
const message = subject ? __('Topic set by %1$s', author) : __('Topic cleared by %1$s', author); const message = subject ? __('Topic set by %1$s', author) : __('Topic cleared by %1$s', author);
const data = { const prev_msg = this.messages.last();
message, if (prev_msg?.get('nick') !== attrs.nick ||
'nick': attrs.nick, prev_msg?.get('type') !== 'info' ||
'type': 'info' prev_msg?.get('message') !== message) {
};
this.createMessage(data); this.createMessage({
message,
'nick': attrs.nick,
'type': 'info'
});
}
} }
return true; return true;
} }