50 lines
2.1 KiB
Python
50 lines
2.1 KiB
Python
from odoo import models
|
|
from odoo.http import request
|
|
from odoo.addons.bus.websocket import wsrequest
|
|
|
|
|
|
class IrWebsocket(models.AbstractModel):
|
|
_inherit = 'ir.websocket'
|
|
|
|
def _get_im_status(self, data):
|
|
im_status = super()._get_im_status(data)
|
|
if 'mail.guest' in data:
|
|
im_status['guests'] = self.env['mail.guest'].sudo().with_context(active_test=False).search_read(
|
|
[('id', 'in', data['mail.guest'])],
|
|
['im_status']
|
|
)
|
|
return im_status
|
|
|
|
def _build_bus_channel_list(self, channels):
|
|
# This method can either be called due to an http or a
|
|
# websocket request. The request itself is necessary to
|
|
# retrieve the current guest. Let's retrieve the proper
|
|
# request.
|
|
req = request or wsrequest
|
|
channels = list(channels) # do not alter original list
|
|
guest_sudo = self.env['mail.guest']._get_guest_from_request(req).sudo()
|
|
mail_channels = self.env['mail.channel']
|
|
if req.session.uid:
|
|
partner = self.env.user.partner_id
|
|
mail_channels = partner.channel_ids
|
|
channels.append(partner)
|
|
elif guest_sudo:
|
|
mail_channels = guest_sudo.channel_ids
|
|
channels.append(guest_sudo)
|
|
for mail_channel in mail_channels:
|
|
channels.append(mail_channel)
|
|
return super()._build_bus_channel_list(channels)
|
|
|
|
def _update_bus_presence(self, inactivity_period, im_status_ids_by_model):
|
|
super()._update_bus_presence(inactivity_period, im_status_ids_by_model)
|
|
if not self.env.user or self.env.user._is_public():
|
|
# This method can either be called due to an http or a
|
|
# websocket request. The request itself is necessary to
|
|
# retrieve the current guest. Let's retrieve the proper
|
|
# request.
|
|
req = request or wsrequest
|
|
guest_sudo = self.env['mail.guest']._get_guest_from_request(req).sudo()
|
|
if not guest_sudo:
|
|
return
|
|
guest_sudo.env['bus.presence'].update(inactivity_period, identity_field='guest_id', identity_value=guest_sudo.id)
|