WeebCentral and MangaPill are off by default, with an admin switch per source
Both are unofficial sites that mostly host unlicensed copies; MangaDex (official API) stays on. Settings → Admin → Scraper → Hoster settings has a 'Use <source>' switch. A switched-off source refuses new jobs, keeps queued jobs waiting and is skipped by nightly update checks. Installations whose queue or history already used a source keep it switched on, so upgrades don't stop a working queue. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
336d3325fe
commit
57a571d2f0
6 files changed
+84
-10
No files matched your search
@@ -426,6 +426,9 @@ test('daemon queue state is durable while paused', async t => {
|
||||
}));
|
||||
const service = await new ScraperService({ libraryRoot: path.join(temp, 'library'), dataRoot }).init();
|
||||
t.after(async () => { await service.close(); await fs.rm(temp, { recursive: true, force: true }); });
|
||||
// WeebCentral is off on a fresh installation until an admin switches it on.
|
||||
await assert.rejects(() => service.enqueue({ url: 'https://weebcentral.com/series/01ABCDEF/My-Series' }), /switched off/);
|
||||
await service.updateSettings({ sourcesEnabled: { weebcentral: true } });
|
||||
const item = await service.enqueue({ url: 'https://weebcentral.com/series/01ABCDEF/My-Series' });
|
||||
assert.equal(item.status, 'queued');
|
||||
const scoped = await service.enqueue({ url: 'https://weebcentral.com/series/01ABCDEF/My-Series', scope: { mode: 'latest' } });
|
||||
@@ -439,6 +442,30 @@ test('daemon queue state is durable while paused', async t => {
|
||||
assert.equal((await service.publicState()).queue.length, 0);
|
||||
});
|
||||
|
||||
test('sources are off by default but existing installations keep the ones they use', async t => {
|
||||
assert.deepEqual(validateSettings({}).sourcesEnabled, { weebcentral: false, mangadex: true, mangapill: false });
|
||||
assert.throws(() => validateSettings({ sourcesEnabled: { weebcentral: 'yes' } }), /true or false/);
|
||||
assert.throws(() => validateSettings({ sourcesEnabled: { other: true } }), /Unknown source/);
|
||||
const temp = await fs.mkdtemp(path.join(os.tmpdir(), 'mcscraper-sources-'));
|
||||
const dataRoot = path.join(temp, 'data');
|
||||
await fs.mkdir(dataRoot, { recursive: true });
|
||||
const { sourcesEnabled, ...older } = validateSettings({});
|
||||
await fs.writeFile(path.join(dataRoot, 'queue.json'), JSON.stringify({
|
||||
version: 3, paused: true, status: 'paused', settings: older, publishedRevision: 0,
|
||||
queue: [{ id: 'A', title: 'A', url: 'https://weebcentral.com/series/AAA/A', source: 'weebcentral', status: 'queued', order: 0 }],
|
||||
history: [],
|
||||
}));
|
||||
const service = await new ScraperService({ libraryRoot: path.join(temp, 'library'), dataRoot }).init();
|
||||
t.after(async () => { await service.close(); await fs.rm(temp, { recursive: true, force: true }); });
|
||||
assert.deepEqual(service.state.settings.sourcesEnabled, { weebcentral: true, mangadex: true, mangapill: false });
|
||||
await assert.rejects(() => service.enqueue({ url: 'https://mangapill.com/manga/2/one-piece' }), /MangaPill is switched off/);
|
||||
// Switching a source off keeps its jobs queued instead of failing them.
|
||||
await service.updateSettings({ sourcesEnabled: { weebcentral: false } });
|
||||
assert.equal(service.sourceEnabled('weebcentral'), false);
|
||||
assert.equal(service.sourceEnabled('peer-abc'), true, 'peers have no switch');
|
||||
assert.equal(service.state.queue[0].status, 'queued');
|
||||
});
|
||||
|
||||
test('retry recovers stale downloading entries before work resumes', async t => {
|
||||
const temp = await fs.mkdtemp(path.join(os.tmpdir(), 'mcscraper-retry-'));
|
||||
const dataRoot = path.join(temp, 'data');
|
||||
|
||||
Reference in new issue
Block a user