*: bus, hr_holidays. The `/bus/im_status` route polls the server every minute in order for the user im_status to be up to date. This commit removes this poll by sending the im_status on the bus when updating the current user presence. Moreover, before [1], the user bus presence was updated on each poll. When the user didn't poll for 50 seconds, we assumed the user was disconnected. Since [1], the bus presence is updated each 30 seconds by the `im_status` service. This is too frequent: there is no need to update the user presence so often. In order not to overhelm the server with unnecessary requests, the update presence interval as well as the delay to be considered disconnected have been updated: the former from 30 to 60 seconds, the later from 55 to 65 seconds (assuming that a user that has missed an update presence tick is disconnected). [1]: odoo/odoo@a5623d2 closes odoo/odoo#100249 Signed-off-by: Sébastien Theys (seb) <seb@odoo.com>
53 lines
2.3 KiB
Python
53 lines
2.3 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo import SUPERUSER_ID, tools
|
|
from odoo.http import request, route
|
|
from odoo.addons.bus.controllers.main import BusController
|
|
|
|
|
|
class MailChatController(BusController):
|
|
|
|
def _default_request_uid(self):
|
|
""" For Anonymous people, they receive the access right of SUPERUSER_ID since they have NO access (auth=none)
|
|
!!! Each time a method from this controller is call, there is a check if the user (who can be anonymous and Sudo access)
|
|
can access to the resource.
|
|
"""
|
|
return request.session.uid and request.session.uid or SUPERUSER_ID
|
|
|
|
# --------------------------
|
|
# Anonymous routes (Common Methods)
|
|
# --------------------------
|
|
@route('/mail/chat_post', type="json", auth="public", cors="*")
|
|
def mail_chat_post(self, uuid, message_content, **kwargs):
|
|
mail_channel = request.env["mail.channel"].sudo().search([('uuid', '=', uuid)], limit=1)
|
|
if not mail_channel:
|
|
return False
|
|
|
|
# find the author from the user session
|
|
if request.session.uid:
|
|
author = request.env['res.users'].sudo().browse(request.session.uid).partner_id
|
|
author_id = author.id
|
|
email_from = author.email_formatted
|
|
else: # If Public User, use catchall email from company
|
|
author_id = False
|
|
email_from = mail_channel.anonymous_name or mail_channel.create_uid.company_id.catchall_formatted
|
|
# post a message without adding followers to the channel. email_from=False avoid to get author from email data
|
|
body = tools.plaintext2html(message_content)
|
|
message = mail_channel.with_context(mail_create_nosubscribe=True).message_post(
|
|
author_id=author_id,
|
|
email_from=email_from,
|
|
body=body,
|
|
message_type='comment',
|
|
subtype_xmlid='mail.mt_comment'
|
|
)
|
|
return message.id if message else False
|
|
|
|
@route(['/mail/chat_history'], type="json", auth="public", cors="*")
|
|
def mail_chat_history(self, uuid, last_id=False, limit=20):
|
|
channel = request.env["mail.channel"].sudo().search([('uuid', '=', uuid)], limit=1)
|
|
if not channel:
|
|
return []
|
|
else:
|
|
return channel._channel_fetch_message(last_id, limit)
|