diff --git a/addons/hr_holidays/tests/test_out_of_office.py b/addons/hr_holidays/tests/test_out_of_office.py index 0ae1b31cb42..456a90d0d35 100644 --- a/addons/hr_holidays/tests/test_out_of_office.py +++ b/addons/hr_holidays/tests/test_out_of_office.py @@ -49,7 +49,7 @@ class TestOutOfOffice(TestHrHolidaysCommon): 'channel_type': 'chat', 'name': 'test' }) - channel_info = channel.channel_info()[0] + channel_info = channel._channel_info()[0] # shape of channelMembers is [('insert', data...)], [0][1] accesses the data members_data = channel_info['channel']['channelMembers'][0][1] self.assertEqual(len(members_data), 2, "Channel info should get info for the 2 members") diff --git a/addons/im_livechat/models/discuss_channel.py b/addons/im_livechat/models/discuss_channel.py index 7ee5e168b1c..62db9106c0a 100644 --- a/addons/im_livechat/models/discuss_channel.py +++ b/addons/im_livechat/models/discuss_channel.py @@ -59,11 +59,11 @@ class DiscussChannel(models.Model): notifications = self._channel_channel_notifications(unpinned_members.partner_id.ids) + notifications return notifications - def channel_info(self): + def _channel_info(self): """ Extends the channel header by adding the livechat operator and the 'anonymous' profile :rtype : list(dict) """ - channel_infos = super().channel_info() + channel_infos = super()._channel_info() channel_infos_dict = dict((c['id'], c) for c in channel_infos) for channel in self: channel_infos_dict[channel.id]['channel']['anonymous_name'] = channel.anonymous_name diff --git a/addons/im_livechat/models/im_livechat_channel.py b/addons/im_livechat/models/im_livechat_channel.py index a2e9c40bd1b..33f737e0791 100644 --- a/addons/im_livechat/models/im_livechat_channel.py +++ b/addons/im_livechat/models/im_livechat_channel.py @@ -199,7 +199,7 @@ class ImLivechatChannel(models.Model): discuss_channel = self.env["discuss.channel"].with_context(mail_create_nosubscribe=False).sudo().create(discuss_channel_vals) if user_operator: discuss_channel._broadcast([user_operator.partner_id.id]) - return discuss_channel.sudo().channel_info()[0] + return discuss_channel.sudo()._channel_info()[0] else: operator_partner_id = user_operator.partner_id if user_operator else chatbot_script.operator_partner_id display_name = operator_partner_id.user_livechat_username or operator_partner_id.display_name diff --git a/addons/im_livechat/static/tests/chat_window_patch_tests.js b/addons/im_livechat/static/tests/chat_window_patch_tests.js index cf922c4b296..8002cc2767d 100644 --- a/addons/im_livechat/static/tests/chat_window_patch_tests.js +++ b/addons/im_livechat/static/tests/chat_window_patch_tests.js @@ -46,8 +46,10 @@ QUnit.test("closing a chat window with no message from admin side unpins it", as await click(".o_menu_systray i[aria-label='Messages']"); await click(".o-mail-NotificationItem"); await click(".o-mail-ChatWindow-header .o-mail-ChatWindow-command[title='Close Chat Window']"); - const channels = await env.services.orm.silent.call("discuss.channel", "channel_info", [ - channelId, - ]); - assert.strictEqual(channels[0].is_pinned, false, "Livechat channel should not be pinned"); + const [channel] = await env.services.rpc( + "/discuss/channel/info", + { channel_id: channelId }, + { silent: true } + ); + assert.strictEqual(channel.is_pinned, false, "Livechat channel should not be pinned"); }); diff --git a/addons/mail/controllers/discuss/channel.py b/addons/mail/controllers/discuss/channel.py index 1a645f3fb39..0114612c93e 100644 --- a/addons/mail/controllers/discuss/channel.py +++ b/addons/mail/controllers/discuss/channel.py @@ -45,6 +45,13 @@ class ChannelController(http.Controller): raise NotFound() channel.write({"image_128": data}) + @http.route("/discuss/channel/info", methods=["POST"], type="json") + def discuss_channel_info(self, channel_id): + member_sudo = request.env["discuss.channel.member"]._get_as_sudo_from_request_or_raise( + request=request, channel_id=int(channel_id) + ) + return member_sudo.channel_id._channel_info() + @http.route("/discuss/channel/messages", methods=["POST"], type="json", auth="public") def discuss_channel_messages(self, channel_id, before=None, after=None, limit=30, around=None): channel_member_sudo = request.env["discuss.channel.member"]._get_as_sudo_from_request_or_raise( diff --git a/addons/mail/controllers/discuss/public_page.py b/addons/mail/controllers/discuss/public_page.py index 9529624e02a..adf0f875c3f 100644 --- a/addons/mail/controllers/discuss/public_page.py +++ b/addons/mail/controllers/discuss/public_page.py @@ -145,7 +145,7 @@ class PublicPageController(http.Controller): "mail.discuss_public_channel_template", { "data": { - "channelData": channel_sudo.channel_info()[0], + "channelData": channel_sudo._channel_info()[0], "discussPublicViewData": dict( { "channel": [("insert", {"id": channel_sudo.id, "model": "discuss.channel"})], diff --git a/addons/mail/models/discuss/discuss_channel.py b/addons/mail/models/discuss/discuss_channel.py index bf6dbe7771c..6aa3de13fda 100644 --- a/addons/mail/models/discuss/discuss_channel.py +++ b/addons/mail/models/discuss/discuss_channel.py @@ -327,7 +327,7 @@ class Channel(models.Model): self.message_unsubscribe(partner.ids) if partner not in self.with_context(active_test=False).channel_partner_ids: return True - channel_info = self.channel_info()[0] # must be computed before leaving the channel (access rights) + channel_info = self._channel_info()[0] # must be computed before leaving the channel (access rights) member = self.env['discuss.channel.member'].search([('channel_id', '=', self.id), ('partner_id', '=', partner.id)]) member_id = member.id member.unlink() @@ -393,7 +393,7 @@ class Channel(models.Model): user = member.partner_id.user_ids[0] if member.partner_id.user_ids else self.env['res.users'] if user: notifications.append((member.partner_id, 'discuss.channel/joined', { - 'channel': member.channel_id.with_user(user).with_context(allowed_company_ids=user.company_ids.ids).sudo().channel_info()[0], + 'channel': member.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, 'open_chat_window': open_chat_window, })) @@ -411,7 +411,7 @@ class Channel(models.Model): guest = member.guest_id if guest: notifications.append((guest, 'discuss.channel/joined', { - 'channel': member.channel_id.sudo().channel_info()[0], + 'channel': member.channel_id.sudo()._channel_info()[0], })) notifications.append((channel, 'mail.record/insert', { 'Channel': { @@ -670,7 +670,7 @@ class Channel(models.Model): user_channels = self.with_user(user_id).with_context( allowed_company_ids=user_id.company_ids.ids ) - for channel_info in user_channels.channel_info(): + for channel_info in user_channels._channel_info(): notifications.append((partner, 'discuss.channel/legacy_insert', channel_info)) return notifications @@ -747,7 +747,7 @@ class Channel(models.Model): } self.message_post(body=notification, message_type="notification", subtype_xmlid="mail.mt_comment") - def channel_info(self): + def _channel_info(self): """ Get the informations header for the current channels :returns a list of channels values :rtype : list(dict) @@ -919,7 +919,7 @@ class Channel(models.Model): 'name': ', '.join(self.env['res.partner'].sudo().browse(partners_to).mapped('name')), }) channel._broadcast(partners_to) - return channel.channel_info()[0] + return channel._channel_info()[0] def channel_fold(self, state=None): """ Update the fold_state of the given session. In order to syncronize web browser @@ -960,7 +960,7 @@ class Channel(models.Model): if not pinned: self.env['bus.bus']._sendone(self.env.user.partner_id, 'discuss.channel/unpin', {'id': self.id}) else: - self.env['bus.bus']._sendone(self.env.user.partner_id, 'discuss.channel/legacy_insert', self.channel_info()[0]) + self.env['bus.bus']._sendone(self.env.user.partner_id, 'discuss.channel/legacy_insert', self._channel_info()[0]) def _channel_seen(self, last_message_id=None, allow_older=False): """ @@ -1095,7 +1095,7 @@ class Channel(models.Model): 'link': Markup('#%s') % (new_channel.id, new_channel.name) } new_channel.message_post(body=notification, message_type="notification", subtype_xmlid="mail.mt_comment") - channel_info = new_channel.channel_info()[0] + channel_info = new_channel._channel_info()[0] self.env['bus.bus']._sendone(self.env.user.partner_id, 'discuss.channel/legacy_insert', channel_info) return channel_info @@ -1117,7 +1117,7 @@ class Channel(models.Model): 'name': name, }) channel._broadcast(partners_to) - return channel.channel_info()[0] + return channel._channel_info()[0] @api.model def get_mention_suggestions(self, search, limit=8): diff --git a/addons/mail/models/discuss/mail_guest.py b/addons/mail/models/discuss/mail_guest.py index cc19362f504..263b8af9824 100644 --- a/addons/mail/models/discuss/mail_guest.py +++ b/addons/mail/models/discuss/mail_guest.py @@ -103,7 +103,7 @@ class MailGuest(models.Model): self.ensure_one() odoobot = self.env.ref('base.partner_root') return { - 'channels': self.channel_ids.channel_info(), + 'channels': self.channel_ids._channel_info(), 'companyName': self.env.company.name, 'currentGuest': { 'id': self.id, diff --git a/addons/mail/models/discuss/res_users.py b/addons/mail/models/discuss/res_users.py index b127cb226cf..17e6d6703b1 100644 --- a/addons/mail/models/discuss/res_users.py +++ b/addons/mail/models/discuss/res_users.py @@ -51,7 +51,7 @@ class ResUsers(models.Model): def _init_messaging(self): self.ensure_one() return { - 'channels': self.partner_id._get_channels_as_member().channel_info(), + 'channels': self.partner_id._get_channels_as_member()._channel_info(), 'hasGifPickerFeature': bool(self.env["ir.config_parameter"].sudo().get_param("discuss.tenor_api_key")), **super()._init_messaging(), } diff --git a/addons/mail/static/src/core/common/messaging_service.js b/addons/mail/static/src/core/common/messaging_service.js index 64384e609ae..4a45d66f952 100644 --- a/addons/mail/static/src/core/common/messaging_service.js +++ b/addons/mail/static/src/core/common/messaging_service.js @@ -450,7 +450,7 @@ export class Messaging { const { id, message: messageData } = notif.payload; let channel = this.store.threads[createLocalId("discuss.channel", id)]; if (!channel || !channel.type) { - const [channelData] = await this.orm.call("discuss.channel", "channel_info", [id]); + const [channelData] = await this.rpc("/discuss/channel/info", { channel_id: id }); channel = this.threadService.insert({ model: "discuss.channel", type: channelData.channel.channel_type, diff --git a/addons/mail/static/src/core/common/thread_service.js b/addons/mail/static/src/core/common/thread_service.js index 058b465d4c3..a8196c9d660 100644 --- a/addons/mail/static/src/core/common/thread_service.js +++ b/addons/mail/static/src/core/common/thread_service.js @@ -83,7 +83,7 @@ export class ThreadService { * @returns {Promise} */ async fetchChannel(id) { - const [channelData] = await this.orm.call("discuss.channel", "channel_info", [id]); + const [channelData] = await this.rpc("/discuss/channel/info", { channel_id: id }); return this.insert({ ...channelData, model: "discuss.channel", diff --git a/addons/mail/static/tests/discuss_app/sidebar_tests.js b/addons/mail/static/tests/discuss_app/sidebar_tests.js index 7ffab479056..837614dbec7 100644 --- a/addons/mail/static/tests/discuss_app/sidebar_tests.js +++ b/addons/mail/static/tests/discuss_app/sidebar_tests.js @@ -1070,7 +1070,7 @@ QUnit.test("Do no channel_info after unpin", async (assert) => { const channelId = pyEnv["discuss.channel"].create({ name: "General", channel_type: "chat" }); const { env, openDiscuss } = await start({ mockRPC(route, args, originalRPC) { - if (args.method === "channel_info") { + if (route === "/discuss/channel/info") { assert.step("channel_info"); } return originalRPC(route, args); diff --git a/addons/mail/static/tests/helpers/mock_server/models/discuss_channel.js b/addons/mail/static/tests/helpers/mock_server/models/discuss_channel.js index 37fb63adc35..c61434b03b2 100644 --- a/addons/mail/static/tests/helpers/mock_server/models/discuss_channel.js +++ b/addons/mail/static/tests/helpers/mock_server/models/discuss_channel.js @@ -49,9 +49,9 @@ patch(MockServer.prototype, "mail/models/discuss_channel", { : undefined; return this._mockDiscussChannelChannelGet(partners_to, pin); } - if (args.model === "discuss.channel" && args.method === "channel_info") { - const ids = args.args[0]; - return this._mockDiscussChannelChannelInfo(ids); + if (route === "/discuss/channel/info") { + const id = args.channel_id; + return this._mockDiscussChannelChannelInfo([id]); } if (args.model === "discuss.channel" && args.method === "add_members") { const ids = args.args[0]; diff --git a/addons/mail/tests/discuss/test_discuss_channel.py b/addons/mail/tests/discuss/test_discuss_channel.py index 01bde179fbd..ef54cd72bf1 100644 --- a/addons/mail/tests/discuss/test_discuss_channel.py +++ b/addons/mail/tests/discuss/test_discuss_channel.py @@ -381,14 +381,14 @@ class TestChannelInternals(MailCommon): chat._channel_seen(msg_2.id) self.assertEqual( - chat.channel_info()[0]['seen_partners_info'][0]['seen_message_id'], + chat._channel_info()[0]['seen_partners_info'][0]['seen_message_id'], msg_2.id, "Last message id should have been updated" ) chat._channel_seen(msg_1.id) self.assertEqual( - chat.channel_info()[0]['seen_partners_info'][0]['seen_message_id'], + chat._channel_info()[0]['seen_partners_info'][0]['seen_message_id'], msg_2.id, "Last message id should stay the same after mark channel as seen with an older message" ) diff --git a/addons/website_livechat/controllers/chatbot.py b/addons/website_livechat/controllers/chatbot.py index df05ffdc198..e3784fffa14 100644 --- a/addons/website_livechat/controllers/chatbot.py +++ b/addons/website_livechat/controllers/chatbot.py @@ -36,6 +36,6 @@ class WebsiteLivechatChatbotScriptController(http.Controller): return request.render("im_livechat.chatbot_test_script_page", { 'server_url': chatbot_script.get_base_url(), - 'channel_data': discuss_channel.channel_info()[0], + 'channel_data': discuss_channel._channel_info()[0], 'chatbot_data': chatbot_script._format_for_frontend() }) diff --git a/addons/website_livechat/models/discuss_channel.py b/addons/website_livechat/models/discuss_channel.py index f050c9133fd..546c959db7c 100644 --- a/addons/website_livechat/models/discuss_channel.py +++ b/addons/website_livechat/models/discuss_channel.py @@ -22,13 +22,13 @@ class DiscussChannel(models.Model): if self.livechat_active and not self.message_ids: self.sudo().unlink() - def channel_info(self): + def _channel_info(self): """ Override to add visitor information on the mail channel infos. This will be used to display a banner with visitor informations at the top of the livechat channel discussion view in discuss module. """ - channel_infos = super().channel_info() + channel_infos = super()._channel_info() channel_infos_dict = dict((c['id'], c) for c in channel_infos) for channel in self.filtered('livechat_visitor_id'): visitor = channel.livechat_visitor_id diff --git a/addons/website_livechat/models/website_visitor.py b/addons/website_livechat/models/website_visitor.py index 25305dd31ae..406d3f9ebfd 100644 --- a/addons/website_livechat/models/website_visitor.py +++ b/addons/website_livechat/models/website_visitor.py @@ -92,7 +92,7 @@ class WebsiteVisitor(models.Model): 'fold_state': 'open', 'is_minimized': True, }) - discuss_channels_info = discuss_channels.channel_info() + discuss_channels_info = discuss_channels._channel_info() notifications = [] for discuss_channel_info in discuss_channels_info: notifications.append([operator.partner_id, 'website_livechat.send_chat_request', discuss_channel_info])