im: refactored due to changes in web framework
bzr revid: nicolas.vanhoren@openerp.com-20130621130359-6267v1w0hney9dtt
This commit is contained in:
parent
a574ce71bf
commit
355d864526
|
@ -22,6 +22,8 @@
|
|||
import openerp
|
||||
import openerp.tools.config
|
||||
import openerp.modules.registry
|
||||
import openerp.addons.web.http as http
|
||||
from openerp.addons.web.http import request
|
||||
from openerp.tools.misc import DEFAULT_SERVER_DATETIME_FORMAT
|
||||
import datetime
|
||||
from openerp.osv import osv, fields
|
||||
|
@ -90,36 +92,42 @@ POLL_TIMER = 30
|
|||
DISCONNECTION_TIMER = POLL_TIMER + 5
|
||||
WATCHER_ERROR_DELAY = 10
|
||||
|
||||
class LongPollingController(openerp.addons.web.http.Controller):
|
||||
_cp_path = '/longpolling/im'
|
||||
class LongPollingController(http.Controller):
|
||||
|
||||
@openerp.addons.web.http.jsonrequest
|
||||
def poll(self, req, last=None, users_watch=None, db=None, uid=None, password=None, uuid=None):
|
||||
@http.route('/longpolling/im/poll', type="json", auth="none")
|
||||
def poll(self, last=None, users_watch=None, db=None, uid=None, password=None, uuid=None):
|
||||
assert_uuid(uuid)
|
||||
if not openerp.evented:
|
||||
raise Exception("Not usable in a server not running gevent")
|
||||
from openerp.addons.im.watcher import ImWatcher
|
||||
if db is not None:
|
||||
req.session._db = db
|
||||
req.session._uid = uid
|
||||
req.session._password = password
|
||||
req.session.model('im.user').im_connect(uuid=uuid, context=req.context)
|
||||
my_id = req.session.model('im.user').get_by_user_id(uuid or req.session._uid, req.context)["id"]
|
||||
request.session._db = db
|
||||
request.session._uid = uid
|
||||
request.session._password = password
|
||||
request.session.check_security()
|
||||
uid = request.session._uid
|
||||
password = request.session._password
|
||||
registry = openerp.modules.registry.RegistryManager.get(request.session._db)
|
||||
|
||||
with registry.cursor() as cr:
|
||||
registry.get('im.user').im_connect(cr, uid, uuid=uuid, context=request.context)
|
||||
my_id = registry.get('im.user').get_by_user_id(cr, uid, uuid or request.session._uid, request.context)["id"]
|
||||
num = 0
|
||||
while True:
|
||||
res = req.session.model('im.message').get_messages(last, users_watch, uuid=uuid, context=req.context)
|
||||
with registry.cursor() as cr:
|
||||
res = registry.get('im.message').get_messages(cr, uid, last, users_watch, uuid=uuid, context=request.context)
|
||||
if num >= 1 or len(res["res"]) > 0:
|
||||
return res
|
||||
last = res["last"]
|
||||
num += 1
|
||||
ImWatcher.get_watcher(res["dbname"]).stop(my_id, users_watch or [], POLL_TIMER)
|
||||
|
||||
@openerp.addons.web.http.jsonrequest
|
||||
def activated(self, req):
|
||||
@http.route('/longpolling/im/activated', type="json", auth="none")
|
||||
def activated(self):
|
||||
return not not openerp.evented
|
||||
|
||||
@openerp.addons.web.http.jsonrequest
|
||||
def gen_uuid(self, req):
|
||||
@http.route('/longpolling/im/gen_uuid', type="json", auth="none")
|
||||
def gen_uuid(self):
|
||||
import uuid
|
||||
return "%s" % uuid.uuid1()
|
||||
|
||||
|
|
Loading…
Reference in New Issue