bitwarden-estensione-browser/src/services/settingsService.js

100 lines
2.8 KiB
JavaScript

function SettingsService(userService, utilsService) {
this.userService = userService;
this.utilsService = utilsService;
this.settingsCache = null;
initSettingsService();
}
function initSettingsService() {
SettingsService.prototype.clearCache = function () {
this.settingsCache = null;
};
SettingsService.prototype.getSettings = function (callback) {
if (!callback || typeof callback !== 'function') {
throw 'callback function required';
}
var self = this;
if (self.settingsCache) {
callback(self.settingsCache);
return;
}
this.userService.getUserId(function (userId) {
var key = 'settings_' + userId;
chrome.storage.local.get(key, function (obj) {
self.settingsCache = obj[key];
callback(self.settingsCache);
});
});
};
SettingsService.prototype.getEquivalentDomains = function (callback) {
var deferred = Q.defer();
getSettingsKey(this, 'equivalentDomains', function (domains) {
deferred.resolve(domains);
});
return deferred.promise;
};
function getSettingsKey(self, key, callback) {
if (!callback || typeof callback !== 'function') {
throw 'callback function required';
}
self.getSettings(function (settings) {
if (settings && settings[key]) {
callback(settings[key]);
return;
}
callback(null);
});
}
SettingsService.prototype.setEquivalentDomains = function (equivalentDomains, callback) {
setSettingsKey(this, 'equivalentDomains', equivalentDomains, callback);
};
function setSettingsKey(self, key, value, callback) {
if (!callback || typeof callback !== 'function') {
throw 'callback function required';
}
self.userService.getUserId(function (userId) {
var settingsKey = 'settings_' + userId;
self.getSettings(function (settings) {
if (!settings) {
settings = {};
}
settings[key] = value;
var obj = {};
obj[settingsKey] = settings;
chrome.storage.local.set(obj, function () {
self.settingsCache = settings;
callback();
});
});
});
}
SettingsService.prototype.clear = function (userId) {
var self = this;
return self.utilsService.removeFromStorage('settings_' + userId).then(function () {
self.settingsCache = null;
});
};
function handleError(error, deferred) {
deferred.reject(error);
}
}