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>
75 lines
3.5 KiB
Python
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())],
|
|
})
|