added initialization feature
This commit is contained in:
parent
ee14f52f3f
commit
b2ea655fd3
1 changed files with 88 additions and 17 deletions
|
@ -2,12 +2,12 @@
|
||||||
Manage the local cache.
|
Manage the local cache.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
export function read(prefname, cloud = false) {
|
export function read(prefname, cloud = 0) {
|
||||||
/* Read all storeed data in the browser cache.
|
/* Read all storeed data in the browser cache.
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
prefname: (string) the preference name
|
prefname: (string) the preference name
|
||||||
cloud: (bool) determine cloud reading, which is otherwise disabled
|
cloud: (bool) determine cloud reading, which is otherwise set to automatic (0)
|
||||||
Returns: (Object) the preferences
|
Returns: (Object) the preferences
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -16,14 +16,18 @@ export function read(prefname, cloud = false) {
|
||||||
|
|
||||||
if (prefname) {
|
if (prefname) {
|
||||||
// Retrieve the data.
|
// Retrieve the data.
|
||||||
if (cloud) {
|
let data_readings = {'sync': null, 'local': null}
|
||||||
chrome.storage.sync.get(null, (database) => {pref_data = database[prefname]});
|
chrome.storage.sync.get(null, (database) => {data_readings[`sync`] = database[prefname]});
|
||||||
|
chrome.storage.sync.get(null, (database) => {data_readings[`local`] = database[prefname]});
|
||||||
|
|
||||||
|
if ((cloud == 0 && data_readings[`sync`]) || cloud == 1) {
|
||||||
|
pref_data = data_readings[`sync`];
|
||||||
} else {
|
} else {
|
||||||
chrome.storage.local.get(null, (database) => {pref_data = database[prefname];});
|
pref_data = data_readings[`local`];
|
||||||
};
|
}
|
||||||
} else {
|
} else {
|
||||||
// You can get everything if you'd like.
|
// You can get everything if you'd like.
|
||||||
if (cloud) {
|
if (cloud > 0) {
|
||||||
chrome.storage.sync.get(null, (database) => {pref_data = database});
|
chrome.storage.sync.get(null, (database) => {pref_data = database});
|
||||||
} else {
|
} else {
|
||||||
chrome.storage.local.get(null, (database) => {pref_data = database;});
|
chrome.storage.local.get(null, (database) => {pref_data = database;});
|
||||||
|
@ -102,14 +106,14 @@ export function specifics(WHERE, domain) {
|
||||||
return(result);
|
return(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function write(PREFERENCE, SUBPREFERENCE, DATA, CLOUD = false) {
|
export function write(PREFERENCE, SUBPREFERENCE, DATA, CLOUD = 0) {
|
||||||
/* Write the data on the selected prefname.
|
/* Write the data on the selected prefname.
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
PREFERENCE: the preference name
|
PREFERENCE: the preference name
|
||||||
DATA: the new data to be written
|
DATA: the new data to be written
|
||||||
SUBPREFERENCE: the intermediate data
|
SUBPREFERENCE: the intermediate data
|
||||||
CLOUD: store in the cloud, which isn't recommended
|
CLOUD: store in the cloud; otherwise set to automatic
|
||||||
*/
|
*/
|
||||||
|
|
||||||
let DATA_INJECTED = DATA;
|
let DATA_INJECTED = DATA;
|
||||||
|
@ -129,14 +133,15 @@ export function write(PREFERENCE, SUBPREFERENCE, DATA, CLOUD = false) {
|
||||||
DATA_INJECTED = DATA;
|
DATA_INJECTED = DATA;
|
||||||
};
|
};
|
||||||
|
|
||||||
if (CLOUD) {
|
// If CLOUD is set to 0, it should automatically determine where the previous source of data was taken from.
|
||||||
|
if ((CLOUD == 1) || (CLOUD == 0 && read(PREFERENCE, 1))) {
|
||||||
chrome.storage.sync.set({[`${PREFERENCE}`]: DATA_INJECTED});
|
chrome.storage.sync.set({[`${PREFERENCE}`]: DATA_INJECTED});
|
||||||
} else {
|
} else {
|
||||||
chrome.storage.local.set({[`${PREFERENCE}`]: DATA_INJECTED});
|
chrome.storage.local.set({[`${PREFERENCE}`]: DATA_INJECTED});
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export function forget(preference, subpreference, CLOUD = false) {
|
export function forget(preference, subpreference, CLOUD = 0) {
|
||||||
/* Dangerous: Resets all data or a domain's data.
|
/* Dangerous: Resets all data or a domain's data.
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
|
@ -168,19 +173,85 @@ export function forget(preference, subpreference, CLOUD = false) {
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Remove that particular data.
|
// Remove that particular data.
|
||||||
|
if (CLOUD <= 0) {
|
||||||
chrome.storage.local.get(null, (data) => {
|
chrome.storage.local.get(null, (data) => {
|
||||||
delete data[preference];
|
delete data[preference];
|
||||||
|
|
||||||
chrome.storage.local.set(data, (result) => {});
|
chrome.storage.local.set(data, (result) => {});
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
if (CLOUD >= 0) {
|
||||||
|
chrome.storage.sync.get(null, (data) => {
|
||||||
|
delete data[preference];
|
||||||
|
|
||||||
|
chrome.storage.sync.set(data, (result) => {});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
};
|
||||||
} else {
|
} else {
|
||||||
// Clear the data storage.
|
// Clear the data storage.
|
||||||
chrome.storage.local.clear();
|
if (CLOUD >= 0) {chrome.storage.sync.clear();};
|
||||||
chrome.storage.sync.clear();
|
if (CLOUD <= 0) {chrome.storage.local.clear();};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
})();
|
})();
|
||||||
|
|
||||||
return (forget_action);
|
return (forget_action);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function init(data) {
|
||||||
|
/* Initialize the storage.
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
data: (dictionary) this build's managed data
|
||||||
|
*/
|
||||||
|
|
||||||
|
let PREFERENCES_ALL = {};
|
||||||
|
PREFERENCES_ALL[`build`] = data;
|
||||||
|
|
||||||
|
// Read all data.
|
||||||
|
chrome.storage.managed.get(null, function(DATA_MANAGED){
|
||||||
|
PREFERENCES_ALL[`managed`] = DATA_MANAGED;
|
||||||
|
});
|
||||||
|
|
||||||
|
chrome.storage.sync.get(null, function(DATA_SYNC){
|
||||||
|
PREFERENCES_ALL[`sync`] = DATA_SYNC;
|
||||||
|
});
|
||||||
|
|
||||||
|
// Merge data.
|
||||||
|
// Managed > Synchronized > Imported > Local
|
||||||
|
|
||||||
|
if (PREFERENCES_ALL[`managed`]) {
|
||||||
|
(Object.keys(PREFERENCES_ALL[`managed`])).forEach((item) => {
|
||||||
|
let PREFERENCE = {'name': item, 'existing': false};
|
||||||
|
|
||||||
|
if (PREFERENCES_ALL[`sync`]) {
|
||||||
|
PREFERENCE[`existing`] = (PREFERENCES_ALL[`sync`]).hasOwnProperty(PREFERENCE[`name`]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!PREFERENCE[`existing`]) {
|
||||||
|
// Do not allow synchronized data to interfere with managed data.
|
||||||
|
forget(PREFERENCE[`name`]);
|
||||||
|
write(PREFERENCE[`name`], null, PREFERENCES_ALL[`managed`][PREFERENCE[`name`]]);
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Import build data
|
||||||
|
if (PREFERENCES_ALL[`build`]) {
|
||||||
|
(Object.keys(PREFERENCES_ALL[`build`])).forEach((item) => {
|
||||||
|
let PREFERENCE = {'name': item, 'existing': false};
|
||||||
|
|
||||||
|
PREFERENCE[`existing`] = (
|
||||||
|
((PREFERENCES_ALL[`sync`]) ? (PREFERENCES_ALL[`sync`]).hasOwnProperty(PREFERENCE[`name`]) : false) ||
|
||||||
|
((PREFERENCES_ALL[`managed`]) ? (PREFERENCES_ALL[`managed`]).hasOwnProperty(PREFERENCE[`name`]) : false)
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!PREFERENCE[`existing`]) {
|
||||||
|
write(PREFERENCE[`name`], null, PREFERENCES_ALL[`build`][PREFERENCE[`name`]], -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue