diff --git a/addons/web_chat/chat.py b/addons/web_chat/chat.py index 2edaaf2a1b7..8290fb64bc0 100644 --- a/addons/web_chat/chat.py +++ b/addons/web_chat/chat.py @@ -91,28 +91,18 @@ class chat_message(osv.osv): 'message': fields.char(string="Message", size=200), } - def poll(self, cr, uid, last=None, context=None): - if not openerp.tools.config.options["gevent"]: - raise Exception("Not usable in a server not running gevent") - num = 0 - while True: - if not last: - tmp = self.search(cr, uid, [], context=context) - last = 0 - for i in tmp: - last = i if i > last else last - res = self.search(cr, uid, [['id', '>', last]], order="id", context=context) - res = self.read(cr, uid, res, ["id", "message"], context=context) - lst = [x["message"] for x in res] - if len(lst) > 0: - last = res[-1]["id"] - return {"res": lst, "last": last} - num += 1 - if num == 2: - return {"res": [], "last": last} - cr.commit() - Watcher.get_watcher(cr.dbname).stop(30) - cr.commit() + def get_messages(self, cr, uid, last=None, context=None): + if not last: + tmp = self.search(cr, uid, [], context=context) + last = 0 + for i in tmp: + last = i if i > last else last + res = self.search(cr, uid, [['id', '>', last]], order="id", context=context) + res = self.read(cr, uid, res, ["id", "message"], context=context) + lst = [x["message"] for x in res] + if len(lst) > 0: + last = res[-1]["id"] + return {"res": lst, "last": last, "dbname": cr.dbname} def post(self, cr, uid, message, context=None): self.create(cr, uid, {"message": message}, context=context) diff --git a/addons/web_chat/chat_controller.py b/addons/web_chat/chat_controller.py index 349f5e309d7..8f22c460fa1 100644 --- a/addons/web_chat/chat_controller.py +++ b/addons/web_chat/chat_controller.py @@ -1,12 +1,22 @@ # -*- coding: utf-8 -*- import openerp +import openerp.tools.config +import chat class ImportController(openerp.addons.web.http.Controller): _cp_path = '/chat' @openerp.addons.web.http.jsonrequest def poll(self, req, last=None): - res = req.session.model('chat.message').poll(last, req.session.eval_context(req.context)) - - return res + if not openerp.tools.config.options["gevent"]: + raise Exception("Not usable in a server not running gevent") + num = 0 + while True: + res = req.session.model('chat.message').get_messages(last, req.session.eval_context(req.context)) + if num >= 1 or len(res["res"]) > 0: + return res + last = res["last"] + num += 1 + print "waiting" + chat.Watcher.get_watcher(res["dbname"]).stop(30)