added initialization feature

This commit is contained in:
buzzcode2007 2024-03-23 17:03:07 +08:00
parent ee14f52f3f
commit b2ea655fd3

View file

@ -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.
chrome.storage.local.get(null, (data) => { if (CLOUD <= 0) {
delete data[preference]; chrome.storage.local.get(null, (data) => {
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);
}
});
}
}