fix(metadata): persist hardcover and open library ids during book dock import

Pass external provider IDs (including Hardcover and Open Library IDs) from book dock metadata selection through ingest and finalization so they are saved to book metadata on import.

Closes #704
This commit is contained in:
neon
2026-07-16 05:45:36 +00:00
parent 095b347aff
commit 06286d49b1
20 changed files with 1103 additions and 872 deletions
+34 -15
View File
@@ -1,4 +1,5 @@
import type { AudiobookChapter } from "./audiobook";
import type { ComicMetadataFields, MetadataProviderKey, MetadataSeriesMembership } from "./metadata-fetch";
export type BookDockFileStatus = "pending" | "extracting" | "fetching" | "ready" | "error";
export type BookDockAutoFinalizeMetadataMode = "safe_merge" | "fetched_only" | "embedded_only";
@@ -16,24 +17,42 @@ export function resolveBookDockSearchTitle(fileName: string, metadataTitle?: str
}
export interface BookDockMetadata {
title?: string;
subtitle?: string;
title?: string | null;
subtitle?: string | null;
authors?: string[];
narrators?: string[];
description?: string;
publisher?: string;
publishedDate?: string;
publishedYear?: number;
language?: string;
pageCount?: number;
isbn10?: string;
isbn13?: string;
seriesName?: string;
seriesIndex?: number;
description?: string | null;
publisher?: string | null;
publishedDate?: string | null;
publishedYear?: number | null;
language?: string | null;
pageCount?: number | null;
isbn10?: string | null;
isbn13?: string | null;
seriesName?: string | null;
seriesIndex?: number | null;
seriesMemberships?: MetadataSeriesMembership[] | null;
genres?: string[];
coverUrl?: string;
durationSeconds?: number;
chapters?: AudiobookChapter[];
coverUrl?: string | null;
durationSeconds?: number | null;
abridged?: boolean | null;
chapters?: AudiobookChapter[] | null;
communityRatings?: Array<{ provider: MetadataProviderKey; rating: number; ratingCount?: number | null }> | null;
googleBooksId?: string | null;
goodreadsId?: string | null;
amazonId?: string | null;
hardcoverId?: string | null;
hardcoverEditionId?: string | null;
openLibraryId?: string | null;
itunesId?: string | null;
audibleId?: string | null;
librofmId?: string | null;
koboId?: string | null;
comicvineId?: string | null;
ranobedbId?: string | null;
lubimyczytacId?: string | null;
aladinId?: string | null;
comicMetadata?: ComicMetadataFields | null;
}
export interface BookDockFile {