From e5ac55cc5968d035a78dfcd97be71f1dba433df7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Theys?= Date: Mon, 6 Dec 2021 17:30:30 +0000 Subject: [PATCH] [FIX] mail: improve performance of ringing thread MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Avoid iterating over all channels every time a new channel is added. Part of task-2702450 closes odoo/odoo#81051 X-original-commit: 5359a8c354b0a6106d462fe8f047de946614b7b1 Signed-off-by: Sébastien Theys (seb) Signed-off-by: Alexandre Kühn (aku) --- .../mail/static/src/models/messaging/messaging.js | 7 ++++--- addons/mail/static/src/models/thread/thread.js | 15 +++++++++++++++ 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/addons/mail/static/src/models/messaging/messaging.js b/addons/mail/static/src/models/messaging/messaging.js index 3c6da9d22c6..7cda5063bee 100644 --- a/addons/mail/static/src/models/messaging/messaging.js +++ b/addons/mail/static/src/models/messaging/messaging.js @@ -356,10 +356,11 @@ registerModel({ */ publicPartners: many2many('mail.partner'), /** - * Threads for which the current partner has a pending invitation + * Threads for which the current partner has a pending invitation. + * It is computed from the inverse relation for performance reasons. */ - ringingThreads: many2many('mail.thread', { - compute: '_computeRingingThreads', + ringingThreads: one2many('mail.thread', { + inverse: 'messagingAsRingingThread', }), rtc: one2one('mail.rtc', { default: insertAndReplace(), diff --git a/addons/mail/static/src/models/thread/thread.js b/addons/mail/static/src/models/thread/thread.js index eb24b0d6496..055ee2fe569 100644 --- a/addons/mail/static/src/models/thread/thread.js +++ b/addons/mail/static/src/models/thread/thread.js @@ -1536,6 +1536,16 @@ registerModel({ return total + 1; }, baseCounter); }, + /** + * @private + * @returns {FieldCommand} + */ + _computeMessagingAsRingingThread() { + if (this.rtcInvitingSession) { + return replace(this.messaging); + } + return clear(); + }, /** * @private * @returns {mail.message[]} @@ -2162,6 +2172,11 @@ registerModel({ inverse: 'thread', isCausal: true, }), + messagingAsRingingThread: many2one('mail.messaging', { + compute: '_computeMessagingAsRingingThread', + inverse: 'ringingThreads', + readonly: true, + }), model: attr({ readonly: true, required: true,