diff options
| author | Jigar Patel <jat@openerp.com> | 2016-03-25 16:39:12 +0530 |
|---|---|---|
| committer | Yannick Tivisse <yti@odoo.com> | 2016-04-08 13:41:01 +0200 |
| commit | 253d4eccf0001c5ede843cb29c1ce4f69fc6fbd0 (patch) | |
| tree | 0c53a3819a2984672c8261945e71e8bb6013b089 /addons/mail | |
| parent | e4ae6a80bb2d95a85d222d9012282919d5ebac0f (diff) | |
[IMP] mail: Add counter in starred
Diffstat (limited to 'addons/mail')
| -rw-r--r-- | addons/mail/controllers/main.py | 1 | ||||
| -rw-r--r-- | addons/mail/models/mail_message.py | 7 | ||||
| -rw-r--r-- | addons/mail/models/res_partner.py | 12 | ||||
| -rw-r--r-- | addons/mail/static/src/js/chat_manager.js | 10 | ||||
| -rw-r--r-- | addons/mail/static/src/js/client_action.js | 2 | ||||
| -rw-r--r-- | addons/mail/static/src/xml/client_action.xml | 2 | ||||
| -rw-r--r-- | addons/mail/tests/test_mail_message.py | 6 |
7 files changed, 32 insertions, 8 deletions
diff --git a/addons/mail/controllers/main.py b/addons/mail/controllers/main.py index 8fa7777ca5d..6aa5d854aaa 100644 --- a/addons/mail/controllers/main.py +++ b/addons/mail/controllers/main.py @@ -240,6 +240,7 @@ class MailController(http.Controller): def mail_client_action(self): values = { 'needaction_inbox_counter': request.env['res.partner'].get_needaction_count(), + 'starred_counter': request.env['res.partner'].get_starred_count(), 'channel_slots': request.env['mail.channel'].channel_fetch_slot(), 'mention_partner_suggestions': request.env['res.partner'].get_static_mention_suggestions(), 'emoji': request.env['mail.shortcode'].sudo().search_read([('shortcode_type', '=', 'image')], ['source', 'substitution', 'description']), diff --git a/addons/mail/models/mail_message.py b/addons/mail/models/mail_message.py index 949cef23138..c054b6e10a3 100644 --- a/addons/mail/models/mail_message.py +++ b/addons/mail/models/mail_message.py @@ -237,14 +237,13 @@ class Message(models.Model): self.env['bus.bus'].sendone((self._cr.dbname, 'res.partner', self.env.user.partner_id.id), notification) @api.multi - def set_message_starred(self, starred): - """ Set messages as (un)starred. Technically, the notifications related + def toggle_message_starred(self): + """ Toggle messages as (un)starred. Technically, the notifications related to uid are set to (un)starred. - - :param bool starred: set notification as (un)starred """ # a user should always be able to star a message he can read self.check_access_rule('read') + starred = not self.starred if starred: self.sudo().write({'starred_partner_ids': [(4, self.env.user.partner_id.id)]}) else: diff --git a/addons/mail/models/res_partner.py b/addons/mail/models/res_partner.py index 5e3f4685282..46012ce2447 100644 --- a/addons/mail/models/res_partner.py +++ b/addons/mail/models/res_partner.py @@ -228,6 +228,18 @@ class Partner(models.Model): return 0 @api.model + def get_starred_count(self): + """ compute the number of starred of the current user """ + if self.env.user.partner_id: + self.env.cr.execute(""" + SELECT count(*) as starred_count + FROM mail_message_res_partner_starred_rel R + WHERE R.res_partner_id = %s """, (self.env.user.partner_id.id,)) + return self.env.cr.dictfetchall()[0].get('starred_count') + _logger.error('Call to starred_count without partner_id') + return 0 + + @api.model def get_static_mention_suggestions(self): """ To be overwritten to return the id, name and email of partners used as static mention suggestions loaded once at webclient initialization and stored client side. """ diff --git a/addons/mail/static/src/js/chat_manager.js b/addons/mail/static/src/js/chat_manager.js index bc1d7ec4d48..4c57a8453b7 100644 --- a/addons/mail/static/src/js/chat_manager.js +++ b/addons/mail/static/src/js/chat_manager.js @@ -31,6 +31,7 @@ var unread_conversation_counter = 0; var emojis = []; var emoji_substitutions = {}; var needaction_counter = 0; +var starred_counter = 0; var mention_partner_suggestions = []; var discuss_menu_id; var global_unread_counter = 0; @@ -498,14 +499,17 @@ function on_toggle_star_notification (data) { message.is_starred = data.starred; if (!message.is_starred) { remove_message_from_channel("channel_starred", message); + starred_counter--; } else { add_to_cache(message, []); var channel_starred = chat_manager.get_channel('channel_starred'); channel_starred.cache = _.pick(channel_starred.cache, "[]"); + starred_counter++; } chat_manager.bus.trigger('update_message', message); } }); + chat_manager.bus.trigger('update_starred', starred_counter); } function on_mark_as_read_notification (data) { @@ -684,7 +688,7 @@ var chat_manager = { toggle_star_status: function (message_id) { var msg = _.findWhere(messages, { id: message_id }); - return MessageModel.call('set_message_starred', [[message_id], !msg.is_starred]); + return MessageModel.call('toggle_message_starred', [[message_id]]); }, unstar_all: function () { return MessageModel.call('unstar_all', [[]], {}); @@ -761,6 +765,9 @@ var chat_manager = { get_needaction_counter: function () { return needaction_counter; }, + get_starred_counter: function () { + return starred_counter; + }, get_chat_unread_counter: function () { return chat_unread_counter; }, @@ -968,6 +975,7 @@ function init () { _.each(channels, add_channel); }); needaction_counter = result.needaction_inbox_counter; + starred_counter = result.starred_counter; mention_partner_suggestions = result.mention_partner_suggestions; emojis = result.emoji; _.each(emojis, function(emoji) { diff --git a/addons/mail/static/src/js/client_action.js b/addons/mail/static/src/js/client_action.js index 3e3def75383..1b3f9666ec4 100644 --- a/addons/mail/static/src/js/client_action.js +++ b/addons/mail/static/src/js/client_action.js @@ -262,6 +262,7 @@ var ChatAction = Widget.extend(ControlPanelMixin, { }); chat_manager.bus.on('unsubscribe_from_channel', self, self.render_sidebar); chat_manager.bus.on('update_needaction', self, self.throttled_render_sidebar); + chat_manager.bus.on('update_starred', self, self.throttled_render_sidebar); chat_manager.bus.on('update_channel_unread_counter', self, self.throttled_render_sidebar); chat_manager.bus.on('update_dm_presence', self, self.throttled_render_sidebar); self.thread.$el.on("scroll", null, _.debounce(function () { @@ -303,6 +304,7 @@ var ChatAction = Widget.extend(ControlPanelMixin, { active_channel_id: this.channel ? this.channel.id: undefined, channels: chat_manager.get_channels(), needaction_counter: chat_manager.get_needaction_counter(), + starred_counter: chat_manager.get_starred_counter(), })); this.$(".o_mail_chat_sidebar").html($sidebar.contents()); diff --git a/addons/mail/static/src/xml/client_action.xml b/addons/mail/static/src/xml/client_action.xml index cc819aece0a..746082b7fe9 100644 --- a/addons/mail/static/src/xml/client_action.xml +++ b/addons/mail/static/src/xml/client_action.xml @@ -26,6 +26,8 @@ <div t-attf-class="o_mail_chat_channel_item #{(active_channel_id == 'channel_starred') ? 'o_active': ''}" data-channel-id="channel_starred"> <span class="o_channel_name"> <i class="fa fa-star-o"/> Starred </span> + <t t-set="counter" t-value="starred_counter"/> + <t t-call="mail.chat.SidebarNeedaction"/> </div> <t t-set="channel_type" t-value="'public'"/> diff --git a/addons/mail/tests/test_mail_message.py b/addons/mail/tests/test_mail_message.py index edd0f0eae9a..6407d97c9cf 100644 --- a/addons/mail/tests/test_mail_message.py +++ b/addons/mail/tests/test_mail_message.py @@ -240,14 +240,14 @@ class TestMailMessage(TestMail): msg_emp = self.env['mail.message'].sudo(self.user_employee).browse(msg.id) # Admin set as starred - msg.set_message_starred(True) + msg.toggle_message_starred() self.assertTrue(msg.starred) # Employee set as starred - msg_emp.set_message_starred(True) + msg_emp.toggle_message_starred() self.assertTrue(msg_emp.starred) # Do: Admin unstars msg - msg.set_message_starred(False) + msg.toggle_message_starred() self.assertFalse(msg.starred) self.assertTrue(msg_emp.starred) |
