Skip to content

Theorem v1.5.5

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 14 Sep 12:32
· 31 commits to main since this release

Fixed

  • P2P Device Sync PDF On-Demand Downloads (Issue #89) — Fixed on-demand book download failures from paired devices for books imported on desktop. Enhanced FileTransferHandler::locate_book in src-tauri/src/file_transfer.rs to locate books across all local storage targets: materialized book-cache/{id}.book and book-cache/{id}, SQLite books.data BLOBs, book_metadata table entries (filePath, file_path, storagePath, storage_path), and the Zustand library state stored in SQLite kv_store (persist:theorem-library). Replaced in-memory whole-file buffering with zero-RAM-spike streaming from filesystem File handles to QUIC send streams via tokio::io::copy.
  • Cross-Page Text Highlighting in PDF and EPUB Readers (Issue #90) — In PDFAnnotationLayer.tsx, implemented sub-range clipping to textLayerNode with boundary point comparison so selections spanning across pages isolate text belonging strictly to each respective page. Filtered client rects to the page layer's physical bounding box (layerRect), preventing inverted coordinates on previous pages. Replaced immediate selection.removeAllRanges() with a deferred cleanup (80ms) to allow multiple intersecting page layers to capture their segment of a multi-page selection. In Reader.tsx, updated resolvePickerPosition() to anchor using the last client rect from Range.getClientRects() rather than getBoundingClientRect(), preventing popover menu offset across CSS multi-column paginated layouts.
  • Mobile Immersion Reading and Text-to-Speech on Android (Issue #91) — Handled null voice lists returned by Android's TextToSpeech.getVoices() in TtsAudioPlugin.kt (doSpeak, getVoices, synthesizeToFile) with currentTts.voices?.let { ... }, eliminating unhandled Kotlin NullPointerException crashes when defaultTtsSettings.voice is set. Enabled TTS by default in settingsStore.ts (defaultTtsSettings.enabled: true) and ensured onToggleImmersion is always available for non-PDF books in Reader.tsx, automatically enabling TTS when toggled. Allowed mobile users to access the voice and speed settings popup in ReaderNavbar.tsx on Android ((neuralReady || isAndroid())) to adjust narration speed (0.75×–1.5×).
  • Sync Gossip and Reading Progress Propagation (Issue #92) — Fixed a premature bailout in provisionToIrohDocs() (src/core/lib/sync-orchestrator.ts) where needsProvision evaluated to false after the first application launch, causing subsequent reading progress mutations and last read timestamps to skip docsSetEntry(). Removed the premature bailout so that per-key diffing against _provisionedValues runs on every sync round, correctly pushing modified progress, currentLocation, and lastReadAt timestamps to iroh-docs and triggering iroh-gossip propagation across connected peers. Updated defaultDeviceSyncSettings in settingsStore.ts to default autoSyncEnabled: true and syncOnConnect: true, migrating legacy configurations to schema version 12.

Download & install

Platform Download
Windows (x64) Theorem_v1.5.5_x64-setup.exe
macOS (Apple Silicon) Theorem_v1.5.5_aarch64.dmg
macOS (Intel) Theorem_v1.5.5_x64.dmg
Linux (Debian/Ubuntu) Theorem_v1.5.5_amd64.deb
Linux (any) Theorem_v1.5.5_amd64.AppImage
Android (arm64) app-arm64-release.apk

Linux one-liner: curl -fsSL https://raw.githubusercontent.com/Fundaments-Work/Theorem/main/scripts/install-linux.sh | bash

Desktop builds auto-update in place (Settings → About → Check for Updates). Android updates are manual unless installed via F-Droid.