merge: feat/16-cbz-support dans develop (support CBZ)

This commit is contained in:
Git Agent
2026-08-23 11:54:13 +02:00
18 changed files with 366 additions and 15 deletions

View File

@ -4,8 +4,9 @@ import type { BookDto } from "@readabook/shared";
import { api, getApiFallback } from "../api/client";
import { ErrorRibbon, Meter } from "../components/ui";
import { navigate } from "../router";
import { CbzReader } from "../reader/CbzReader";
import { EpubReader } from "../reader/EpubReader";
import { parsePdfPageLocator, pdfPagePercent } from "../reader/locators";
import { parseCbzPageLocator, parsePdfPageLocator, pdfPagePercent } from "../reader/locators";
import { PdfReader } from "../reader/PdfReader";
import { useReaderProgress } from "../reader/useReaderProgress";
@ -35,7 +36,7 @@ export function ReaderPage({ bookId }: { bookId: number }) {
}, [bookId]);
useEffect(() => {
const nextPage = parsePdfPageLocator(progress?.locator);
const nextPage = parsePdfPageLocator(progress?.locator) ?? parseCbzPageLocator(progress?.locator);
if (nextPage) setPage((current) => (current === nextPage ? current : nextPage));
}, [progress]);
@ -48,6 +49,13 @@ export function ReaderPage({ bookId }: { bookId: number }) {
[save]
);
const saveEpubLocator = useCallback((locator: string, percent: number) => void save(locator, percent), [save]);
const saveCbzPage = useCallback(
(nextPage: number, pages: number) => {
setPage(nextPage);
void save(`cbz:page:${nextPage}`, pdfPagePercent(nextPage, pages));
},
[save]
);
return (
<div className="reader-page">
@ -79,6 +87,8 @@ export function ReaderPage({ bookId }: { bookId: number }) {
</div>
) : book.format === "pdf" ? (
<PdfReader url={fileUrl} page={page} onPageCommit={savePdfPage} />
) : book.format === "cbz" ? (
<CbzReader bookId={book.id} page={page} onPageCommit={saveCbzPage} />
) : (
<EpubReader url={fileUrl} locator={progress?.locator} onLocatorChange={saveEpubLocator} />
)}