diff --git a/addons/mail/models/mail_channel.py b/addons/mail/models/mail_channel.py index 4f1a78785e9..5bb4f27cd89 100644 --- a/addons/mail/models/mail_channel.py +++ b/addons/mail/models/mail_channel.py @@ -307,6 +307,7 @@ class Channel(models.Model): self.check_access_rule('write') partners = self.env['res.partner'].browse(partner_ids or []).exists() guests = self.env['mail.guest'].browse(guest_ids or []).exists() + notifications = [] for channel in self: members_to_create = [] if channel.public == 'groups': @@ -335,10 +336,10 @@ class Channel(models.Model): user = channel_partner.partner_id.user_ids[0] if channel_partner.partner_id.user_ids else self.env['res.users'] # notify invited members through the bus if user: - self.env['bus.bus']._sendone(channel_partner.partner_id, 'mail.channel/joined', { + notifications.append((channel_partner.partner_id, 'mail.channel/joined', { 'channel': channel_partner.channel_id.with_user(user).with_context(allowed_company_ids=user.company_ids.ids).sudo().channel_info()[0], 'invited_by_user_id': self.env.user.id, - }) + })) # notify existing members with a new message in the channel if channel_partner.partner_id == self.env.user.partner_id: notification = _('
joined the channel
') @@ -362,15 +363,15 @@ class Channel(models.Model): }) guest = channel_partner.guest_id if guest: - self.env['bus.bus']._sendone(guest, 'mail.channel/joined', { + notifications.append((guest, 'mail.channel/joined', { 'channel': channel_partner.channel_id.sudo().channel_info()[0], - }) - self.env['bus.bus']._sendone(channel, 'mail.channel/insert', { + })) + notifications.append((channel, 'mail.channel/insert', { 'id': channel.id, 'guestMembers': [('insert', guest_members_data)], 'memberCount': channel.member_count, 'members': [('insert', members_data)], - }) + })) if invite_to_rtc_call: if self.env.user._is_public() and 'guest' in self.env.context: guest = self.env.context.get('guest') @@ -382,6 +383,7 @@ class Channel(models.Model): current_channel_partner = self.env['mail.channel.partner'].sudo().search([('channel_id', '=', channel.id), ('partner_id', '=', partner.id), ('guest_id', '=', guest.id)]) if current_channel_partner and current_channel_partner.rtc_session_ids: current_channel_partner._rtc_invite_members(partner_ids=partners.ids, guest_ids=guests.ids) + self.env['bus.bus']._sendmany(notifications) def _action_remove_members(self, partners): """ Private implementation to remove members from channels. Done as sudo