VulpesOS/gaia/apps/system/lockscreen/js/settings/settings_cache.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

64 lines
1.8 KiB
JavaScript
Executable file

'use strict';
/**
* A settings getter/setter cache.
* Provide as few as possible APIs like the native APIs do.
**/
(function(exports) {
var LockScreenSettingsCache = function() {
this.cache = {};
this.handleSettings = this.handleSettings.bind(this);
};
LockScreenSettingsCache.prototype.get = function(entry) {
if (this.cache[entry]) {
return Promise.resolve(this.cache[entry]);
}
var resolve, reject;
var promise = new Promise((rev, rej) => {
resolve = rev;
reject = rej;
});
var lock = navigator.mozSettings.createLock();
var req = lock.get(entry);
req.then(() => {
this.cache[entry] = req.result;
// Once it getted, monitor it to update cache.
navigator.mozSettings
.addObserver(entry, this.handleSettings);
resolve(req.result);
}).catch(() => {
reject(req.error);
});
return promise;
};
LockScreenSettingsCache.prototype.set = function(entry, value) {
var resolve, reject;
var promise = new Promise((rev, rej) => {
resolve = rev;
reject = rej;
});
var lock = navigator.mozSettings.createLock();
var reqcontent = {};
reqcontent[entry] = value;
var req = lock.set(reqcontent);
req.then(() => {
this.cache[entry] = value;
resolve();
}).catch(() => {
reject();
});
return promise;
};
LockScreenSettingsCache.prototype.handleSettings = function(evt) {
var { settingsName, settingsValue } = evt;
this.cache[settingsName] = settingsValue;
};
LockScreenSettingsCache.prototype.stop = function() {
Object.keys(this.cache).forEach((entry) => {
navigator.mozSettings.removeObserver(entry, this.handleSettings);
});
};
exports.LockScreenSettingsCache = LockScreenSettingsCache;
})(window);