From 174ff9ff83c5fa0b42d9f9db2fcec519108b2c53 Mon Sep 17 00:00:00 2001 From: Thanh Dodeur Date: Wed, 20 Jul 2022 10:23:32 +0000 Subject: [PATCH] [REF] mail: use the `channelMember` relation for `RtcSession` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit part of task-2692836 closes odoo/odoo#96394 Signed-off-by: Sébastien Theys (seb) --- .../mail/models/mail_channel_rtc_session.py | 11 +- .../call_invite_request_popup.xml | 4 +- .../src/models/call_participant_card.js | 4 +- addons/mail/static/src/models/guest.js | 3 - addons/mail/static/src/models/partner.js | 3 - addons/mail/static/src/models/rtc_session.js | 88 +++--------- addons/mail/tests/test_rtc.py | 134 +++++++++++++----- 7 files changed, 123 insertions(+), 124 deletions(-) diff --git a/addons/mail/models/mail_channel_rtc_session.py b/addons/mail/models/mail_channel_rtc_session.py index e50450f14ea..08692111871 100644 --- a/addons/mail/models/mail_channel_rtc_session.py +++ b/addons/mail/models/mail_channel_rtc_session.py @@ -99,6 +99,7 @@ class MailRtcSession(models.Model): self.ensure_one() vals = { 'id': self.id, + 'channelMember': [('insert-and-replace', self.channel_member_id.mail_channel_member_format()[0])], } if complete_info: vals.update({ @@ -107,16 +108,6 @@ class MailRtcSession(models.Model): 'isSelfMuted': self.is_muted, 'isScreenSharingOn': self.is_screen_sharing_on, }) - if self.guest_id: - vals['guest'] = [('insert', { - 'id': self.guest_id.id, - 'name': self.guest_id.name, - })] - else: - vals['partner'] = [('insert', { - 'id': self.partner_id.id, - 'name': self.partner_id.name, - })] return vals def _mail_rtc_session_format_by_channel(self): diff --git a/addons/mail/static/src/components/call_invite_request_popup/call_invite_request_popup.xml b/addons/mail/static/src/components/call_invite_request_popup/call_invite_request_popup.xml index b1a6db2d41f..2d7e23c2884 100644 --- a/addons/mail/static/src/components/call_invite_request_popup/call_invite_request_popup.xml +++ b/addons/mail/static/src/components/call_invite_request_popup/call_invite_request_popup.xml @@ -7,10 +7,10 @@
Avatar - + Incoming Call...
diff --git a/addons/mail/static/src/models/call_participant_card.js b/addons/mail/static/src/models/call_participant_card.js index d6a50b54098..54054dda97d 100644 --- a/addons/mail/static/src/models/call_participant_card.js +++ b/addons/mail/static/src/models/call_participant_card.js @@ -75,7 +75,7 @@ registerModel({ return; } if (this.rtcSession) { - return this.rtcSession.avatarUrl; + return this.rtcSession.channelMember.avatarUrl; } if (this.invitedMember) { return this.invitedMember.avatarUrl; @@ -136,7 +136,7 @@ registerModel({ */ _computeName() { if (this.rtcSession) { - return this.rtcSession.name; + return this.rtcSession.channelMember.persona.name; } if (this.invitedMember) { return this.invitedMember.name; diff --git a/addons/mail/static/src/models/guest.js b/addons/mail/static/src/models/guest.js index 7a05858d692..442f43a80b1 100644 --- a/addons/mail/static/src/models/guest.js +++ b/addons/mail/static/src/models/guest.js @@ -51,9 +51,6 @@ registerModel({ readonly: true, required: true, }), - rtcSessions: many('RtcSession', { - inverse: 'guest', - }), volumeSetting: one('res.users.settings.volumes', { inverse: 'guest_id', }), diff --git a/addons/mail/static/src/models/partner.js b/addons/mail/static/src/models/partner.js index 44cd5fedb9c..f02357625b6 100644 --- a/addons/mail/static/src/models/partner.js +++ b/addons/mail/static/src/models/partner.js @@ -444,9 +444,6 @@ registerModel({ readonly: true, required: true, }), - rtcSessions: many('RtcSession', { - inverse: 'partner', - }), suggestable: one('ComposerSuggestable', { default: insertAndReplace(), inverse: 'partner', diff --git a/addons/mail/static/src/models/rtc_session.js b/addons/mail/static/src/models/rtc_session.js index 36b24c836a4..7cfaa1bfc05 100644 --- a/addons/mail/static/src/models/rtc_session.js +++ b/addons/mail/static/src/models/rtc_session.js @@ -74,18 +74,18 @@ registerModel({ if (this.isOwnSession) { return; } - if (this.partner && this.partner.volumeSetting) { - this.partner.volumeSetting.update({ volume }); + if (this.channelMember.persona.partner && this.channelMember.persona.partner.volumeSetting) { + this.channelMember.persona.partner.volumeSetting.update({ volume }); } - if (this.guest && this.guest.volumeSetting) { - this.guest.volumeSetting.update({ volume }); + if (this.channelMember.persona.guest && this.channelMember.persona.guest.volumeSetting) { + this.channelMember.persona.guest.volumeSetting.update({ volume }); } if (this.messaging.isCurrentUserGuest) { return; } this.messaging.userSetting.saveVolumeSetting({ - partnerId: this.partner && this.partner.id, - guestId: this.guest && this.guest.id, + partnerId: this.channelMember.persona.partner && this.channelMember.persona.partner.id, + guestId: this.channelMember.persona.guest && this.channelMember.persona.guest.id, volume, }); }, @@ -162,21 +162,6 @@ registerModel({ this.update({ videoStream: stream }); } }, - /** - * @private - * @returns {string} - */ - _computeAvatarUrl() { - if (!this.channel) { - return; - } - if (this.partner) { - return `/mail/channel/${this.channel.id}/partner/${this.partner.id}/avatar_128`; - } - if (this.guest) { - return `/mail/channel/${this.channel.id}/guest/${this.guest.id}/avatar_128?unique=${this.guest.name}`; - } - }, /** * @private * @returns {boolean} @@ -189,11 +174,11 @@ registerModel({ * @returns {boolean} */ _computeIsOwnSession() { - if (!this.messaging) { + if (!this.messaging || !this.channelMember) { return; } - return (this.partner && this.messaging.currentPartner === this.partner) || - (this.guest && this.messaging.currentGuest === this.guest); + return (this.channelMember.persona.partner && this.messaging.currentPartner === this.channelMember.persona.partner) || + (this.channelMember.persona.guest && this.messaging.currentGuest === this.channelMember.persona.guest); }, /** * Updates the track that is broadcasted to the remote of this session. @@ -247,18 +232,6 @@ registerModel({ }); } }, - /** - * @private - * @returns {string} - */ - _computeName() { - if (this.partner) { - return this.partner.name; - } - if (this.guest) { - return this.guest.name; - } - }, /** * @private * @returns {FieldCommand} @@ -284,10 +257,12 @@ registerModel({ * @returns {number} float */ _computeVolume() { - if (this.partner && this.partner.volumeSetting) { - return this.partner.volumeSetting.volume; - } else if (this.guest && this.guest.volumeSetting) { - return this.guest.volumeSetting.volume; + if (this.channelMember) { + if (this.channelMember.persona.partner && this.channelMember.persona.partner.volumeSetting) { + return this.channelMember.persona.partner.volumeSetting.volume; + } else if (this.channelMember.persona.guest && this.channelMember.persona.guest.volumeSetting) { + return this.channelMember.persona.guest.volumeSetting.volume; + } } if (this.audioElement) { return this.audioElement.volume; @@ -333,10 +308,10 @@ registerModel({ console.error(error); } audioElement.load(); - if (this.partner && this.partner.volumeSetting) { - audioElement.volume = this.partner.volumeSetting.volume; - } else if (this.guest && this.guest.volumeSetting) { - audioElement.volume = this.guest.volumeSetting.volume; + if (this.channelMember.persona.partner && this.channelMember.persona.partner.volumeSetting) { + audioElement.volume = this.channelMember.persona.partner.volumeSetting.volume; + } else if (this.channelMember.persona.guest && this.channelMember.persona.guest.volumeSetting) { + audioElement.volume = this.channelMember.persona.guest.volumeSetting.volume; } else { audioElement.volume = this.volume; } @@ -379,12 +354,6 @@ registerModel({ * MediaStream */ audioStream: attr(), - /** - * The relative url of the image that represents the session. - */ - avatarUrl: attr({ - compute: '_computeAvatarUrl', - }), broadcastTimer: one('Timer', { inverse: 'rtcSessionOwnerAsBroadcast', isCausal: true, @@ -396,6 +365,7 @@ registerModel({ channel: one('Thread', { inverse: 'rtcSessions', }), + channelMember: one('ChannelMember'), connectionRecoveryTimeout: attr(), /** * State of the connection with this session, uses RTCPeerConnection.iceConnectionState @@ -404,9 +374,6 @@ registerModel({ connectionState: attr({ default: 'Waiting for the peer to send a RTC offer', }), - guest: one('Guest', { - inverse: 'rtcSessions', - }), /** * Id of the record on the server. */ @@ -499,21 +466,6 @@ registerModel({ * RTCIceCandidate.type String */ localCandidateType: attr(), - /** - * Name of the session, based on the partner name if set. - */ - name: attr({ - compute: '_computeName', - }), - /** - * If set, the partner who owns this rtc session, - * there can be multiple rtc sessions per partner if the partner - * has open sessions in multiple channels, but only one session per - * channel is allowed. - */ - partner: one('Partner', { - inverse: 'rtcSessions', - }), /** * Token to identify the session, it is currently just the toString * id of the record. diff --git a/addons/mail/tests/test_rtc.py b/addons/mail/tests/test_rtc.py index 360dcd5eb6d..069853cb9e0 100644 --- a/addons/mail/tests/test_rtc.py +++ b/addons/mail/tests/test_rtc.py @@ -47,14 +47,21 @@ class TestChannelInternals(MailCommon): 'id': channel.id, 'rtcSessions': [('insert', [{ 'id': channel_member.rtc_session_ids.id + 1, + 'channelMember': [("insert-and-replace", { + "id": channel_member.id, + "channel": [("insert-and-replace", {"id": channel_member.channel_id.id})], + "persona": [("insert-and-replace", { + "partner": [("insert-and-replace", { + "id": channel_member.partner_id.id, + "name": channel_member.partner_id.name, + "im_status": channel_member.partner_id.im_status, + })], + })], + })], 'isCameraOn': False, 'isDeaf': False, 'isSelfMuted': False, 'isScreenSharingOn': False, - 'partner': [('insert', { - 'id': self.user_employee.partner_id.id, - 'name': "Ernest Employee", - })], }])], }, }, @@ -66,14 +73,21 @@ class TestChannelInternals(MailCommon): 'rtcSessions': [ ('insert', [{ 'id': channel_member.rtc_session_ids.id, + 'channelMember': [("insert-and-replace", { + "id": channel_member.id, + "channel": [("insert-and-replace", {"id": channel_member.channel_id.id})], + "persona": [("insert-and-replace", { + "partner": [("insert-and-replace", { + "id": channel_member.partner_id.id, + "name": channel_member.partner_id.name, + "im_status": channel_member.partner_id.im_status, + })], + })], + })], 'isCameraOn': False, 'isDeaf': False, 'isSelfMuted': False, 'isScreenSharingOn': False, - 'partner': [('insert', { - 'id': self.user_employee.partner_id.id, - 'name': "Ernest Employee", - })], }]), ('insert-and-unlink', [{'id': channel_member.rtc_session_ids.id - 1}]), ], @@ -108,14 +122,21 @@ class TestChannelInternals(MailCommon): 'id': channel.id, 'rtcSessions': [('insert', [{ 'id': last_rtc_session_id + 1, + 'channelMember': [("insert-and-replace", { + "id": channel_member.id, + "channel": [("insert-and-replace", {"id": channel_member.channel_id.id})], + "persona": [("insert-and-replace", { + "partner": [("insert-and-replace", { + "id": channel_member.partner_id.id, + "name": channel_member.partner_id.name, + "im_status": channel_member.partner_id.im_status, + })], + })], + })], 'isCameraOn': False, 'isDeaf': False, 'isSelfMuted': False, 'isScreenSharingOn': False, - 'partner': [('insert', { - 'id': self.user_employee.partner_id.id, - 'name': "Ernest Employee", - })], }])], }, }, @@ -184,14 +205,21 @@ class TestChannelInternals(MailCommon): 'id': channel.id, 'rtcSessions': [('insert', [{ 'id': last_rtc_session_id + 1, + 'channelMember': [("insert-and-replace", { + "id": channel_member.id, + "channel": [("insert-and-replace", {"id": channel_member.channel_id.id})], + "persona": [("insert-and-replace", { + "partner": [("insert-and-replace", { + "id": channel_member.partner_id.id, + "name": channel_member.partner_id.name, + "im_status": channel_member.partner_id.im_status, + })], + })], + })], 'isCameraOn': False, 'isDeaf': False, 'isSelfMuted': False, 'isScreenSharingOn': False, - 'partner': [('insert', { - 'id': self.user_employee.partner_id.id, - 'name': "Ernest Employee", - })], }])], }, }, @@ -201,14 +229,21 @@ class TestChannelInternals(MailCommon): 'id': channel.id, 'rtcSessions': [('insert', [{ 'id': last_rtc_session_id + 1, + 'channelMember': [("insert-and-replace", { + "id": channel_member.id, + "channel": [("insert-and-replace", {"id": channel_member.channel_id.id})], + "persona": [("insert-and-replace", { + "partner": [("insert-and-replace", { + "id": channel_member.partner_id.id, + "name": channel_member.partner_id.name, + "im_status": channel_member.partner_id.im_status, + })], + })], + })], 'isCameraOn': False, 'isDeaf': False, 'isSelfMuted': False, 'isScreenSharingOn': False, - 'partner': [('insert', { - 'id': self.user_employee.partner_id.id, - 'name': "Ernest Employee", - })], }])], }, }, @@ -319,14 +354,21 @@ class TestChannelInternals(MailCommon): 'rtcSessions': [('insert', [ { 'id': channel_member.rtc_session_ids.id + 1, + 'channelMember': [("insert-and-replace", { + "id": channel_member_test_user.id, + "channel": [("insert-and-replace", {"id": channel_member_test_user.channel_id.id})], + "persona": [("insert-and-replace", { + "partner": [("insert-and-replace", { + "id": channel_member_test_user.partner_id.id, + "name": channel_member_test_user.partner_id.name, + "im_status": channel_member_test_user.partner_id.im_status, + })], + })], + })], 'isCameraOn': False, 'isDeaf': False, 'isSelfMuted': False, 'isScreenSharingOn': False, - 'partner': [('insert', { - 'id': test_user.partner_id.id, - 'name': 'Test User', - })], }, ])], }, @@ -374,14 +416,20 @@ class TestChannelInternals(MailCommon): 'rtcSessions': [('insert', [ { 'id': channel_member.rtc_session_ids.id + 2, + 'channelMember': [("insert-and-replace", { + "id": channel_member_test_guest.id, + "channel": [("insert-and-replace", {"id": channel_member_test_guest.channel_id.id})], + "persona": [("insert-and-replace", { + "guest": [("insert-and-replace", { + "id": channel_member_test_guest.guest_id.id, + "name": channel_member_test_guest.guest_id.name, + })], + })], + })], 'isCameraOn': False, 'isDeaf': False, 'isSelfMuted': False, 'isScreenSharingOn': False, - 'guest': [('insert', { - 'id': test_guest.id, - 'name': 'Test Guest', - })], }, ])], }, @@ -591,14 +639,21 @@ class TestChannelInternals(MailCommon): 'id': channel.id, 'rtcInvitingSession': [('insert', { 'id': channel_member.rtc_session_ids.id, + 'channelMember': [("insert-and-replace", { + "id": channel_member.id, + "channel": [("insert-and-replace", {"id": channel_member.channel_id.id})], + "persona": [("insert-and-replace", { + "partner": [("insert-and-replace", { + "id": channel_member.partner_id.id, + "name": channel_member.partner_id.name, + "im_status": channel_member.partner_id.im_status, + })], + })], + })], 'isCameraOn': False, 'isDeaf': False, 'isSelfMuted': False, 'isScreenSharingOn': False, - 'partner': [('insert', { - 'id': self.user_employee.partner_id.id, - 'name': "Ernest Employee", - })], })], }, }, @@ -608,14 +663,21 @@ class TestChannelInternals(MailCommon): 'id': channel.id, 'rtcInvitingSession': [('insert', { 'id': channel_member.rtc_session_ids.id, + 'channelMember': [("insert-and-replace", { + "id": channel_member.id, + "channel": [("insert-and-replace", {"id": channel_member.channel_id.id})], + "persona": [("insert-and-replace", { + "partner": [("insert-and-replace", { + "id": channel_member.partner_id.id, + "name": channel_member.partner_id.name, + "im_status": channel_member.partner_id.im_status, + })], + })], + })], 'isCameraOn': False, 'isDeaf': False, 'isSelfMuted': False, 'isScreenSharingOn': False, - 'partner': [('insert', { - 'id': self.user_employee.partner_id.id, - 'name': "Ernest Employee", - })], })], }, },