Commit 8cc88d9b authored by JC Brand's avatar JC Brand

Fixes #1152 CSN in MUC triggers rate limiting.

- Avoid registering `sendChatState` twice as handler.
- Avoid sending out a CSN right after sending out a message
parent 99953636
...@@ -61587,7 +61587,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_ ...@@ -61587,7 +61587,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
this.model.sendMessage(attrs); this.model.sendMessage(attrs);
}, },
setChatState(state) { setChatState(state, options) {
/* Mutator for setting the chat state of this chat session. /* Mutator for setting the chat state of this chat session.
* Handles clearing of any chat state notification timeouts and * Handles clearing of any chat state notification timeouts and
* setting new ones if necessary. * setting new ones if necessary.
...@@ -61609,7 +61609,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_ ...@@ -61609,7 +61609,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
this.chat_state_timeout = window.setTimeout(this.setChatState.bind(this), _converse.TIMEOUTS.INACTIVE, _converse.INACTIVE); this.chat_state_timeout = window.setTimeout(this.setChatState.bind(this), _converse.TIMEOUTS.INACTIVE, _converse.INACTIVE);
} }
this.model.set('chat_state', state); this.model.set('chat_state', state, options);
return this; return this;
}, },
...@@ -61639,9 +61639,13 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_ ...@@ -61639,9 +61639,13 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
textarea.dispatchEvent(event); textarea.dispatchEvent(event);
this.onMessageSubmitted(message, spoiler_hint); this.onMessageSubmitted(message, spoiler_hint);
_converse.emit('messageSend', message); _converse.emit('messageSend', message); // Suppress events, otherwise superfluous CSN gets set
// immediately after the message, causing rate-limiting issues.
this.setChatState(_converse.ACTIVE);
this.setChatState(_converse.ACTIVE, {
'silent': true
});
}, },
keyPressed(ev) { keyPressed(ev) {
...@@ -68780,6 +68784,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_ ...@@ -68780,6 +68784,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
case 'topic': case 'topic':
case 'subject': case 'subject':
// TODO: should be done via API call to _converse.api.rooms
_converse.connection.send($msg({ _converse.connection.send($msg({
to: this.model.get('jid'), to: this.model.get('jid'),
from: _converse.connection.jid, from: _converse.connection.jid,
...@@ -70089,7 +70094,6 @@ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } ...@@ -70089,7 +70094,6 @@ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
this.occupants.browserStorage = new Backbone.BrowserStorage.session(b64_sha1(`converse.occupants-${_converse.bare_jid}${this.get('jid')}`)); this.occupants.browserStorage = new Backbone.BrowserStorage.session(b64_sha1(`converse.occupants-${_converse.bare_jid}${this.get('jid')}`));
this.occupants.chatroom = this; this.occupants.chatroom = this;
this.registerHandlers(); this.registerHandlers();
this.on('change:chat_state', this.sendChatState, this);
}, },
registerHandlers() { registerHandlers() {
...@@ -823,7 +823,7 @@ ...@@ -823,7 +823,7 @@
this.model.sendMessage(attrs); this.model.sendMessage(attrs);
}, },
setChatState (state) { setChatState (state, options) {
/* Mutator for setting the chat state of this chat session. /* Mutator for setting the chat state of this chat session.
* Handles clearing of any chat state notification timeouts and * Handles clearing of any chat state notification timeouts and
* setting new ones if necessary. * setting new ones if necessary.
...@@ -851,7 +851,7 @@ ...@@ -851,7 +851,7 @@
_converse.INACTIVE _converse.INACTIVE
); );
} }
this.model.set('chat_state', state); this.model.set('chat_state', state, options);
return this; return this;
}, },
...@@ -879,7 +879,9 @@ ...@@ -879,7 +879,9 @@
this.onMessageSubmitted(message, spoiler_hint); this.onMessageSubmitted(message, spoiler_hint);
_converse.emit('messageSend', message); _converse.emit('messageSend', message);
this.setChatState(_converse.ACTIVE); // Suppress events, otherwise superfluous CSN gets set
// immediately after the message, causing rate-limiting issues.
this.setChatState(_converse.ACTIVE, {'silent': true});
}, },
keyPressed (ev) { keyPressed (ev) {
......
...@@ -1011,6 +1011,7 @@ ...@@ -1011,6 +1011,7 @@
break; break;
case 'topic': case 'topic':
case 'subject': case 'subject':
// TODO: should be done via API call to _converse.api.rooms
_converse.connection.send( _converse.connection.send(
$msg({ $msg({
to: this.model.get('jid'), to: this.model.get('jid'),
......
...@@ -189,9 +189,7 @@ ...@@ -189,9 +189,7 @@
b64_sha1(`converse.occupants-${_converse.bare_jid}${this.get('jid')}`) b64_sha1(`converse.occupants-${_converse.bare_jid}${this.get('jid')}`)
); );
this.occupants.chatroom = this; this.occupants.chatroom = this;
this.registerHandlers(); this.registerHandlers();
this.on('change:chat_state', this.sendChatState, this);
}, },
registerHandlers () { registerHandlers () {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment