Expose Greatest source links and safe scraper inspection
This commit is contained in:
1 parent
f493afcc18
commit
d0275223a7
7 files changed
+238
-6
No files matched your search
@@ -0,0 +1,43 @@
|
||||
'use strict';
|
||||
|
||||
const normalize = value => String(value || '').normalize('NFKD').toLowerCase().replace(/[^a-z0-9]+/g, '');
|
||||
|
||||
function seriesLink(value) {
|
||||
let url;
|
||||
try { url = new URL(String(value || '')); } catch { return null; }
|
||||
if (url.protocol !== 'https:') return null;
|
||||
const weeb = /^\/series\/([A-Z0-9]{26})(?:\/[^/?#]+)?\/?$/i.exec(url.pathname);
|
||||
if (url.hostname === 'weebcentral.com' && weeb) return {
|
||||
source: 'weebcentral', label: 'WeebCentral', seriesId: weeb[1].toUpperCase(),
|
||||
url: `https://weebcentral.com${url.pathname.replace(/\/$/, '')}`,
|
||||
};
|
||||
const dex = /^\/title\/([0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})(?:\/[^/?#]+)?\/?$/i.exec(url.pathname);
|
||||
if (['mangadex.org', 'www.mangadex.org'].includes(url.hostname) && dex) return {
|
||||
source: 'mangadex', label: 'MangaDex', seriesId: dex[1].toLowerCase(),
|
||||
url: `https://mangadex.org/title/${dex[1].toLowerCase()}`,
|
||||
};
|
||||
return null;
|
||||
}
|
||||
|
||||
const keyOf = link => `${link.source}:${link.seriesId}`;
|
||||
|
||||
function hosterLinks(entry, owned, queue = []) {
|
||||
const names = new Set([entry.title, ...(entry.aliases || [])].map(normalize));
|
||||
const known = new Map();
|
||||
for (const source of owned?.meta?.sources || []) {
|
||||
const link = seriesLink(source.url);
|
||||
if (link) known.set(keyOf(link), { ...link, origin: 'library' });
|
||||
}
|
||||
const jobs = [];
|
||||
for (const item of queue) {
|
||||
const link = seriesLink(item.url);
|
||||
if (!link) continue;
|
||||
if (item.libraryMangaId && owned && item.libraryMangaId !== owned.id) continue;
|
||||
if (!(owned && item.libraryMangaId === owned.id) && !names.has(normalize(item.title)) && !known.has(keyOf(link))) continue;
|
||||
if (!known.has(keyOf(link))) known.set(keyOf(link), { ...link, origin: 'queue title match' });
|
||||
jobs.push({ id: item.id, source: link.source, seriesId: link.seriesId, kind: item.kind, status: item.status });
|
||||
}
|
||||
return { links: [...known.values()], jobs };
|
||||
}
|
||||
|
||||
module.exports = { seriesLink, hosterLinks };
|
||||
Reference in new issue
Block a user