add filters download and updating
This commit is contained in:
		
							parent
							
								
									7631d344e5
								
							
						
					
					
						commit
						76e4e90d25
					
				
					 1 changed files with 79 additions and 0 deletions
				
			
		
							
								
								
									
										79
									
								
								scripts/filters.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								scripts/filters.js
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,79 @@ | |||
| /* filters.js | ||||
| Manage filters. | ||||
| */ | ||||
| 
 | ||||
| /* Select the most appropriate filter based on a URL. | ||||
| 
 | ||||
| @param {string} URL the current URL | ||||
| */ | ||||
| export async function select(URL = window.location.href) {} | ||||
| 
 | ||||
| /* Update all filters or just one. | ||||
| 
 | ||||
| @param {string} URL the URL to update | ||||
| @return {boolean} the state | ||||
| */ | ||||
| export async function update(URL) { | ||||
|   console.log("Updating…"); | ||||
|   // Import the updater.
 | ||||
|   const secretariat = await import( | ||||
|     chrome.runtime.getURL("scripts/secretariat.js") | ||||
|   ); | ||||
|   const net = await import(chrome.runtime.getURL("scripts/net.js")); | ||||
| 
 | ||||
|   // Apparently, JS doesn't have a native queueing system, but it might best work here.
 | ||||
|   class Queue { | ||||
|     constructor() { | ||||
|       this.elements = []; | ||||
|     } | ||||
| 
 | ||||
|     enqueue(element) { | ||||
|       this.elements.push(element); | ||||
|     } | ||||
| 
 | ||||
|     dequeue() { | ||||
|       return this.elements.shift(); | ||||
|     } | ||||
| 
 | ||||
|     isEmpty() { | ||||
|       return this.elements.length <= 0; | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   // Create a queue of the filters.
 | ||||
|   let filters = new Queue(); | ||||
| 
 | ||||
|   async function download(URL) { | ||||
|     let filter = await fetch(URL); | ||||
| 
 | ||||
|     // Return the filter.
 | ||||
|     return filter; | ||||
|   } | ||||
| 
 | ||||
|   if (URL) { | ||||
|     // Check if the URL is in a valid protocol
 | ||||
|     if (URL.includes(`://`)) { | ||||
|       // Append that to the queue.
 | ||||
|       filters.enqueue(URL); | ||||
|     } | ||||
|   } else { | ||||
|     // Add every item to the queue based on what was loaded first.
 | ||||
|     if ((await Promise.all([secretariat.read(`filters`, -1)]))[0]) { | ||||
|       Object.keys( | ||||
|         (await Promise.all([secretariat.read(`filters`, -1)]))[0], | ||||
|       ).every((filter_URL) => { | ||||
|         if (filter_URL.includes(`://`)) { | ||||
|           filters.enqueue(filter_URL); | ||||
|         } | ||||
|       }); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   while (!filters.isEmpty()) { | ||||
|     let filter_URL = filters.dequeue(); | ||||
|     let filter = await net.download(filter_URL); | ||||
| 
 | ||||
|     // Write the filter to storage.
 | ||||
|     secretariat.write(["filters", filter_URL], filter, -1); | ||||
|   } | ||||
| } | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue