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])