readest/apps
Huang Xin 93048acda9
Some checks are pending
CodeQL Advanced / Analyze (actions) (push) Waiting to run
CodeQL Advanced / Analyze (javascript-typescript) (push) Waiting to run
CodeQL Advanced / Analyze (rust) (push) Waiting to run
Publish Docker image / build (linux/amd64, ubuntu-latest) (push) Waiting to run
Publish Docker image / build (linux/arm64, ubuntu-24.04-arm) (push) Waiting to run
Publish Docker image / merge (push) Blocked by required conditions
PR checks / rust_lint (push) Waiting to run
PR checks / build_web_app (push) Waiting to run
PR checks / test_web_app (1) (push) Waiting to run
PR checks / test_web_app (2) (push) Waiting to run
PR checks / test_extensions (push) Waiting to run
PR checks / build_tauri_app (push) Waiting to run
Scorecard supply-chain security / Scorecard analysis (push) Waiting to run
Deploy to vercel on merge / build_and_deploy (push) Waiting to run
fix: Sentry high-priority crash batch (autoscroll, TTS, MOBI, book-open, PDF links) (#5012)
* fix(tts): guard highlight-follow against empty contents and null range

handleHighlightMark runs as a synchronous 'tts-highlight-mark' listener, so
any exception it throws escapes dispatchSpeakMark's try/catch to window.onerror.

Two unguarded dereferences crashed there on Readest@0.11.18:
- getContents() is empty mid-relocate (section still loading, or the view was
  torn down), so `find(...) ?? [0]` is undefined and destructuring `doc` throws
  (READEST-19).
- resolveCFI's anchor(doc) can return null when the cfi does not resolve in the
  doc; the null range then crashed foliate's scrollToAnchor (it reads
  range.startContainer) or getBoundingClientRect in scrolled mode (READEST-21).

Bail out early in both cases. Adds three regression tests.

Fixes READEST-19
Fixes READEST-21

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix(reader): handle book-open failures instead of leaking a rejection

appendBook and openBookInReader call initViewState fire-and-forget. When the
book is missing (initViewState rejects with "Book not found" after a library
reload dropped the in-memory entry) the rejection had no handler and surfaced as
an unhandled rejection (READEST-1V). ReaderContent already catches its own
initViewState call; mirror that here with a toast so the user learns the open
failed. Adds a regression test.

Fixes READEST-1V

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix(reader): bump foliate-js for scrolled autoscroll and PDF link fixes

Bumps foliate-js to readest/foliate-js#52:
- FixedLayout exposes a writable containerPosition in scroll mode, so Auto
  Scroll (#4999) and middle-click autoscroll (#4951) stop crashing on PDF /
  CBZ / fixed-EPUB books read in scrolled mode (READEST-11).
- The pdf.js annotation linkService implements getAnchorUrl, so PDFs with
  named-action / GoTo link annotations no longer reject the render with
  "getAnchorUrl is not a function" (READEST-2M).

Adds a regression test asserting the FixedLayout containerPosition setter exists.

Fixes READEST-11
Fixes READEST-2M

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix(mobi): contain panics from the mobi crate when reading a cover

mobi::Mobi::image_records() slices raw record bytes and panics on a truncated or
corrupt file whose PDB record offsets are inverted ("slice index starts at N but
ends at M", READEST-1Q / READEST-10). extract_cover ran it inside a
spawn_blocking task, so the panic unwound and failed the whole parse_mobi_metadata
import. Wrap the extraction in catch_unwind so a bad cover yields no thumbnail
instead of a failed import (and never unwinds across the task boundary). Adds
unit tests for the panic isolation.

Fixes READEST-1Q
Fixes READEST-10

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-08 15:08:24 +02:00
..
readest-app fix: Sentry high-priority crash batch (autoscroll, TTS, MOBI, book-open, PDF links) (#5012) 2026-07-08 15:08:24 +02:00
readest-calibre-plugin feat(calibre): add Readest calibre plugin to push books and metadata (#4918) 2026-07-04 16:40:16 +02:00
readest.koplugin perf(koplugin): defer and cache Library group covers (#4954) (#4974) 2026-07-06 17:55:51 +02:00