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

64 lines
1.5 KiB
JavaScript
Raw Normal View History

2017-03-21 02:00:04 +08:00
import Storage from '/imports/ui/services/storage/session';
2017-04-06 00:08:20 +08:00
import _ from 'lodash';
2017-03-21 02:00:04 +08:00
2017-03-29 02:41:48 +08:00
const SETTINGS = [
'application',
'audio',
'video',
'cc',
'participants',
'dataSaving',
2017-03-29 02:41:48 +08:00
];
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
});
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 ||
2017-10-27 19:36:27 +08:00
defaultValues.application.locale;
2017-03-29 02:41:48 +08:00
this.setDefault(defaultValues);
2017-03-21 02:00:04 +08:00
}
2017-03-29 02:41:48 +08:00
setDefault(defaultValues) {
const savedSettings = {};
2017-03-21 02:00:04 +08:00
2017-06-03 03:25:02 +08:00
SETTINGS.forEach((s) => {
2017-03-29 02:41:48 +08:00
savedSettings[s] = Storage.getItem(`settings_${s}`);
});
2017-06-03 03:25:02 +08:00
Object.keys(defaultValues).forEach((key) => {
2017-03-29 02:41:48 +08:00
this[key] = _.extend(defaultValues[key], savedSettings[key]);
});
2017-03-21 02:00:04 +08:00
2017-03-29 02:41:48 +08:00
this.save();
2017-06-03 03:25:02 +08:00
}
2017-03-29 02:41:48 +08:00
save() {
Object.keys(this).forEach(k => Storage.setItem(`settings${k}`, this[k].value));
}
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;