Browse Source

Don't increment unread msgs counter for <paused> chat state.

Also update release notes. updates #267
JC Brand 10 years ago
parent
commit
147e62d000
3 changed files with 47 additions and 5 deletions
  1. 10 5
      converse.js
  2. 1 0
      docs/CHANGES.rst
  3. 36 0
      spec/minchats.js

+ 10 - 5
converse.js

@@ -909,6 +909,9 @@
 
                 if (!body) {
                     if (composing.length || paused.length) {
+                        // FIXME: use one attribute for chat states (e.g.
+                        // chatstate) instead of saving 'paused' and
+                        // 'composing' separately.
                         this.messages.add({
                             fullname: fullname,
                             sender: 'them',
@@ -3043,12 +3046,14 @@
             },
 
             initialize: function () {
-                this.model.messages.on('add', function(msg) {
-                        if (!msg.attributes.composing) {this.updateUnreadMessagesCounter();}
-                    } , this);
-                this.model.on('showSentOTRMessage', this.updateUnreadMessagesCounter, this);
-                this.model.on('showReceivedOTRMessage', this.updateUnreadMessagesCounter, this);
+                this.model.messages.on('add', function (m) {
+                    if (!(m.get('composing') || m.get('paused'))) {
+                        this.updateUnreadMessagesCounter();
+                    }
+                }, this);
                 this.model.on('change:minimized', this.clearUnreadMessagesCounter, this);
+                this.model.on('showReceivedOTRMessage', this.updateUnreadMessagesCounter, this);
+                this.model.on('showSentOTRMessage', this.updateUnreadMessagesCounter, this);
             },
 
             render: function () {

+ 1 - 0
docs/CHANGES.rst

@@ -17,6 +17,7 @@ Changelog
 * #151 Browser locks/freezes with many roster users. [jcbrand]
 * #251 Non-minified builds for debugging. [jcbrand]
 * #264 Remove unnecessary commas for ie8 compatibility. [Deuteu]
+* #267 Unread messages counter wrongly gets incremented by chat state notifications. [Deuteu]
 
 0.8.3 (2014-09-22)
 ------------------

+ 36 - 0
spec/minchats.js

@@ -84,6 +84,42 @@
                 expect(this.minimized_chats.toggleview.$('.unread-message-count').is(':visible')).toBeTruthy();
                 expect(this.minimized_chats.toggleview.$('.unread-message-count').text()).toBe((i+1).toString());
             }
+            // Chat state notifications don't increment the unread messages counter
+            // <composing> state
+            this.chatboxes.onMessage($msg({
+                from: contact_jid,
+                to: this.connection.jid,
+                type: 'chat',
+                id: (new Date()).getTime()
+            }).c('composing', {'xmlns': 'http://jabber.org/protocol/chatstates'}).tree());
+            expect(this.minimized_chats.toggleview.$('.unread-message-count').text()).toBe((i).toString());
+
+            // <paused> state
+            this.chatboxes.onMessage($msg({
+                from: contact_jid,
+                to: this.connection.jid,
+                type: 'chat',
+                id: (new Date()).getTime()
+            }).c('paused', {'xmlns': 'http://jabber.org/protocol/chatstates'}).tree());
+            expect(this.minimized_chats.toggleview.$('.unread-message-count').text()).toBe((i).toString());
+
+            // <gone> state
+            this.chatboxes.onMessage($msg({
+                from: contact_jid,
+                to: this.connection.jid,
+                type: 'chat',
+                id: (new Date()).getTime()
+            }).c('gone', {'xmlns': 'http://jabber.org/protocol/chatstates'}).tree());
+            expect(this.minimized_chats.toggleview.$('.unread-message-count').text()).toBe((i).toString());
+
+            // <inactive> state
+            this.chatboxes.onMessage($msg({
+                from: contact_jid,
+                to: this.connection.jid,
+                type: 'chat',
+                id: (new Date()).getTime()
+            }).c('inactive', {'xmlns': 'http://jabber.org/protocol/chatstates'}).tree());
+            expect(this.minimized_chats.toggleview.$('.unread-message-count').text()).toBe((i).toString());
         }, converse));
 
     }, converse, mock, test_utils));