Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
80 lines
2 KiB
JavaScript
Executable file
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));
|