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:
parent
f75189f374
commit
a465303fff
7 changed files with 116 additions and 38 deletions
|
@ -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);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue