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';
|
2019-05-10 05:25:29 +08:00
|
|
|
import { makeCall } from '/imports/ui/services/api';
|
2017-03-21 02:00:04 +08:00
|
|
|
|
2017-03-29 02:41:48 +08:00
|
|
|
const SETTINGS = [
|
|
|
|
'application',
|
|
|
|
'audio',
|
|
|
|
'video',
|
|
|
|
'cc',
|
|
|
|
'participants',
|
2018-02-06 21:33:48 +08:00
|
|
|
'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
|
2019-05-10 05:25:29 +08:00
|
|
|
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);
|
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() {
|
2019-05-10 05:25:29 +08:00
|
|
|
Object.keys(this).forEach((k) => {
|
|
|
|
if (k === '_dataSaving') {
|
|
|
|
const { value: { viewParticipantsWebcams } } = this[k];
|
|
|
|
|
|
|
|
makeCall('userChangedSettings', 'viewParticipantsWebcams', viewParticipantsWebcams);
|
|
|
|
}
|
|
|
|
|
|
|
|
Storage.setItem(`settings${k}`, this[k].value);
|
|
|
|
});
|
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;
|