write initial data intended for session storage management
This commit is contained in:
parent
1a011d2a65
commit
2ed7b1212e
1 changed files with 102 additions and 2 deletions
|
@ -218,7 +218,7 @@ export async function write(PATH, DATA, CLOUD = -1) {
|
|||
@param {object} DATA the data
|
||||
@param {number} CLOUD the storage
|
||||
*/
|
||||
const write_database = async (DATA, CLOUD = 0) => {
|
||||
const store = async (DATA, CLOUD = 0) => {
|
||||
// If CLOUD is set to 0, it should automatically determine where the previous source of data was taken from.
|
||||
return((CLOUD > 0) ? chrome.storage.sync.set(DATA) : chrome.storage.local.set(DATA));
|
||||
}
|
||||
|
@ -280,10 +280,108 @@ export async function write(PATH, DATA, CLOUD = -1) {
|
|||
DATA_INJECTED = nest(DATA_ALL, [...DATA_NAME], DATA);
|
||||
|
||||
// Write!
|
||||
write_database(DATA_INJECTED, CLOUD);
|
||||
store(DATA_INJECTED, CLOUD);
|
||||
return (verify(DATA_NAME, DATA));
|
||||
}
|
||||
|
||||
class session {
|
||||
/* Recall session storage data. */
|
||||
static read(PATH) {
|
||||
/* Recursively find through each data, returning either that value or null when the object is not found.
|
||||
|
||||
@param {dictionary} DATA_ALL the data
|
||||
@param {object} DATA_PATH the path of the data
|
||||
@return {object} the data
|
||||
*/
|
||||
function find_data(DATA_ALL, DATA_PATH) {
|
||||
let DATA = DATA_ALL;
|
||||
|
||||
// Pull the data out.
|
||||
if (DATA_ALL != null && (Array.isArray(DATA_PATH) && DATA_PATH != null) ? DATA_PATH.length > 0 : false) {
|
||||
let DATA_PATH_SELECTED = String(DATA_PATH.shift()).trim();
|
||||
|
||||
// Get the selected data.
|
||||
DATA = DATA_ALL[DATA_PATH_SELECTED];
|
||||
|
||||
// must run if there is actually a parameter to test
|
||||
if (DATA_PATH.length > 0) {
|
||||
// Recursively run to make use of the existing data.
|
||||
DATA = find_data(DATA, DATA_PATH);
|
||||
};
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
|
||||
// Now return the data.
|
||||
return DATA;
|
||||
}
|
||||
|
||||
let DATA = {};
|
||||
DATA[`all`] = chrome.storage.local.get(null);
|
||||
(DATA[`all`]) ? DATA[`selected`] = find_data(DATA[`all`], PATH) : false;
|
||||
|
||||
return (DATA[`selected`]);
|
||||
}
|
||||
|
||||
static async write(PATH, DATA) {
|
||||
/* Appropriately nest and merge the data.
|
||||
|
||||
@param {object} EXISTING the original data
|
||||
@param {object} PATH the subpath
|
||||
@param {object} VALUE the value
|
||||
@return {object} the updated data
|
||||
*/
|
||||
function nest(EXISTING, SUBPATH, VALUE) {
|
||||
let DATABASE = EXISTING;
|
||||
|
||||
// Get the current path.
|
||||
let PATH = {};
|
||||
PATH[`current`] = String(SUBPATH.shift()).trim();
|
||||
PATH[`target`] = SUBPATH;
|
||||
|
||||
if (PATH[`target`].length > 0) {
|
||||
(DATABASE[PATH[`current`]] == null) ? DATABASE[PATH[`current`]] = {} : false;
|
||||
DATABASE[PATH[`current`]] = nest(DATABASE[PATH[`current`]], PATH[`target`], VALUE);
|
||||
} else {
|
||||
DATABASE[PATH[`current`]] = VALUE;
|
||||
}
|
||||
// Return the value.
|
||||
return DATABASE;
|
||||
}
|
||||
|
||||
/* Forcibly write the data to chrome database
|
||||
|
||||
@param {object} DATA the data
|
||||
*/
|
||||
const store = async (DATA) => {
|
||||
return(chrome.storage.session.set(DATA));
|
||||
}
|
||||
|
||||
DATA = {"write": DATA};
|
||||
DATA[`all`] = await session.read(null, CLOUD);
|
||||
if ((DATA[`all`] != null && (typeof DATA[`all`]).includes(`obj`)) ? Object.keys(DATA[`all`]).length <= 0 : true) {
|
||||
DATA[`all`] = {};
|
||||
};
|
||||
|
||||
let TARGET = (!(typeof PATH).includes(`obj`)) ? String(PATH).trim().split(",") : PATH;
|
||||
|
||||
// Merge!
|
||||
DATA[`inject`] = nest(DATA[`all`], [...TARGET], DATA[`write`]);
|
||||
|
||||
// Write!
|
||||
store(DATA[`inject`]);
|
||||
}
|
||||
}
|
||||
|
||||
/* Temporarily hold data in browser session storage.
|
||||
|
||||
@param {string} PATH the name
|
||||
@param {object} DATA the data to hold
|
||||
*/
|
||||
export async function dump(PATH, DATA) {
|
||||
|
||||
}
|
||||
|
||||
/* Compare a data against the stored data. Useful when comparing dictionaries.
|
||||
|
||||
@param {string} PATH the name
|
||||
|
@ -440,3 +538,5 @@ export function observe(reaction) {
|
|||
reaction(changes, namespace);
|
||||
});
|
||||
}
|
||||
|
||||
export {session}
|
Loading…
Add table
Add a link
Reference in a new issue