fix(library): suppress missing-key notices on quiet scheduled syncs
This commit is contained in:
parent
2cce78d664
commit
6225231d67
2 changed files with 49 additions and 5 deletions
|
|
@ -127,14 +127,19 @@ export class LibraryController {
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Per-note key skipping already happens inside the spec (log+skip); this only surfaces one Notice per sync run naming the affected type. */
|
/** Per-note key skipping already happens inside the spec (log+skip); this only surfaces one Notice per sync run naming the affected type. */
|
||||||
private warnMissingKey(spec: MediaTypeSpec): void {
|
private warnMissingKey(spec: MediaTypeSpec, quiet: boolean): void {
|
||||||
const req = KEY_REQUIREMENT[spec.typeName];
|
const req = KEY_REQUIREMENT[spec.typeName];
|
||||||
if (!req || this.getKey(req)) return;
|
if (!req || this.getKey(req)) return;
|
||||||
this.notify(`Library sync: ${KEY_LABEL[req]} API key not configured — ${spec.typeName} enrichment skipped (Media DB Sync settings).`);
|
const msg = `Library sync: ${KEY_LABEL[req]} API key not configured — ${spec.typeName} enrichment skipped (Media DB Sync settings).`;
|
||||||
|
if (quiet) {
|
||||||
|
console.log(`[media-db-library] ${msg}`);
|
||||||
|
} else {
|
||||||
|
this.notify(msg);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async runSync(spec: MediaTypeSpec, full: boolean, dryRun: boolean, quiet: boolean): Promise<LibraryReport> {
|
private async runSync(spec: MediaTypeSpec, full: boolean, dryRun: boolean, quiet: boolean): Promise<LibraryReport> {
|
||||||
this.warnMissingKey(spec);
|
this.warnMissingKey(spec, quiet);
|
||||||
const deps = this.makeDeps(spec);
|
const deps = this.makeDeps(spec);
|
||||||
const report = await libraryFolderSync(spec, deps, { full, dryRun });
|
const report = await libraryFolderSync(spec, deps, { full, dryRun });
|
||||||
const mode = dryRun ? 'DRY-RUN ' : '';
|
const mode = dryRun ? 'DRY-RUN ' : '';
|
||||||
|
|
|
||||||
|
|
@ -168,7 +168,46 @@ describe('concurrency guard', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('missing API key handling', () => {
|
describe('missing API key handling', () => {
|
||||||
test('missing RAWG + Comic Vine keys → one notice each for game/comic, manga/book unaffected', async () => {
|
test('missing RAWG + Comic Vine keys + quiet sync → zero notices, logged only', async () => {
|
||||||
|
const c = new LibraryController(fakePlugin()); // no rawgKeyId/comicvineKeyId configured
|
||||||
|
const notices: string[] = [];
|
||||||
|
const logs: string[] = [];
|
||||||
|
(c as any).notify = (msg: string) => notices.push(msg);
|
||||||
|
const calledTypes: string[] = [];
|
||||||
|
(c as any).makeDeps = (spec: { typeName: string }) => {
|
||||||
|
calledTypes.push(spec.typeName);
|
||||||
|
return {
|
||||||
|
listNotes: async () => [],
|
||||||
|
readNote: async () => '',
|
||||||
|
writeNote: async () => {},
|
||||||
|
sleep: async () => {},
|
||||||
|
log: () => {},
|
||||||
|
specDeps: fakeSpecDeps(),
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
const origLog = console.log;
|
||||||
|
console.log = (msg: string) => {
|
||||||
|
logs.push(msg);
|
||||||
|
origLog(msg);
|
||||||
|
};
|
||||||
|
|
||||||
|
try {
|
||||||
|
await c.syncAll(false, true);
|
||||||
|
} finally {
|
||||||
|
console.log = origLog;
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(calledTypes.sort()).toEqual(['book', 'comic', 'game', 'manga']);
|
||||||
|
const keyNotices = notices.filter(m => m.includes('API key not configured'));
|
||||||
|
expect(keyNotices.length).toBe(0);
|
||||||
|
const keyLogs = logs.filter(m => m.includes('API key not configured'));
|
||||||
|
expect(keyLogs.length).toBe(2);
|
||||||
|
expect(keyLogs.some(m => m.includes('RAWG') && m.includes('game'))).toBe(true);
|
||||||
|
expect(keyLogs.some(m => m.includes('Comic Vine') && m.includes('comic'))).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('missing RAWG + Comic Vine keys + manual (non-quiet) sync → one notice each for game/comic', async () => {
|
||||||
const c = new LibraryController(fakePlugin()); // no rawgKeyId/comicvineKeyId configured
|
const c = new LibraryController(fakePlugin()); // no rawgKeyId/comicvineKeyId configured
|
||||||
const notices: string[] = [];
|
const notices: string[] = [];
|
||||||
(c as any).notify = (msg: string) => notices.push(msg);
|
(c as any).notify = (msg: string) => notices.push(msg);
|
||||||
|
|
@ -185,7 +224,7 @@ describe('missing API key handling', () => {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
await c.syncAll(false, true);
|
await c.syncAll(false, false);
|
||||||
|
|
||||||
expect(calledTypes.sort()).toEqual(['book', 'comic', 'game', 'manga']);
|
expect(calledTypes.sort()).toEqual(['book', 'comic', 'game', 'manga']);
|
||||||
const keyNotices = notices.filter(m => m.includes('API key not configured'));
|
const keyNotices = notices.filter(m => m.includes('API key not configured'));
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue