Thibault Delavallée (OpenERP) has proposed merging
lp:~openerp-dev/openobject-addons/trunk-join-speedup-tde into
lp:openobject-addons.
Requested reviews:
OpenERP Core Team (openerp)
For more details, see:
https://code.launchpad.net/~openerp-dev/openobject-addons/trunk-join-speedup-tde/+merge/136624
Perform auto-join and needaction speed update
This addons revision adds the auto_join attribute on notification_ids of
mail.message, to speedup the loading of the various mailboxes.
--
https://code.launchpad.net/~openerp-dev/openobject-addons/trunk-join-speedup-tde/+merge/136624
Your team OpenERP R&D Team is subscribed to branch
lp:~openerp-dev/openobject-addons/trunk-join-speedup-tde.
=== modified file 'mail/mail_message.py'
--- mail/mail_message.py 2012-11-21 10:19:17 +0000
+++ mail/mail_message.py 2012-11-28 11:11:22 +0000
@@ -63,7 +63,7 @@
# protection for `default_type` values leaking from menu action context (e.g. for invoices)
if context and context.get('default_type') and context.get('default_type') not in self._columns['type'].selection:
context = dict(context, default_type=None)
- return super(mail_message, self).default_get(cr, uid, fields, context=context)
+ return super(mail_message, self).default_get(cr, uid, fields, context=context)
def _shorten_name(self, name):
if len(name) <= (self._message_record_name_length + 3):
@@ -146,7 +146,7 @@
store=True, string='Message Record Name',
help="Name get of the related document."),
'notification_ids': fields.one2many('mail.notification', 'message_id',
- string='Notifications',
+ string='Notifications', _auto_join=True,
help='Technical field holding the message notifications. Use notified_partner_ids to access notified partners.'),
'subject': fields.char('Subject'),
'date': fields.datetime('Date'),
=== modified file 'mail/mail_thread.py'
--- mail/mail_thread.py 2012-11-20 09:05:12 +0000
+++ mail/mail_thread.py 2012-11-28 11:11:22 +0000
@@ -88,7 +88,7 @@
for thread in self.browse(cr, uid, ids, context=context):
cls = res[thread.id]['message_unread'] and ' class="oe_kanban_mail_new"' or ''
- res[thread.id]['message_summary'] = "<span%s><span class='oe_e'>9</span> %d</span> <span><span class='oe_e'>+</span> %d</span>" % (cls, len(thread.message_comment_ids), len(thread.message_follower_ids))
+ res[thread.id]['message_summary'] = "<span%s><span class='oe_e'>9</span> %d</span> <span><span class='oe_e'>+</span> %d</span>" % (cls, len(thread.message_ids), len(thread.message_follower_ids))
return res
@@ -121,18 +121,15 @@
return res
- def _search_unread(self, cr, uid, obj=None, name=None, domain=None, context=None):
- partner_id = self.pool.get('res.users').read(cr, uid, uid, ['partner_id'], context=context)['partner_id'][0]
- res = {}
- notif_obj = self.pool.get('mail.notification')
- notif_ids = notif_obj.search(cr, uid, [
- ('partner_id', '=', partner_id),
- ('message_id.model', '=', self._name),
- ('read', '=', False)
- ], context=context)
- for notif in notif_obj.browse(cr, uid, notif_ids, context=context):
- res[notif.message_id.res_id] = True
- return [('id', 'in', res.keys())]
+ def _search_message_unread(self, cr, uid, obj=None, name=None, domain=None, context=None):
+ user_pid = self.pool.get('res.users').read(cr, uid, uid, ['partner_id'], context=context)['partner_id'][0]
+ cr.execute(""" SELECT DISTINCT m.res_id FROM mail_message m
+ JOIN mail_notification n
+ ON (n.message_id = m.id AND n.partner_id = %s AND (n.read = False or n.read IS NULL))
+ WHERE m.model = %s""",
+ (user_pid, self._name,))
+ res_ids = [result[0] for result in cr.fetchall()]
+ return [('id', 'in', res_ids)]
def _get_followers(self, cr, uid, ids, name, arg, context=None):
fol_obj = self.pool.get('mail.followers')
@@ -201,16 +198,13 @@
'message_follower_ids': fields.function(_get_followers, fnct_inv=_set_followers,
fnct_search=_search_followers, type='many2many',
obj='res.partner', string='Followers', multi='_get_followers'),
- 'message_comment_ids': fields.one2many('mail.message', 'res_id',
- domain=lambda self: [('model', '=', self._name), ('type', 'in', ('comment', 'email'))],
- string='Comments and emails',
- help="Comments and emails"),
'message_ids': fields.one2many('mail.message', 'res_id',
domain=lambda self: [('model', '=', self._name)],
string='Messages',
help="Messages and communication history"),
- 'message_unread': fields.function(_get_message_data, fnct_search=_search_unread,
- type='boolean', string='Unread Messages', multi="_get_message_data",
+ 'message_unread': fields.function(_get_message_data,
+ fnct_search=_search_message_unread, multi="_get_message_data",
+ type='boolean', string='Unread Messages',
help="If checked new messages require your attention."),
'message_summary': fields.function(_get_message_data, method=True,
type='text', string='Summary', multi="_get_message_data",
@@ -245,7 +239,6 @@
def copy(self, cr, uid, id, default=None, context=None):
default = default or {}
default['message_ids'] = []
- default['message_comment_ids'] = []
default['message_follower_ids'] = []
return super(mail_thread, self).copy(cr, uid, id, default=default, context=context)
_______________________________________________
Mailing list: https://launchpad.net/~openerp-dev-gtk
Post to : [email protected]
Unsubscribe : https://launchpad.net/~openerp-dev-gtk
More help : https://help.launchpad.net/ListHelp