bigbluebutton-Github/bigbluebutton-html5/imports/ui/services/settings/index.js

124 lines
3.2 KiB
JavaScript
Raw Normal View History

import {default as LocalStorage} from '/imports/ui/services/storage/local';
import {default as SessionStorage} from '/imports/ui/services/storage/session';
import { makeCall } from '/imports/ui/services/api';
2023-02-23 21:27:16 +08:00
import { isEmpty } from 'radash';
2017-03-21 02:00:04 +08:00
const APP_CONFIG = Meteor.settings.public.app;
2017-03-29 02:41:48 +08:00
const SETTINGS = [
'application',
'audio',
'video',
'cc',
'dataSaving',
'animations',
'selfViewDisable',
feat: Initial implementation of Gladia transcriptions to BBB 2.7 (#19091) * Demo changes * Revert "feat(captions): no longer writes in the pad" This reverts commit a76de8c4585c08dadd4f423b3df9299d4b87ce24. * feat(transcriptoin): Add config options for the transcription backend * feat(transcription): Add autodetect option to cc chevron * feat(transcription): Move transcription options into settings modal * feat(transcription): Set transcription options via userdata * fix(transcription): Correct userdata for settings transcription params * feat(transcriptions): options to auto enable caption button * feat(transcriptions): Option to hide old CC pad funcionality * fix(transcription): Fix PR comments * fix(transcription): Refactor updateTranscript to prevent null user and make it more readable * feat(transcription): bbb_transcription_provider can be set via userdata * fix(transcription): Use base10 for parseInt * fix(transcriptions): Fix CC language divider when using webspeech * fix(transcriptions): Use a default pad in the settings instead of hardcoding 'en' We still need to use a language pad such as 'en', but in the future we can better separate these systems. * fix(transcription): Add a special permission for automatic transcription updates to the pad and restore old per user updates permission * feature(transcriptions): Include transcriptions submenu and locales * chore: bump bbb-transcription-controller to v0.2.0 * fix(transcription): Add missing menu files * fix(transcription): Fix transcription provider options in settings.yml * fix: setting password for bbb-transcription-controller * build: add gladia-proxy.log for transcription-controller * fix(transcriptions): Remove transcript splitting and floor logic from akka apps * fix(captions): Show long utterances as split captions, show multiple speaker captions * chore: bump bbb-transcription-controller to 0.2.1 --------- Co-authored-by: Anton Georgiev <anto.georgiev@gmail.com>
2023-11-30 23:10:36 +08:00
'transcription',
2017-03-29 02:41:48 +08:00
];
2017-03-21 02:00:04 +08:00
const CHANGED_SETTINGS = 'changed_settings';
2022-10-10 20:09:18 +08:00
const DEFAULT_SETTINGS = 'default_settings';
2017-03-21 02:00:04 +08:00
class Settings {
2017-03-29 02:41:48 +08:00
constructor(defaultValues = {}) {
2017-06-03 03:25:02 +08:00
SETTINGS.forEach((p) => {
2017-03-29 02:41:48 +08:00
const privateProp = `_${p}`;
this[privateProp] = {
2017-06-03 03:25:02 +08:00
tracker: new Tracker.Dependency(),
2017-03-29 02:41:48 +08:00
value: undefined,
};
Object.defineProperty(this, p, {
get: () => {
this[privateProp].tracker.depend();
return this[privateProp].value;
},
2017-06-03 03:25:02 +08:00
set: (v) => {
2017-03-29 02:41:48 +08:00
this[privateProp].value = v;
this[privateProp].tracker.changed();
},
});
2017-03-21 02:00:04 +08:00
});
this.defaultSettings = {};
2017-10-27 19:36:27 +08:00
// Sets default locale to browser locale
defaultValues.application.locale = navigator.languages ? navigator.languages[0] : false
|| navigator.language
|| defaultValues.application.locale;
2017-10-27 19:36:27 +08:00
2017-03-29 02:41:48 +08:00
this.setDefault(defaultValues);
this.loadChanged();
2017-03-21 02:00:04 +08:00
}
2017-03-29 02:41:48 +08:00
setDefault(defaultValues) {
Object.keys(defaultValues).forEach((key) => {
this[key] = defaultValues[key];
this.defaultSettings[`_${key}`] = defaultValues[key];
});
this.save(DEFAULT_SETTINGS);
}
loadChanged() {
const Storage = (APP_CONFIG.userSettingsStorage === 'local') ? LocalStorage : SessionStorage;
2017-03-29 02:41:48 +08:00
const savedSettings = {};
2017-03-21 02:00:04 +08:00
2017-06-03 03:25:02 +08:00
SETTINGS.forEach((s) => {
savedSettings[s] = Storage.getItem(`${CHANGED_SETTINGS}_${s}`);
2017-03-29 02:41:48 +08:00
});
Object.keys(savedSettings).forEach((key) => {
const savedItem = savedSettings[key];
if (!savedItem) return;
this[key] = {
...this[key],
...savedItem,
};
2017-03-29 02:41:48 +08:00
});
2017-06-03 03:25:02 +08:00
}
2017-03-29 02:41:48 +08:00
save(settings = CHANGED_SETTINGS) {
const Storage = (APP_CONFIG.userSettingsStorage === 'local') ? LocalStorage : SessionStorage;
if (settings === CHANGED_SETTINGS) {
Object.keys(this).forEach((k) => {
const values = this[k].value;
const defaultValues = this.defaultSettings[k];
if (!values) return;
const changedValues = Object.keys(values)
.filter(item => values[item] !== defaultValues[item])
.reduce((acc, item) => ({
...acc,
[item]: values[item],
}), {});
2023-02-23 21:27:16 +08:00
if (isEmpty(changedValues)) Storage.removeItem(`${settings}${k}`);
Storage.setItem(`${settings}${k}`, changedValues);
});
} else {
Object.keys(this).forEach((k) => {
Storage.setItem(`${settings}${k}`, this[k].value);
});
}
const userSettings = {};
SETTINGS.forEach((e) => {
userSettings[e] = this[e];
});
Tracker.autorun((c) => {
const { status } = Meteor.status();
if (status === 'connected') {
c.stop();
makeCall('userChangedLocalSettings', userSettings);
}
});
2017-03-29 02:41:48 +08:00
}
2017-03-21 02:00:04 +08:00
}
2017-03-29 02:41:48 +08:00
const SettingsSingleton = new Settings(Meteor.settings.public.app.defaultSettings);
2017-03-21 02:00:04 +08:00
export default SettingsSingleton;