From 09592c25fdbf3a1b1b59ad505b7937e965f9dd2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandre=20K=C3=BChn?= Date: Mon, 23 Oct 2023 11:23:38 +0200 Subject: [PATCH] [REF] mail: replace Partner/Guest to Persona in mail.record/insert MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit As a step to simplify model insert from python. All data are formatted in a way to make data insert trivial in JS models. closes odoo/odoo#138760 Signed-off-by: Sébastien Theys (seb) --- addons/bus/models/ir_websocket.py | 4 ++-- .../mock_server/models/ir_websocket.js | 4 ++-- addons/mail/models/discuss/ir_websocket.py | 4 ++-- addons/mail/models/discuss/mail_guest.py | 7 ++++--- .../core/common/mail_core_common_service.js | 20 ++++++------------- .../tests/discuss_app/im_status_tests.js | 2 +- .../mock_server/models/ir_websocket.js | 12 +++++++---- 7 files changed, 25 insertions(+), 28 deletions(-) diff --git a/addons/bus/models/ir_websocket.py b/addons/bus/models/ir_websocket.py index f5a756b5fe7..5e2f8fa4a4c 100644 --- a/addons/bus/models/ir_websocket.py +++ b/addons/bus/models/ir_websocket.py @@ -12,10 +12,10 @@ class IrWebsocket(models.AbstractModel): def _get_im_status(self, im_status_ids_by_model): im_status = {} if 'res.partner' in im_status_ids_by_model: - im_status['Partner'] = self.env['res.partner'].with_context(active_test=False).search_read( + im_status['Persona'] = [{**p, 'type': "partner"} for p in self.env['res.partner'].with_context(active_test=False).search_read( [('id', 'in', im_status_ids_by_model['res.partner'])], ['im_status'] - ) + )] return im_status def _build_bus_channel_list(self, channels): diff --git a/addons/bus/static/tests/helpers/mock_server/models/ir_websocket.js b/addons/bus/static/tests/helpers/mock_server/models/ir_websocket.js index 79a0298ff75..a31ce56dcda 100644 --- a/addons/bus/static/tests/helpers/mock_server/models/ir_websocket.js +++ b/addons/bus/static/tests/helpers/mock_server/models/ir_websocket.js @@ -31,10 +31,10 @@ patch(MockServer.prototype, { const imStatus = {}; const { "res.partner": partnerIds } = imStatusIdsByModel; if (partnerIds) { - imStatus["Partner"] = this.mockSearchRead("res.partner", [[["id", "in", partnerIds]]], { + imStatus["Persona"] = this.mockSearchRead("res.partner", [[["id", "in", partnerIds]]], { context: { active_test: false }, fields: ["im_status"], - }); + }).map((p) => ({ ...p, type: "partner" })); } return imStatus; }, diff --git a/addons/mail/models/discuss/ir_websocket.py b/addons/mail/models/discuss/ir_websocket.py index 55130a42ac1..d567f4c40b5 100644 --- a/addons/mail/models/discuss/ir_websocket.py +++ b/addons/mail/models/discuss/ir_websocket.py @@ -8,12 +8,12 @@ class IrWebsocket(models.AbstractModel): def _get_im_status(self, data): im_status = super()._get_im_status(data) if "mail.guest" in data: - im_status["Guest"] = ( + im_status["Persona"] += [{**g, 'type': "guest"} for g in ( self.env["mail.guest"] .sudo() .with_context(active_test=False) .search_read([("id", "in", data["mail.guest"])], ["im_status"]) - ) + )] return im_status @add_guest_to_context diff --git a/addons/mail/models/discuss/mail_guest.py b/addons/mail/models/discuss/mail_guest.py index 28bdc57aff5..f7459458841 100644 --- a/addons/mail/models/discuss/mail_guest.py +++ b/addons/mail/models/discuss/mail_guest.py @@ -109,10 +109,11 @@ class MailGuest(models.Model): self.name = name guest_data = { 'id': self.id, - 'name': self.name + 'name': self.name, + 'type': "guest" } - bus_notifs = [(channel, 'mail.record/insert', {'Guest': guest_data}) for channel in self.channel_ids] - bus_notifs.append((self, 'mail.record/insert', {'Guest': guest_data})) + bus_notifs = [(channel, 'mail.record/insert', {'Persona': guest_data}) for channel in self.channel_ids] + bus_notifs.append((self, 'mail.record/insert', {'Persona': guest_data})) self.env['bus.bus']._sendmany(bus_notifs) def _update_timezone(self, timezone): diff --git a/addons/mail/static/src/core/common/mail_core_common_service.js b/addons/mail/static/src/core/common/mail_core_common_service.js index d0afd78c5cf..da16ffe924f 100644 --- a/addons/mail/static/src/core/common/mail_core_common_service.js +++ b/addons/mail/static/src/core/common/mail_core_common_service.js @@ -89,20 +89,12 @@ export class MailCoreCommon { if (payload.Thread) { this.store.Thread.insert(payload.Thread); } - if (payload.Partner) { - const partners = Array.isArray(payload.Partner) - ? payload.Partner - : [payload.Partner]; - for (const partner of partners) { - if (partner.im_status) { - this.store.Persona.insert({ ...partner, type: "partner" }); - } - } - } - if (payload.Guest) { - const guests = Array.isArray(payload.Guest) ? payload.Guest : [payload.Guest]; - for (const guest of guests) { - this.store.Persona.insert({ ...guest, type: "guest" }); + if (payload.Persona) { + const personas = Array.isArray(payload.Persona) + ? payload.Persona + : [payload.Persona]; + for (const persona of personas) { + this.store.Persona.insert(persona); } } const { LinkPreview: linkPreviews } = payload; diff --git a/addons/mail/static/tests/discuss_app/im_status_tests.js b/addons/mail/static/tests/discuss_app/im_status_tests.js index 91755230aa2..abb54877b5b 100644 --- a/addons/mail/static/tests/discuss_app/im_status_tests.js +++ b/addons/mail/static/tests/discuss_app/im_status_tests.js @@ -91,7 +91,7 @@ QUnit.test("Can handle im_status of unknown partner", async (assert) => { }); const [channel] = pyEnv["discuss.channel"].searchRead([["id", "=", channelId]]); pyEnv["bus.bus"]._sendone(channel, "mail.record/insert", { - Partner: { im_status: "online", id: partnerId }, + Persona: { im_status: "online", id: partnerId, type: "partner" }, }); await nextTick(); const persona = env.services["mail.store"].Persona.get({ type: "partner", id: partnerId }); diff --git a/addons/mail/static/tests/helpers/mock_server/models/ir_websocket.js b/addons/mail/static/tests/helpers/mock_server/models/ir_websocket.js index 0d3a3a6aa66..63b4d8b1c74 100644 --- a/addons/mail/static/tests/helpers/mock_server/models/ir_websocket.js +++ b/addons/mail/static/tests/helpers/mock_server/models/ir_websocket.js @@ -18,10 +18,14 @@ patch(MockServer.prototype, { const imStatus = super._mockIrWebsocket__getImStatus(imStatusIdsByModel); const { "mail.guest": guestIds } = imStatusIdsByModel; if (guestIds) { - imStatus["Guest"] = this.pyEnv["mail.guest"].searchRead([["id", "in", guestIds]], { - context: { active_test: false }, - fields: ["im_status"], - }); + imStatus["Persona"] = imStatus["Persona"].concat( + this.pyEnv["mail.guest"] + .searchRead([["id", "in", guestIds]], { + context: { active_test: false }, + fields: ["im_status"], + }) + .map((g) => ({ ...g, type: "guest" })) + ); } return imStatus; },