From 4b46ec3f8c0c3a8948b83c1912175474070d6dd6 Mon Sep 17 00:00:00 2001 From: Novokreshchenov Konstantin Date: Mon, 1 May 2017 14:05:58 +0300 Subject: [PATCH] #591 Unread message counter is reset when the chatbox is closed (#867) * chatview: disable handling onMessageAdded when fetching messages during initialization * update CHANGES.md --- docs/CHANGES.md | 1 + spec/chatbox.js | 42 ++++++++++++++++++++++++++++++++++++++++ src/converse-chatview.js | 2 +- 3 files changed, 44 insertions(+), 1 deletion(-) diff --git a/docs/CHANGES.md b/docs/CHANGES.md index 6023b01b0..7787959e4 100755 --- a/docs/CHANGES.md +++ b/docs/CHANGES.md @@ -10,6 +10,7 @@ - API change: the `message` event now returns a data object with `stanza` and `chatbox` attributes, instead of just the stanza. [jcbrand] - #567 Unreaded message count reset on page load [novokrest] +- #591 Unread message counter is reset when the chatbox is closed [novokrest] - Remove all inline CSS to comply with strict Content-Security-Policy headers [mathiasertl] ## 3.0.2 (2017-04-23) diff --git a/spec/chatbox.js b/spec/chatbox.js index baced19be..d6a09b74e 100644 --- a/spec/chatbox.js +++ b/spec/chatbox.js @@ -1825,6 +1825,48 @@ expect(_converse.incrementMsgCounter).not.toHaveBeenCalled(); expect(_converse.msg_counter).toBe(0); })); + + it("is incremented from zero when chatbox was closed after viewing previously received messages and the window is not focused now", mock.initConverse(function (_converse) { + test_utils.createContacts(_converse, 'current'); + + // initial state + expect(_converse.msg_counter).toBe(0); + + var message = 'This message will always increment the message counter from zero', + sender_jid = mock.cur_names[0].replace(/ /g,'.').toLowerCase() + '@localhost', + msgFactory = function () { + return $msg({ + from: sender_jid, + to: _converse.connection.jid, + type: 'chat', + id: (new Date()).getTime() + }) + .c('body').t(message).up() + .c('active', {'xmlns': 'http://jabber.org/protocol/chatstates'}) + .tree(); + }; + + // leave converse-chat page + _converse.windowState = 'hidden'; + _converse.chatboxes.onMessage(msgFactory()); + expect(_converse.msg_counter).toBe(1); + + // come back to converse-chat page + _converse.saveWindowState(null, 'focus'); + var view = _converse.chatboxviews.get(sender_jid); + expect(view.$el.is(':visible')).toBeTruthy(); + expect(_converse.msg_counter).toBe(0); + + // close chatbox and leave converse-chat page again + view.close(); + _converse.windowState = 'hidden'; + + // check that msg_counter is incremented from zero again + _converse.chatboxes.onMessage(msgFactory()); + view = _converse.chatboxviews.get(sender_jid); + expect(view.$el.is(':visible')).toBeTruthy(); + expect(_converse.msg_counter).toBe(1); + })); }); }); })); diff --git a/src/converse-chatview.js b/src/converse-chatview.js index 46aa7db01..842daa876 100644 --- a/src/converse-chatview.js +++ b/src/converse-chatview.js @@ -151,7 +151,7 @@ fetchMessages: function () { this.model.messages.fetch({ - 'add': true, + 'add': false, 'success': this.afterMessagesFetched.bind(this), 'error': this.afterMessagesFetched.bind(this), });