diff --git a/bin/addons/base/res/res_log.py b/bin/addons/base/res/res_log.py
index 8165d05acac..39fa8ec8969 100644
--- a/bin/addons/base/res/res_log.py
+++ b/bin/addons/base/res/res_log.py
@@ -23,7 +23,7 @@ from osv import fields, osv
import tools
import time
-class res_log(osv.osv_memory):
+class res_log(osv.osv):
_name = 'res.log'
_columns = {
'name': fields.char('Message', size=128, help='The logging message.', required=True),
@@ -33,20 +33,34 @@ class res_log(osv.osv_memory):
'res_id': fields.integer('Object ID'),
'secondary': fields.boolean('Secondary Log', help='Do not display this log if it belongs to the same object the user is working on'),
'create_date': fields.datetime('Created Date', readonly=True),
+ 'read': fields.boolean('Read', help="If this log item has been read, get() should not send it to the client")
}
_defaults = {
'user_id': lambda self,cr,uid,ctx: uid,
- 'create_date': time.strftime('%Y-%m-%d %H:%M:%S'),
- 'context': lambda *args: "{}"
+ 'context': "{}",
+ 'read': False
}
_order='create_date desc'
+ _index_name = 'res_log_uid_read'
+ def _auto_init(self, cr, context={}):
+ super(res_log, self)._auto_init(cr, context)
+ cr.execute('SELECT 1 FROM pg_indexes WHERE indexname=%s',
+ (self._index_name,))
+ if not cr.fetchone():
+ cr.execute('CREATE INDEX %s ON res_log (user_id, read)' %
+ self._index_name)
+
# TODO: do not return secondary log if same object than in the model (but unlink it)
- def get(self, cr, uid, context={}):
- ids = self.search(cr, uid, [('user_id','=',uid)], context=context)
- result = self.read(cr, uid, ids, ['name','res_model','res_id'], context=context)
- self.unlink(cr, uid, ids, context=context)
- return result
+ def get(self, cr, uid, context=None):
+ unread_log_ids = self.search(cr, uid, [('user_id','=',uid),
+ ('read', '=', False)],
+ context=context)
+ unread_logs = self.read(cr, uid, unread_log_ids,
+ ['name','res_model','res_id'],
+ context=context)
+ self.write(cr, uid, unread_log_ids, {'read': True}, context=context)
+ return unread_logs
def search(self, cr, uid, args, offset=0, limit=None, order=None, context=None, count=False):
res = []
@@ -58,6 +72,4 @@ class res_log(osv.osv_memory):
logs.update({log.res_model: res_dict})
res = map(lambda x: x.values(), logs.values())
return tools.flatten(res)
-
res_log()
-
diff --git a/bin/addons/base/res/res_log_view.xml b/bin/addons/base/res/res_log_view.xml
index 6dac6c044c6..aa85272cfac 100644
--- a/bin/addons/base/res/res_log_view.xml
+++ b/bin/addons/base/res/res_log_view.xml
@@ -13,6 +13,7 @@
+
@@ -22,9 +23,10 @@
tree
-
+
+
@@ -34,8 +36,11 @@
form