diff --git a/web/src/reader/parsers/epub-parsers.ts b/web/src/reader/parsers/epub-parsers.ts index ef3f6cb..c1918b7 100644 --- a/web/src/reader/parsers/epub-parsers.ts +++ b/web/src/reader/parsers/epub-parsers.ts @@ -23,7 +23,7 @@ export async function parseEPUB(epubBlob: Blob): Promise { const packageDoc = parseXML(opfXml); const metadata = extractMetadata(packageDoc); - const spine = parseSpine(packageDoc); + const spine = parseSpine(packageDoc, opfPath); const toc = await parseTOC(zip, packageDoc, opfPath); const resources = await loadResources(zip); const coverImage = await extractCover(zip, packageDoc); @@ -32,7 +32,10 @@ export async function parseEPUB(epubBlob: Blob): Promise { const totalCharacters = await calculateTotalCharacters(spine, resources); return { - metadata, + metadata: { + ...metadata, + coverImage, + }, toc, spine, resources, @@ -82,7 +85,10 @@ function extractMetadata(packageDoc: XMLDocument): EbookCIF["metadata"] { }; } -function parseSpine(packageDoc: XMLDocument): EbookCIF["spine"] { +function parseSpine( + packageDoc: XMLDocument, + opfPath: string, +): EbookCIF["spine"] { const spine = packageDoc.querySelector("spine"); const manifest = packageDoc.querySelector("manifest"); if (!spine || !manifest) { @@ -100,17 +106,18 @@ function parseSpine(packageDoc: XMLDocument): EbookCIF["spine"] { const href = manifestItem.getAttribute("href"); console.log("Href:", href); // Your debug log if (!href) return; + const resolvedPath = resolvePath(opfPath, href); result.push({ id: idref, type: "html" as const, - content: href || "", + content: resolvedPath, properties: (itemref.getAttribute("properties") || "") .split(" ") .filter(Boolean), index: result.length, }); }); - return result; // FIXED - proper return, not trailing comma + return result; } async function parseTOC(