From 4bab99bdaf64eb0704c46ef5fe94098b14ccff29 Mon Sep 17 00:00:00 2001 From: Aaron Bohy Date: Fri, 29 Jan 2016 08:36:19 +0100 Subject: [PATCH] [FIX] mail: don't notify 'join/left' messages Messages of type 'notification' and whose model is 'mail.channel' are considered as 'system notifications'. This is the case of 'join/left' messages. They aren't taken into account when computing unread messages anymore. Also use the same heuristic to decide whether or not to display the message's star, so from now on pure notifications (not system notifications), like status change on a document, can be starred. --- addons/mail/models/mail_thread.py | 3 ++- addons/mail/static/src/js/chat_manager.js | 5 +++-- addons/mail/static/src/js/thread.js | 2 +- addons/mail/static/src/xml/thread.xml | 2 +- 4 files changed, 7 insertions(+), 5 deletions(-) diff --git a/addons/mail/models/mail_thread.py b/addons/mail/models/mail_thread.py index b7a5b73145c..91699c29d92 100644 --- a/addons/mail/models/mail_thread.py +++ b/addons/mail/models/mail_thread.py @@ -177,7 +177,8 @@ class MailThread(models.AbstractModel): ON rel.mail_message_id = msg.id RIGHT JOIN mail_channel_partner cp ON (cp.channel_id = rel.mail_channel_id AND cp.partner_id = %s AND (cp.seen_message_id < msg.id)) - WHERE msg.model = %s AND msg.res_id in %s AND msg.author_id != %s""", + WHERE msg.model = %s AND msg.res_id in %s AND msg.author_id != %s AND + (msg.message_type != 'notification' OR msg.model != 'mail.channel')""", (partner_id, self._name, tuple(self.ids), partner_id,)) for result in self._cr.fetchall(): res[result[0]] += 1 diff --git a/addons/mail/static/src/js/chat_manager.js b/addons/mail/static/src/js/chat_manager.js index 74db804b7fc..5e37bf237d8 100644 --- a/addons/mail/static/src/js/chat_manager.js +++ b/addons/mail/static/src/js/chat_manager.js @@ -147,7 +147,7 @@ function add_message (data, options) { channel.hidden = false; chat_manager.bus.trigger('new_channel', channel); } - if (channel.type !== 'static' && !msg.is_author) { + if (channel.type !== 'static' && !msg.is_author && !msg.is_system_notification) { if (options.increment_unread) { update_channel_unread_counter(channel, channel.unread_counter+1); } @@ -179,6 +179,7 @@ function make_message (data) { subtype_description: data.subtype_description, is_author: data.author_id && data.author_id[0] === session.partner_id, is_note: data.is_note, + is_system_notification: data.message_type === 'notification' && data.model === 'mail.channel', attachment_ids: data.attachment_ids, subject: data.subject, email_from: data.email_from, @@ -820,7 +821,7 @@ var chat_manager = { var msg = _.findWhere(messages, {id: channel.last_seen_message_id}); if (msg) { var i = _.sortedIndex(messages, msg, 'id') + 1; - while (i < messages.length && messages[i].is_author) { + while (i < messages.length && (messages[i].is_author || messages[i].is_system_notification)) { msg = messages[i]; i++; } diff --git a/addons/mail/static/src/js/thread.js b/addons/mail/static/src/js/thread.js index d0123c0457e..0c57ea8ad88 100644 --- a/addons/mail/static/src/js/thread.js +++ b/addons/mail/static/src/js/thread.js @@ -132,7 +132,7 @@ var Thread = Widget.extend({ msg.hour = msg.date.format('LT'); } - msg.display_subject = message.subject && message.message_type !== 'notification' && !(message.model && (message.model !== 'mail.channel')); + msg.display_subject = message.subject && !message.is_system_notification; return msg; }, diff --git a/addons/mail/static/src/xml/thread.xml b/addons/mail/static/src/xml/thread.xml index 970c8ff6a6f..83436f37495 100644 --- a/addons/mail/static/src/xml/thread.xml +++ b/addons/mail/static/src/xml/thread.xml @@ -97,7 +97,7 @@ (from #) -