Switch to Manifest V2 for Firefox; convert background to non-module, add global aria2 helpers, and use browserAction badges
This commit is contained in:
		
					parent
					
						
							
								3fdd76d631
							
						
					
				
			
			
				commit
				
					
						2c34e41815
					
				
			
		
					 3 changed files with 69 additions and 12 deletions
				
			
		| 
						 | 
					@ -1,9 +1,9 @@
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  "manifest_version": 3,
 | 
					  "manifest_version": 2,
 | 
				
			||||||
  "name": "Archive.org Link Grabber",
 | 
					  "name": "Archive.org Link Grabber",
 | 
				
			||||||
  "version": "0.1.0",
 | 
					  "version": "0.1.0",
 | 
				
			||||||
  "description": "Filter and export archive.org /download links; copy or send to aria2 RPC.",
 | 
					  "description": "Filter and export archive.org /download links; copy or send to aria2 RPC.",
 | 
				
			||||||
  "action": {
 | 
					  "browser_action": {
 | 
				
			||||||
    "default_title": "Archive.org Link Grabber",
 | 
					    "default_title": "Archive.org Link Grabber",
 | 
				
			||||||
    "default_popup": "src/popup/index.html"
 | 
					    "default_popup": "src/popup/index.html"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
| 
						 | 
					@ -15,16 +15,16 @@
 | 
				
			||||||
    "storage",
 | 
					    "storage",
 | 
				
			||||||
    "clipboardWrite",
 | 
					    "clipboardWrite",
 | 
				
			||||||
    "activeTab",
 | 
					    "activeTab",
 | 
				
			||||||
    "contextMenus"
 | 
					    "contextMenus",
 | 
				
			||||||
  ],
 | 
					 | 
				
			||||||
  "host_permissions": [
 | 
					 | 
				
			||||||
    "https://archive.org/*",
 | 
					    "https://archive.org/*",
 | 
				
			||||||
    "http://localhost:6800/*",
 | 
					    "http://localhost:6800/*",
 | 
				
			||||||
    "https://localhost:6800/*"
 | 
					    "https://localhost:6800/*"
 | 
				
			||||||
  ],
 | 
					  ],
 | 
				
			||||||
  "background": {
 | 
					  "background": {
 | 
				
			||||||
    "service_worker": "src/background/index.js",
 | 
					    "scripts": [
 | 
				
			||||||
    "type": "module"
 | 
					      "src/lib/aria2-bg.js",
 | 
				
			||||||
 | 
					      "src/background/index.js"
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "content_scripts": [
 | 
					  "content_scripts": [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,4 @@
 | 
				
			||||||
import { addUrisBatch } from "../lib/aria2.js";
 | 
					// In MV2 background, aria2 helpers are exposed on globalThis by src/lib/aria2-bg.js
 | 
				
			||||||
 | 
					
 | 
				
			||||||
browser.runtime.onMessage.addListener(async (msg, sender) => {
 | 
					browser.runtime.onMessage.addListener(async (msg, sender) => {
 | 
				
			||||||
  if (!msg || !msg.type) return;
 | 
					  if (!msg || !msg.type) return;
 | 
				
			||||||
| 
						 | 
					@ -9,7 +9,7 @@ browser.runtime.onMessage.addListener(async (msg, sender) => {
 | 
				
			||||||
      return { ok: false, error: 'Missing endpoint or URIs' };
 | 
					      return { ok: false, error: 'Missing endpoint or URIs' };
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    try {
 | 
					    try {
 | 
				
			||||||
      const res = await addUrisBatch({ endpoint, secret, uris, options });
 | 
					      const res = await globalThis.addUrisBatch({ endpoint, secret, uris, options });
 | 
				
			||||||
      return { ok: true, result: res };
 | 
					      return { ok: true, result: res };
 | 
				
			||||||
    } catch (err) {
 | 
					    } catch (err) {
 | 
				
			||||||
      return { ok: false, error: String(err && err.message || err) };
 | 
					      return { ok: false, error: String(err && err.message || err) };
 | 
				
			||||||
| 
						 | 
					@ -40,9 +40,8 @@ browser.contextMenus.onClicked.addListener(async (info, tab) => {
 | 
				
			||||||
      lastCollected: { tabId: tab.id, url: tab.url, time: Date.now(), count },
 | 
					      lastCollected: { tabId: tab.id, url: tab.url, time: Date.now(), count },
 | 
				
			||||||
      lastItems: items
 | 
					      lastItems: items
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
    try { await browser.action.setBadgeBackgroundColor({ color: '#3b82f6', tabId: tab.id }); } catch (e) {}
 | 
					    try { await browser.browserAction.setBadgeBackgroundColor({ color: '#3b82f6' }); } catch (e) {}
 | 
				
			||||||
    try { await browser.action.setBadgeText({ text: count ? String(count) : '', tabId: tab.id }); } catch (e) {}
 | 
					    try { await browser.browserAction.setBadgeText({ text: count ? String(count) : '' }); } catch (e) {}
 | 
				
			||||||
    try { if (browser.action.openPopup) await browser.action.openPopup(); } catch (e) {}
 | 
					 | 
				
			||||||
  } catch (e) {
 | 
					  } catch (e) {
 | 
				
			||||||
    // Swallow errors; context menu is best-effort
 | 
					    // Swallow errors; context menu is best-effort
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										58
									
								
								src/lib/aria2-bg.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								src/lib/aria2-bg.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,58 @@
 | 
				
			||||||
 | 
					// Background-friendly (non-module) aria2 helpers
 | 
				
			||||||
 | 
					// Exposes addUri, addUrisBatch, and getVersion on globalThis
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(function(){
 | 
				
			||||||
 | 
					  function rpcCall(endpoint, body) {
 | 
				
			||||||
 | 
					    return fetch(endpoint, {
 | 
				
			||||||
 | 
					      method: 'POST',
 | 
				
			||||||
 | 
					      headers: { 'Content-Type': 'application/json' },
 | 
				
			||||||
 | 
					      body: JSON.stringify(body)
 | 
				
			||||||
 | 
					    }).then(async (res) => {
 | 
				
			||||||
 | 
					      if (!res.ok) {
 | 
				
			||||||
 | 
					        const text = await res.text().catch(() => String(res.status));
 | 
				
			||||||
 | 
					        throw new Error(`aria2 RPC error ${res.status}: ${text}`);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      return res.json();
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  function addUri({ endpoint, secret, uri, options = {} }) {
 | 
				
			||||||
 | 
					    const body = {
 | 
				
			||||||
 | 
					      jsonrpc: "2.0",
 | 
				
			||||||
 | 
					      id: "archive-org-link-grabber:" + Date.now(),
 | 
				
			||||||
 | 
					      method: "aria2.addUri",
 | 
				
			||||||
 | 
					      params: [
 | 
				
			||||||
 | 
					        secret ? `token:${secret}` : undefined,
 | 
				
			||||||
 | 
					        [uri],
 | 
				
			||||||
 | 
					        options
 | 
				
			||||||
 | 
					      ].filter(v => v !== undefined)
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					    return rpcCall(endpoint, body);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  async function addUrisBatch({ endpoint, secret, uris, options = {} }) {
 | 
				
			||||||
 | 
					    const results = [];
 | 
				
			||||||
 | 
					    for (const uri of uris) {
 | 
				
			||||||
 | 
					      // eslint-disable-next-line no-await-in-loop
 | 
				
			||||||
 | 
					      const r = await addUri({ endpoint, secret, uri, options });
 | 
				
			||||||
 | 
					      results.push(r);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return results;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  function getVersion({ endpoint, secret }) {
 | 
				
			||||||
 | 
					    const body = {
 | 
				
			||||||
 | 
					      jsonrpc: "2.0",
 | 
				
			||||||
 | 
					      id: "archive-org-link-grabber:getVersion:" + Date.now(),
 | 
				
			||||||
 | 
					      method: "aria2.getVersion",
 | 
				
			||||||
 | 
					      params: [secret ? `token:${secret}` : undefined].filter(Boolean)
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					    return rpcCall(endpoint, body);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // expose
 | 
				
			||||||
 | 
					  globalThis.addUrisBatch = addUrisBatch;
 | 
				
			||||||
 | 
					  globalThis.addUri = addUri;
 | 
				
			||||||
 | 
					  globalThis.getVersion = getVersion;
 | 
				
			||||||
 | 
					})();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue