From da2cbae8f8a1e9a04a79471416b115eb0472921a Mon Sep 17 00:00:00 2001 From: Aaron Bohy Date: Thu, 21 Jan 2016 10:01:22 +0100 Subject: [PATCH] [FIX] mail: synchronize last_message_seen_id between tabs When using multi tabs or browsers, the 'New messages' separator in threads was sometimes wrongly displayed (displayed over messages already seen in another tab or browser). --- addons/mail/models/mail_channel.py | 2 +- addons/mail/static/src/js/chat_manager.js | 11 ++++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/addons/mail/models/mail_channel.py b/addons/mail/models/mail_channel.py index 5dffc85c736..6f16888cccc 100644 --- a/addons/mail/models/mail_channel.py +++ b/addons/mail/models/mail_channel.py @@ -445,7 +445,7 @@ class Channel(models.Model): if self.channel_message_ids.ids: last_message_id = self.channel_message_ids.ids[0] # zero is the index of the last message self.env['mail.channel.partner'].search([('channel_id', 'in', self.ids), ('partner_id', '=', self.env.user.partner_id.id)]).write({'seen_message_id': last_message_id}) - self.env['bus.bus'].sendone((self._cr.dbname, 'res.partner', self.env.user.partner_id.id), {'info': 'channel_seen', 'id': self.id}) + self.env['bus.bus'].sendone((self._cr.dbname, 'res.partner', self.env.user.partner_id.id), {'info': 'channel_seen', 'id': self.id, 'last_message_id': last_message_id}) return last_message_id @api.multi diff --git a/addons/mail/static/src/js/chat_manager.js b/addons/mail/static/src/js/chat_manager.js index 34559eeaad8..82299475db1 100644 --- a/addons/mail/static/src/js/chat_manager.js +++ b/addons/mail/static/src/js/chat_manager.js @@ -457,9 +457,7 @@ function update_channel_unread_counter (channel, counter) { } var channel_seen = _.throttle(function (channel) { - return ChannelModel.call('channel_seen', [[channel.id]]).then(function (last_seen_message_id) { - channel.last_seen_message_id = last_seen_message_id; - }); + return ChannelModel.call('channel_seen', [[channel.id]]); }, 3000); // Notification handlers @@ -609,8 +607,11 @@ function on_mark_as_unread_notification (data) { function on_channel_seen_notification (data) { var channel = chat_manager.get_channel(data.id); - if (channel && channel.unread_counter) { - update_channel_unread_counter(channel, 0); + if (channel) { + channel.last_seen_message_id = data.last_message_id; + if (channel.unread_counter) { + update_channel_unread_counter(channel, 0); + } } }