fix(collect): include relative links under /download and add fallback collection path

- Content script: base href check via absolute URL; scope to listing container
- Popup: fallback to background-assisted collection when no receiver exists
- Background: expose collect.fromTab to run injection + collection
- Add debug logging for visibility
This commit is contained in:
Jordan Wages 2025-08-22 00:29:48 -05:00
commit 92ec0a9a74
3 changed files with 30 additions and 7 deletions

View file

@ -15,6 +15,17 @@ browser.runtime.onMessage.addListener(async (msg, sender) => {
return { ok: false, error: String(err && err.message || err) };
}
}
if (msg.type === 'collect.fromTab') {
const tabId = msg.tabId || sender?.tab?.id;
if (!tabId) return { ok: false, error: 'No tabId' };
try {
const items = await collectFromTab(tabId);
return { ok: true, items };
} catch (err) {
return { ok: false, error: String(err && err.message || err) };
}
}
});
async function collectFromTab(tabId) {

View file

@ -36,12 +36,14 @@
}
async function collectLinks() {
const anchors = Array.from(document.querySelectorAll('a[href]'));
const scope = document.querySelector('.download-directory-listing') || document;
const anchors = Array.from(scope.querySelectorAll('a[href]'));
const items = [];
for (const a of anchors) {
const href = a.getAttribute('href') || '';
// Only include likely file links under /download/
if (href.includes('/download/')) {
let path = '';
try { path = new URL(a.href, document.baseURI).pathname; } catch (_) {}
// Only include links that resolve under /download/ (relative or absolute)
if (path.startsWith('/download/')) {
const item = toItem(a);
if (item && item.name) items.push(item);
}
@ -52,8 +54,10 @@
// Respond to messages from the popup to collect links
browser.runtime.onMessage.addListener((msg, sender) => {
if (msg && msg.type === 'collectLinks') {
return collectLinks();
return collectLinks().then((items) => {
try { console.debug('[aolg] collected items:', items.length); } catch (_) {}
return items;
});
}
});
})();

View file

@ -47,7 +47,15 @@ async function refresh() {
try {
const tabId = await getActiveTabId();
if (!tabId) throw new Error('No active tab');
const items = await browser.tabs.sendMessage(tabId, { type: 'collectLinks' });
let items = [];
try {
items = await browser.tabs.sendMessage(tabId, { type: 'collectLinks' });
} catch (e) {
// Fallback: ask background to inject and collect
const res = await browser.runtime.sendMessage({ type: 'collect.fromTab', tabId });
if (res?.ok) items = res.items || [];
else throw new Error(res?.error || e?.message || 'collect failed');
}
allItems = items || [];
updateCount();
} catch (e) {