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",
|
||||
"version": "0.1.0",
|
||||
"description": "Filter and export archive.org /download links; copy or send to aria2 RPC.",
|
||||
"action": {
|
||||
"browser_action": {
|
||||
"default_title": "Archive.org Link Grabber",
|
||||
"default_popup": "src/popup/index.html"
|
||||
},
|
||||
|
|
@ -15,16 +15,16 @@
|
|||
"storage",
|
||||
"clipboardWrite",
|
||||
"activeTab",
|
||||
"contextMenus"
|
||||
],
|
||||
"host_permissions": [
|
||||
"contextMenus",
|
||||
"https://archive.org/*",
|
||||
"http://localhost:6800/*",
|
||||
"https://localhost:6800/*"
|
||||
],
|
||||
"background": {
|
||||
"service_worker": "src/background/index.js",
|
||||
"type": "module"
|
||||
"scripts": [
|
||||
"src/lib/aria2-bg.js",
|
||||
"src/background/index.js"
|
||||
]
|
||||
},
|
||||
"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) => {
|
||||
if (!msg || !msg.type) return;
|
||||
|
|
@ -9,7 +9,7 @@ browser.runtime.onMessage.addListener(async (msg, sender) => {
|
|||
return { ok: false, error: 'Missing endpoint or URIs' };
|
||||
}
|
||||
try {
|
||||
const res = await addUrisBatch({ endpoint, secret, uris, options });
|
||||
const res = await globalThis.addUrisBatch({ endpoint, secret, uris, options });
|
||||
return { ok: true, result: res };
|
||||
} catch (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 },
|
||||
lastItems: items
|
||||
});
|
||||
try { await browser.action.setBadgeBackgroundColor({ color: '#3b82f6', tabId: tab.id }); } catch (e) {}
|
||||
try { await browser.action.setBadgeText({ text: count ? String(count) : '', tabId: tab.id }); } catch (e) {}
|
||||
try { if (browser.action.openPopup) await browser.action.openPopup(); } catch (e) {}
|
||||
try { await browser.browserAction.setBadgeBackgroundColor({ color: '#3b82f6' }); } catch (e) {}
|
||||
try { await browser.browserAction.setBadgeText({ text: count ? String(count) : '' }); } catch (e) {}
|
||||
} catch (e) {
|
||||
// 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