diff --git a/package-lock.json b/package-lock.json index 61897ae9..d19275e4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9215,22 +9215,22 @@ } }, "node_modules/@prose-reader/core": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/@prose-reader/core/-/core-1.51.0.tgz", - "integrity": "sha512-Qat4Qd0IehYVJI+UgZ4FQiB4VOn6swNlL/n6Xy+kmv3TDu8RrwARoOH0zoi/vCrSJD/BxFTVku8KbgaR/t/mqQ==", + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/@prose-reader/core/-/core-1.52.0.tgz", + "integrity": "sha512-qIg6V7QOp+CkovVCD5/jBvLjVOALV7X5Jmfq+B2cQDN5xl4QsUmNoPXG0jJQ+2LgMZ+lsn9aD99glihtPiHDtg==", "dependencies": { - "@prose-reader/shared": "^1.51.0" + "@prose-reader/shared": "^1.52.0" }, "peerDependencies": { "rxjs": "*" } }, "node_modules/@prose-reader/enhancer-hammer-gesture": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/@prose-reader/enhancer-hammer-gesture/-/enhancer-hammer-gesture-1.51.0.tgz", - "integrity": "sha512-v0wCSYzGeKSA/f9y5Ry4Pcn3YKXjadp2amB/azZYPpBMeabVDQK6ghS5WZxCEy9v8af4ZWDMUQMcfOOFfosIDA==", + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/@prose-reader/enhancer-hammer-gesture/-/enhancer-hammer-gesture-1.52.0.tgz", + "integrity": "sha512-rf6rx5liZ71Szl+pQVAwC7WUWSobu8KxE5x1HOq+jv6DK1U+kAArs1n1zK19lhUTgO9IcnIY4DDSTvcPQ++vow==", "dependencies": { - "@prose-reader/core": "^1.51.0" + "@prose-reader/core": "^1.52.0" }, "peerDependencies": { "@types/hammerjs": "*", @@ -9239,11 +9239,11 @@ } }, "node_modules/@prose-reader/react": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/@prose-reader/react/-/react-1.51.0.tgz", - "integrity": "sha512-FhkLAk5dQnWGyGz/uNCh7L6d5S0yVYpz12dXgvg/SojcnQ+2mjLUdcYk6kAH4PDOQDalxXrTcLjEvi/G0m8Iag==", + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/@prose-reader/react/-/react-1.52.0.tgz", + "integrity": "sha512-clSnZ/agcvG10yDosTAMW07LU5uhHpl/1jsA+HlSp3xzZvYPjsklw8BUwizR/7GNiww0iJ9YndKysRaeeaTmaw==", "dependencies": { - "@prose-reader/core": "^1.51.0" + "@prose-reader/core": "^1.52.0" }, "peerDependencies": { "@types/react": "*", @@ -9253,9 +9253,9 @@ } }, "node_modules/@prose-reader/shared": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/@prose-reader/shared/-/shared-1.51.0.tgz", - "integrity": "sha512-oVl+iHpSZ9dfl8FKYKGTNWPCyenEY8mkz1LVljn/KgbZPtAj+EP4ydPTsF28FXCHG25Ouyn3c53RBRddNwDtjg==" + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/@prose-reader/shared/-/shared-1.52.0.tgz", + "integrity": "sha512-oOwlGNgfvwkhx1p8q+L9GEE6uu3YkPFb2eEcveJcjxVMgOusYVF82peo/lvofo4KrutOdtRKLVfbpHTjbosgBw==" }, "node_modules/@protobufjs/aspromise": { "version": "1.1.2", @@ -50050,11 +50050,11 @@ "@mui/material": "^5.11.11", "@mui/styles": "^5.11.11", "@oboku/shared": "0.8.0", - "@prose-reader/core": "1.51.0", - "@prose-reader/enhancer-hammer-gesture": "1.51.0", - "@prose-reader/react": "1.51.0", - "@prose-reader/shared": "1.51.0", - "@prose-reader/streamer": "1.51.0", + "@prose-reader/core": "1.52.0", + "@prose-reader/enhancer-hammer-gesture": "1.52.0", + "@prose-reader/react": "1.52.0", + "@prose-reader/shared": "1.52.0", + "@prose-reader/streamer": "1.52.0", "@sentry/integrations": "^7.40.0", "@sentry/react": "^7.40.0", "buffer": "^6.0.3", @@ -50122,11 +50122,11 @@ } }, "packages/web/node_modules/@prose-reader/streamer": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/@prose-reader/streamer/-/streamer-1.51.0.tgz", - "integrity": "sha512-Omrci2gAPsewJAMmyZHF4h6ZtSxbHtSusshKYiJuNDppXxp7OcLvXr5Wr7HATau5SiI1fM0cj4V0SLi8F57f2g==", + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/@prose-reader/streamer/-/streamer-1.52.0.tgz", + "integrity": "sha512-+d+YJZURO1q8sGv+by1xhWcPmladrhgEJbwqPVAVz/g6djQpbOvDn7b2o8z8nuAv41BmdAkm1uvfTz2FsSNAJA==", "dependencies": { - "@prose-reader/shared": "^1.51.0" + "@prose-reader/shared": "^1.52.0" }, "peerDependencies": { "buffer": "^6.0.3", diff --git a/packages/web/package.json b/packages/web/package.json index 3f180eee..73e6979e 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -10,11 +10,11 @@ "@mui/material": "^5.11.11", "@mui/styles": "^5.11.11", "@oboku/shared": "0.8.0", - "@prose-reader/core": "1.51.0", - "@prose-reader/enhancer-hammer-gesture": "1.51.0", - "@prose-reader/react": "1.51.0", - "@prose-reader/shared": "1.51.0", - "@prose-reader/streamer": "1.51.0", + "@prose-reader/core": "1.52.0", + "@prose-reader/enhancer-hammer-gesture": "1.52.0", + "@prose-reader/react": "1.52.0", + "@prose-reader/shared": "1.52.0", + "@prose-reader/streamer": "1.52.0", "@sentry/integrations": "^7.40.0", "@sentry/react": "^7.40.0", "buffer": "^6.0.3", diff --git a/packages/web/src/reader/manifest.ts b/packages/web/src/reader/manifest.ts deleted file mode 100644 index 28aea641..00000000 --- a/packages/web/src/reader/manifest.ts +++ /dev/null @@ -1,95 +0,0 @@ -import { Manifest } from "@prose-reader/core" -import { useCallback, useEffect, useState } from "react" -import { getBookFile } from "../download/getBookFile.shared" -import { Report } from "../debug/report.shared" -import { getArchiveForRarFile } from "./streamer/getArchiveForFile.shared" -import "../archive" -import { generateManifestFromArchive } from "@prose-reader/streamer" -import { directives } from "@oboku/shared" -import { getManifestBaseUrl } from "./streamer/getManifestBaseUrl.shared" - -// @todo useQuery -const useGetRarManifest = () => - useCallback(async (bookId: string) => { - const file = await getBookFile(bookId) - const normalizedName = file?.name.toLowerCase() - if (file && normalizedName?.endsWith(`.cbr`)) { - const archive = await getArchiveForRarFile(file) - - return generateManifestFromArchive(archive, { - baseUrl: getManifestBaseUrl(window.location.origin, bookId) - }) - } - - return undefined - }, []) - -// @todo useQuery -export const useManifest = (bookId: string | undefined) => { - const [manifest, setManifest] = useState(undefined) - const [isRarFile, setIsRarFile] = useState(false) - const [error, setError] = useState< - { code: `unknown` | `fileNotSupported` } | undefined - >(undefined) - const getRarManifest = useGetRarManifest() - - useEffect(() => { - setManifest(undefined) - setError(undefined) - setIsRarFile(false) - }, [bookId]) - - useEffect(() => { - ;(async () => { - if (bookId) { - try { - const response = await fetch( - `${window.location.origin}/streamer/${bookId}/manifest` - ) - - if (response.status === 415) { - // try to get manifest if it's a RAR - const rarResponse = await getRarManifest(bookId) - - if (rarResponse) { - setIsRarFile(true) - const data = rarResponse - const newManifest = getNormalizedManifest(data) - - Report.log(`manifest`, data) - - setManifest(newManifest) - } else { - setError({ code: `fileNotSupported` }) - } - } else { - const data: Manifest = await response.json() - const newManifest = getNormalizedManifest(data) - - Report.log(`manifest`, data) - - setManifest(newManifest) - } - } catch (e) { - Report.error(e) - setError({ code: `unknown` }) - } - } - })() - }, [bookId, getRarManifest]) - - return { manifest, error, isRarFile } -} - -const getNormalizedManifest = (data: Manifest): Manifest => { - const { direction } = directives.extractDirectivesFromName(data.filename) - - return { - ...data, - readingDirection: direction - ? direction - : data.filename.endsWith(`.cbz`) - ? "rtl" - : data.readingDirection - } -} diff --git a/packages/web/src/reader/states.ts b/packages/web/src/reader/states.ts index e62091d4..0df92381 100644 --- a/packages/web/src/reader/states.ts +++ b/packages/web/src/reader/states.ts @@ -1,5 +1,5 @@ import { createReader, Manifest } from "@prose-reader/core" -import { EMPTY, filter, map, of, switchMap, tap } from "rxjs" +import { filter, switchMap } from "rxjs" import { hammerGestureEnhancer } from "@prose-reader/enhancer-hammer-gesture" import { Props as GenericReactReaderProps } from "@prose-reader/react" import { isDefined, signal, useForeverQuery, useSignalValue } from "reactjrx" @@ -41,18 +41,18 @@ export const usePagination = () => queryFn: () => { return readerStateSignal.subject.pipe( filter(isDefined), - switchMap((reader) => reader.pagination$) + switchMap((reader) => reader.pagination.paginationInfo$) ) } }) export const useCurrentPage = () => { const reader = useSignalValue(readerStateSignal) - const { data: { beginPageIndexInChapter, beginSpineItemIndex } = {} } = + const { data: { beginPageIndexInSpineItem, beginSpineItemIndex } = {} } = usePagination() const { renditionLayout } = reader?.context.getManifest() ?? {} - if (renditionLayout === "reflowable") return beginPageIndexInChapter + if (renditionLayout === "reflowable") return beginPageIndexInSpineItem return beginSpineItemIndex } @@ -60,10 +60,10 @@ export const useCurrentPage = () => { export const useTotalPage = () => { const reader = useSignalValue(readerStateSignal) const { renditionLayout } = reader?.context.getManifest() ?? {} - const { data: { numberOfTotalPages, beginNumberOfPagesInChapter } = {} } = + const { data: { numberOfTotalPages, beginNumberOfPagesInSpineItem } = {} } = usePagination() - if (renditionLayout === "reflowable") return beginNumberOfPagesInChapter + if (renditionLayout === "reflowable") return beginNumberOfPagesInSpineItem return numberOfTotalPages }