VulpesOS/gaia/tv_apps/remote-control/js/settings.js
OverSu b38dea0597 Publish Vulpes Preview 15 sources for desktop, Android and Tundra
Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
2026-09-30 23:13:03 +02:00

80 lines
2 KiB
JavaScript
Executable file

/* global SettingsListener, evt */
'use strict';
(function(exports) {
var WATCH_SETTINGS = {
'remote-control.enabled': false,
'remote-control.pairing-required': false,
'remote-control.authorized-devices': null,
'remote-control.server-ip': ''
};
var Settings = evt({
_ready: false,
_observer: [],
start: function() {
for(var name in WATCH_SETTINGS) {
this._observer[name] = this._settingHandler.bind(this, name);
SettingsListener.observe(name, WATCH_SETTINGS[name],
this._observer[name]);
}
},
stop: function() {
for(var name in WATCH_SETTINGS) {
SettingsListener.unobserve(name, this._observer[name]);
this[name] = undefined;
}
this._observer = [];
this._ready = false;
},
save: function(settings) {
return new Promise((resolve, reject) => {
var validSettings = {};
var name;
for (name in settings) {
if (name in WATCH_SETTINGS) {
validSettings[name] = settings[name];
}
}
if (!Object.keys(validSettings).length) {
reject();
}
var req = SettingsListener.getSettingsLock().set(validSettings);
req.onsuccess = () => {
for (name in validSettings) {
this._settingHandler(name, validSettings[name]);
}
resolve();
};
req.onerror = () => {
reject();
};
});
},
_settingHandler: function(name, value) {
if (this[name] !== value) {
this[name] = value;
this.fire('changed', name, value);
}
// Check whether all settings are retrieved.
if (!this._ready) {
var hasValue = (name) => {
return this[name] !== undefined;
};
if (Object.keys(WATCH_SETTINGS).every(hasValue)) {
this._ready = true;
this.fire('ready');
}
}
}
});
exports.Settings = Settings;
}(window));