rewrite data write function
This commit is contained in:
		
							parent
							
								
									af69db6cb8
								
							
						
					
					
						commit
						67dc300562
					
				
					 1 changed files with 61 additions and 90 deletions
				
			
		|  | @ -153,106 +153,77 @@ export async function read(DATA_NAME, CLOUD = 0, PARAMETER_TEST = null) { | ||||||
| 	return(DATA_RETURNED[`value`]); | 	return(DATA_RETURNED[`value`]); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /* List the matching rule or memory for a particular domain. |  | ||||||
| 
 |  | ||||||
| @param {string} WHERE the data source |  | ||||||
| @param {string} the data to check |  | ||||||
| @return {dictionary} the rules |  | ||||||
| */ |  | ||||||
| export function specifics(WHERE, domain) { |  | ||||||
| 
 |  | ||||||
| 	let result; |  | ||||||
| 
 |  | ||||||
| 	let pref_data = read(WHERE); |  | ||||||
| 	// Read the filters.
 |  | ||||||
| 	switch (domain) { |  | ||||||
| 		case `filters`: |  | ||||||
| 			let filters = pref_data; |  | ||||||
| 			if (filters) { |  | ||||||
| 				// Must only run when there stored value.
 |  | ||||||
| 				if (domain.trim()) { |  | ||||||
| 					// Loop through each filter
 |  | ||||||
| 					(Object.keys(filters)).forEach((article) => { |  | ||||||
| 						// Set the section in focus
 |  | ||||||
| 						let section = filters[article]; |  | ||||||
| 						let qualified = false; |  | ||||||
| 
 |  | ||||||
| 						// Determine validity
 |  | ||||||
| 						if (section) { |  | ||||||
| 							// The filter must have a matching URL
 |  | ||||||
| 							if (section[`URL`]) { |  | ||||||
| 								// Now it's time to test it.
 |  | ||||||
| 								qualified = (new RegExp(section[`URL`])).test(domain); |  | ||||||
| 								if (qualified && section[`filters`]) { |  | ||||||
| 									// Read that out.
 |  | ||||||
| 									result = section; |  | ||||||
| 								}; |  | ||||||
| 							}; |  | ||||||
| 						}; |  | ||||||
| 					}); |  | ||||||
| 
 |  | ||||||
| 				} else { |  | ||||||
| 					// Get everything as instructed.
 |  | ||||||
| 					result = filters; |  | ||||||
| 				} |  | ||||||
| 			}; |  | ||||||
| 			break; |  | ||||||
| 		default: |  | ||||||
| 			// In the default mode, the keys refer to the product itself
 |  | ||||||
| 			if (pref_data) { |  | ||||||
| 				if (domain) { |  | ||||||
| 					// Extract a data only when a website URL is specified.
 |  | ||||||
| 					(Object.keys(pref_data)).forEach((product_URL) => { |  | ||||||
| 						// Get the first matching
 |  | ||||||
| 						if ((domain.trim()).includes(product_URL)) { |  | ||||||
| 							// Do not modify the data
 |  | ||||||
| 							result = pref_data[product_URL]; |  | ||||||
| 						}; |  | ||||||
| 					}); |  | ||||||
| 				} else { |  | ||||||
| 					result = pref_data; |  | ||||||
| 				} |  | ||||||
| 			}; |  | ||||||
| 			break; |  | ||||||
| 	}; |  | ||||||
| 
 |  | ||||||
| 	// Return the result.
 |  | ||||||
| 	return(result); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| /* Write the data on the selected prefname. | /* Write the data on the selected prefname. | ||||||
| 
 | 
 | ||||||
| @param {string} PREFERENCE the preference name | @param {string} PATH the preference name | ||||||
| @param {string} SUBPREFERENCE the subpreference |  | ||||||
| @param {object} DATA the new data to be written | @param {object} DATA the new data to be written | ||||||
| @param {int} CLOUD store in the cloud; otherwise set to automatic | @param {int} CLOUD store in the cloud; otherwise set to automatic | ||||||
| */ | */ | ||||||
| export function write(PREFERENCE, SUBPREFERENCE, DATA, CLOUD = 0) { | export function write(PATH, DATA, CLOUD = -1) { | ||||||
| 	let DATA_INJECTED = DATA; | 	let DATA_INJECTED = {}; | ||||||
| 
 | 
 | ||||||
| 	if (SUBPREFERENCE) { | 	/* Forcibly write the data to chrome database | ||||||
| 		// Collect the existing preferenc's data.
 | 
 | ||||||
| 		let DATA_ALL = read(PREFERENCE); | 	@param {object} DATA the data | ||||||
|  | 	@param {number} CLOUD the storage | ||||||
|  | 	*/ | ||||||
|  | 	function write_database(DATA, CLOUD = 0) { | ||||||
|  | 		// If CLOUD is set to 0, it should automatically determine where the previous source of data was taken from.
 | ||||||
|  | 
 | ||||||
|  | 		if (CLOUD > 0) { | ||||||
|  | 			chrome.storage.sync.set(DATA); | ||||||
|  | 		} else if (CLOUD < 0) { | ||||||
|  | 			chrome.storage.local.set(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) { | ||||||
|  | 			if (DATABASE[PATH[`current`]] == null) {DATABASE[PATH[`current`]] = {}}; | ||||||
|  | 			DATABASE[PATH[`current`]] = nest(DATABASE[PATH[`current`]], PATH[`target`], VALUE); | ||||||
|  | 		} else { | ||||||
|  | 			DATABASE[PATH[`current`]] = VALUE; | ||||||
|  | 		}; | ||||||
|  | 		// Return the value.
 | ||||||
|  | 		return (DATABASE); | ||||||
|  | 	}; | ||||||
|  | 
 | ||||||
|  | 	(read(null, CLOUD)).then((DATA_ALL) => { | ||||||
| 
 | 
 | ||||||
| 		// handle empty collected data.
 | 		// handle empty collected data.
 | ||||||
| 		if (!DATA_ALL) {DATA_ALL = {};}; | 		if (!DATA_ALL) {DATA_ALL = {};} | ||||||
| 
 | 
 | ||||||
| 		// Add the subpreference.
 | 		let DATA_NAME = PATH; | ||||||
| 		DATA_ALL[SUBPREFERENCE] = DATA; |  | ||||||
| 		DATA_INJECTED = DATA_ALL; |  | ||||||
| 
 | 
 | ||||||
| 	} else { | 		// Convert the entered prefname to an array if it is not one.
 | ||||||
| 		DATA_INJECTED = DATA; | 		if (!(typeof SUBPATH).includes(`object`)) { | ||||||
| 	}; | 			// Split what is not an object.
 | ||||||
|  | 			DATA_NAME = (String(PATH).trim()).split(","); | ||||||
|  | 		} | ||||||
| 
 | 
 | ||||||
| 	// If CLOUD is set to 0, it should automatically determine where the previous source of data was taken from.
 | 		// Merge!
 | ||||||
| 	if ((CLOUD == 1) || (CLOUD == 0 && read(PREFERENCE, 1))) { | 		DATA_INJECTED = nest(DATA_ALL, DATA_NAME, DATA); | ||||||
| 		chrome.storage.sync.set({[`${PREFERENCE}`]: DATA_INJECTED}); | 
 | ||||||
| 	} else { | 		// Write!
 | ||||||
| 		chrome.storage.local.set({[`${PREFERENCE}`]: DATA_INJECTED}); | 		write_database(DATA_INJECTED, CLOUD); | ||||||
| 	}; | 	}); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
| /* Dangerous: Resets all data or a domain's data. | /* Dangerous: Resets all data or a domain's data. | ||||||
| 
 | 
 | ||||||
| @param {string} preference the preference name to delete | @param {string} preference the preference name to delete | ||||||
|  | @ -280,7 +251,7 @@ export function forget(preference, subpreference, CLOUD = 0) { | ||||||
| 					// Should only run when existent
 | 					// Should only run when existent
 | ||||||
| 					if (data[subpreference]) { | 					if (data[subpreference]) { | ||||||
| 						delete data[subpreference]; | 						delete data[subpreference]; | ||||||
| 						write(preference, subpreference, data, CLOUD); | 						write([preference, subpreference], data, CLOUD); | ||||||
| 					} | 					} | ||||||
| 				} else { | 				} else { | ||||||
| 					// Remove that particular data.
 | 					// Remove that particular data.
 | ||||||
|  | @ -345,7 +316,7 @@ export function init(data) { | ||||||
| 			if (!PREFERENCE[`existing`]) { | 			if (!PREFERENCE[`existing`]) { | ||||||
| 				// Do not allow synchronized data to interfere with managed data.
 | 				// Do not allow synchronized data to interfere with managed data.
 | ||||||
| 				forget(PREFERENCE[`name`]); | 				forget(PREFERENCE[`name`]); | ||||||
| 				write(PREFERENCE[`name`], null, PREFERENCES_ALL[`managed`][PREFERENCE[`name`]]); | 				write(PREFERENCE[`name`], PREFERENCES_ALL[`managed`][PREFERENCE[`name`]]); | ||||||
| 			} | 			} | ||||||
| 
 | 
 | ||||||
| 		}); | 		}); | ||||||
|  | @ -363,7 +334,7 @@ export function init(data) { | ||||||
| 			); | 			); | ||||||
| 
 | 
 | ||||||
| 			if (!PREFERENCE[`existing`]) { | 			if (!PREFERENCE[`existing`]) { | ||||||
| 				write(PREFERENCE[`name`], null, PREFERENCES_ALL[`build`][PREFERENCE[`name`]], -1); | 				write(PREFERENCE[`name`], PREFERENCES_ALL[`build`][PREFERENCE[`name`]], -1); | ||||||
| 			} | 			} | ||||||
| 
 | 
 | ||||||
| 		}); | 		}); | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue