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>`)));
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');
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
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/>
</message>`);
_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);
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();
}));
});

View File

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