Files
odoo_source/addons/mail/models/res_users_settings.py
T
Thanh Dodeur d3ebd04ec1 [FIX] mail: allow saving of guest volumes
Before this commit, it wasn't possible to save the volume
of guests, the backend was already implemented but the
feature hasn't been implemented in the frontend, this commit
fixes this issue by completing the implementation.

taskId-2679227

closes odoo/odoo#79714

X-original-commit: 149456839f8379422affb53b7b64c6190b6e9f42
Signed-off-by: Sébastien Theys (seb) <seb@odoo.com>
2021-11-15 15:09:50 +00:00

75 lines
3.5 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import api, fields, models
class ResUsersSettings(models.Model):
_name = 'res.users.settings'
_description = 'User Settings'
user_id = fields.Many2one('res.users', string="User", required=True, readonly=True, ondelete='cascade')
is_discuss_sidebar_category_channel_open = fields.Boolean(string="Is discuss sidebar category channel open?", default=True)
is_discuss_sidebar_category_chat_open = fields.Boolean(string="Is discuss sidebar category chat open?", default=True)
# RTC
push_to_talk_key = fields.Char(string="Push-To-Talk shortcut", help="String formatted to represent a key with modifiers following this pattern: shift.ctrl.alt.key, e.g: truthy.1.true.b")
use_push_to_talk = fields.Boolean(string="Use the push to talk feature", default=False)
voice_active_duration = fields.Integer(string="Duration of voice activity in ms", help="How long the audio broadcast will remain active after passing the volume threshold")
volume_settings_ids = fields.One2many('res.users.settings.volumes', 'user_setting_id', string="Volumes of other partners")
_sql_constraints = [
('unique_user_id', 'UNIQUE(user_id)', 'One user should only have one mail user settings.')
]
@api.model
def _find_or_create_for_user(self, user):
settings = user.res_users_settings_ids
if not settings:
settings = self.create({'user_id': user.id})
return settings
def _res_users_settings_format(self):
self.ensure_one()
res = self._read_format(fnames=[name for name, field in self._fields.items() if name == 'id' or not field.automatic])[0]
res.pop('volume_settings_ids')
volume_settings = self.volume_settings_ids._discuss_users_settings_volume_format()
res.update({
'volume_settings': [('insert', volume_settings)] if volume_settings else [],
})
return res
def set_res_users_settings(self, new_settings):
self.ensure_one()
changed_settings = {}
for setting in new_settings.keys():
if setting in self._fields and new_settings[setting] != self[setting]:
changed_settings[setting] = new_settings[setting]
self.write(changed_settings)
self.env['bus.bus']._sendone(self.user_id.partner_id, 'res.users.settings/changed', changed_settings)
def set_volume_setting(self, partner_id, volume, guest_id=None):
"""
Saves the volume of a guest or a partner.
Either partner_id or guest_id must be specified.
:param float volume: the selected volume between 0 and 1
:param int partner_id:
:param int guest_id:
"""
self.ensure_one()
volume_setting = self.env['res.users.settings.volumes'].search([
('user_setting_id', '=', self.id), ('partner_id', '=', partner_id), ('guest_id', '=', guest_id)
])
if volume_setting:
volume_setting.volume = volume
else:
volume_setting = self.env['res.users.settings.volumes'].create({
'user_setting_id': self.id,
'volume': volume,
'partner_id': partner_id,
'guest_id': guest_id,
})
self.env['bus.bus']._sendone(self.user_id.partner_id, 'res.users.settings/volumes_update', {
'volumeSettings': [('insert', volume_setting._discuss_users_settings_volume_format())],
})