1
0
Fork 0
mirror of https://github.com/kkapsner/CanvasBlocker synced 2025-07-04 20:46:39 +02:00

askOnly once extended

API-types can now be combined in "askOnlyOnce".
Needed new storage version -> added settings migration
This commit is contained in:
kkapsner 2017-11-10 23:45:09 +01:00
parent f75189f374
commit a465303fff
7 changed files with 116 additions and 38 deletions

View file

@ -48,25 +48,26 @@
return settings[name];
};
settingDefinition.set = function setValue(newValue){
if ((typeof newValue) === (typeof settingDefinition.defaultValue)){
if (
!settingDefinition.options ||
settingDefinition.options.includes(newValue)
){
settings[name] = newValue;
if (!settingDefinition.transient){
var storeObject = {};
storeObject[name] = newValue;
browser.storage.local.set(storeObject);
}
}
else {
logging.warning("Provided value outside specified options for ", name, ":", newValue);
}
if (settingDefinition.fixed){
logging.warning("Trying to set the fixed setting", name, ":", newValue);
}
else if ((typeof newValue) !== (typeof settingDefinition.defaultValue)){
logging.warning("Wrong type provided for setting", name, ":", newValue);
}
else if (
settingDefinition.options &&
!settingDefinition.options.includes(newValue)
){
logging.warning("Provided value outside specified options for ", name, ":", newValue);
}
else {
logging.warning("Wrong type provided for setting", name, ":", newValue);
settings[name] = newValue;
if (!settingDefinition.transient){
var storeObject = {};
storeObject[name] = newValue;
browser.storage.local.set(storeObject);
}
}
};
Object.defineProperty(
@ -134,10 +135,56 @@
});
}
});
const settingsMigration = {
validVersions: [undefined, 0.1, 0.2],
transitions: {
"": function(oldStorage){
return {
storageVersion: 0.2
};
},
0.1: function(oldStorage){
var newStorage = {
storageVersion: 0.2
};
if (oldStorage.hasOwnProperty("askOnlyOnce")){
newStorage.askOnlyOnce = oldStorage.askOnlyOnce? "individual": "no";
}
return newStorage;
}
}
};
logging.verbose("loading settings");
scope.loaded = browser.storage.local.get().then(function(storage){
logging.message("settings loaded");
if (!storage.storageVersion){
logging.message("No storage version found. Initializing storage.");
browser.storage.local.remove(Object.keys(storage));
storage = settingsMigration.transitions[""]({});
browser.storage.local.set(storage);
}
else if (storage.storageVersion !== settings.storageVersion){
var toChange = {};
while (storage.storageVersion !== settings.storageVersion){
logging.message("Old storage found. Storage version", storage.storageVersion);
if (settingsMigration.transitions[storage.storageVersion]){
var changes = settingsMigration.transitions[storage.storageVersion](storage);
Object.entries(changes).forEach(function(entry){
const [name, value] = entry;
toChange[name] = value;
storage[name] = value;
});
}
else {
logging.warning("Unable to migrate storage.");
break;
}
}
logging.notice("Changed settings:", toChange);
browser.storage.local.set(toChange);
}
Object.entries(storage).forEach(function(entry){
const [name, value] = entry;
changeValue(name, value);