1088 Commits

Author SHA1 Message Date
Rajarshee Chatterjee 7ddd934c2b fix: Handle Missing Tracker Client IDs 2026-07-26 22:46:23 +05:30
Rajarshee Chatterjee b53c91f748 chore: Separate Jest And Type Check Workflows 2026-07-26 22:33:56 +05:30
Patrick Loser 8b0a8dc4c0 chore: Update Husky Pre-Commit and Pre-Push Hooks 2026-07-26 22:22:38 +05:30
Patrick Loser 72bfcad034 fix: Resolve Type and Lint Issues 2026-07-26 22:22:24 +05:30
Rajarshee Chatterjee 345d084eba feat: Add Chapter Numbers To EPUB Titles (Closes #1405) 2026-07-26 21:07:04 +05:30
Rajarshee Chatterjee 10b6042a9c feat: Add EPUB Export Progress Notifications
Closes #799
2026-07-26 20:53:25 +05:30
Rajarshee Chatterjee bd71611725 feat: Improve Chapter Drawer And WebView App Bar 2026-07-26 20:26:34 +05:30
Rajarshee Chatterjee 8f53550d2c fix: Restore Tracker Search Requests 2026-07-26 19:42:48 +05:30
Rajarshee Chatterjee 52914b978d fix: Migrate Volume Button Events to Expo Listener API 2026-07-26 18:41:47 +05:30
Rajarshee Chatterjee e62868b82c feat: Automate Draft Android Releases
[skip ci]
2026-07-26 18:27:18 +05:30
Rajarshee Chatterjee 97be48dfe1 feat: Add Migration Review Options
Closes #1037
Closes #937
2026-07-26 15:44:09 +05:30
Rajarshee Chatterjee 6548e9a6f8 fix: Improve Paged Reader Layout and Performance
Closes #1721
2026-07-26 15:07:46 +05:30
Rajarshee Chatterjee 138fdff2e5 fix: Prevent Duplicate WebView Bottom Insets
Closes #1757
2026-07-26 14:35:44 +05:30
Rajarshee Chatterjee f1dd4b77a8 feat: Improve Empty Chapter Reporting
[skip ci]
2026-07-26 14:19:37 +05:30
Rajarshee Chatterjee 5cf7e15d76 feat: Add Reader Setting Descriptions 2026-07-26 12:59:53 +05:30
Rajarshee Chatterjee 6a7e90c179 fix: Align Advanced Reader Tabs And Localize Actions 2026-07-26 12:55:39 +05:30
Rajarshee Chatterjee 99c31d56bb fix: Use MD3 Outline Variant For Tab Borders 2026-07-26 12:38:39 +05:30
Rajarshee Chatterjee 4d98247980 feat: Add Android DNS Over HTTPS Support
[skip ci]

Closes #478
2026-07-26 00:23:07 +05:30
Rajarshee Chatterjee 164f5d2592 feat: Add Automatic Library Update Scheduling
Closes #13
Closes #953
2026-07-25 20:48:37 +05:30
Rajarshee Chatterjee 89cddf9e3d fix: Expand Discover Row Ripple 2026-07-25 20:34:30 +05:30
Rajarshee Chatterjee eac6ad584e feat: Improve Novel App Bar And EPUB Export UX
[skip ci]
2026-07-25 19:15:43 +05:30
Rajarshee Chatterjee 93fe04c28c feat: Polish Reader Controls And Navigation
[skip ci]
2026-07-25 18:16:08 +05:30
Rajarshee Chatterjee c30441b949 feat: Add Smart Library Update Filters
Closes #423
2026-07-25 14:29:41 +05:30
Rajarshee Chatterjee 6d2a9f8e15 fix: Prevent Slider Flicker After Release 2026-07-25 14:13:25 +05:30
Rajarshee Chatterjee 799845426c feat: Add Parallel Library Updates Across Sources 2026-07-25 13:54:46 +05:30
Rajarshee Chatterjee 8ac628b3de fix: Improve History Removal Flow.
[skip ci]

Closes #885
2026-07-25 13:47:26 +05:30
Rajarshee Chatterjee d02291c22c feat: Remember Last Used Library Category
[skip ci]

Closes #1026
2026-07-25 12:21:53 +05:30
Rajarshee Chatterjee 098782d6aa refactor: Simplify Settings Layout And Theme Selection
[skip ci]
2026-07-25 11:23:41 +05:30
Rajarshee Chatterjee 732628c40b feat: Add Date Format And Relative Timestamp Settings.
Closes #834
2026-07-25 11:03:20 +05:30
Rajarshee Chatterjee 5e62c36a9b feat: Add Library Settings And Category-Based Global Updates
Closes #381
Closes #1423
Closes #1444
2026-07-25 10:48:39 +05:30
Rajarshee Chatterjee 3d102a52a7 perf(reader): Cut Chapter Open Latency and Reading-Time Re-Renders (#1899)
[skip ci]

* perf(reader): Cut Chapter Open Latency and Reading-Time Re-Renders

Opening a chapter blocked the first paint on work that is not needed to
show text, and mounted several heavy subtrees while that work was running.

Load path (useChapter):
- Render the chapter as soon as its text is ready. Resolving the next and
  previous chapter (two full-scan queries, plus a plugin page fetch over
  the network at a page boundary) now runs after the chapter is on screen
  and is pushed into the WebView instead of being baked into its HTML.
- Read downloaded chapters with a single native call instead of
  exists() + readFile(), and start that read in parallel with the
  database lookup instead of after it.
- Cache render-ready (sanitized) HTML, so prefetched chapters skip
  sanitize-html entirely, and prefetch when the JS thread is idle rather
  than in the middle of the current load.
- Drop failed loads from the cache so a retry actually retries.
- Guard every load with a generation id, keep getChapter and friends
  referentially stable, and defer history/last-read writes off the
  critical path.

Mounting:
- The chapter drawer (a list of every chapter) and the settings sheet
  (a tab view that enumerates TTS engines and voices) are mounted on
  first use instead of at reader open; the sheet's tabs are lazy.
- The loading skeleton shimmers its first lines only instead of
  animating a full screen of gradient views.

While reading:
- Progress and mark-as-read writes keep the chapter array identity when
  nothing changed, and a chapter is marked read (and pushed to the
  tracker) once instead of on every progress report.
- Drawer rows are a memoized component with stable props, the drawer
  stylesheet is memoized, and the WebView document is built once per
  chapter instead of on every reader re-render.

Also fixes the drawer's loading branch, which compared a ref object to
undefined and was therefore unreachable, and guards page-reader
transitions against a not-yet-resolved neighbour.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ac6DNTqrKqsQjbdMSmU3nm

* perf(reader): Stop Double-Parsing the Chapter and Cut Per-Frame Work

Follow-up to the previous pass, mostly inside the reader document itself.

Chapter open:
- The chapter body was written back into the DOM on every open. The
  document already arrives with the chapter parsed, so unless bionic
  reading or paragraph-spacing removal is on, that re-parsed and
  re-laid-out the whole chapter (and restarted image loads) for nothing.
  It now only writes when the transformed markup actually differs.
- The reading position was restored from `window.load` via
  `document.fonts.ready`, both of which wait for every image in the
  chapter - measured at ~1.5s with a single slow image, during which the
  reader sat at the top of the chapter. It is now restored once the
  chapter is parsed and styled (~100ms in the same scenario) with an
  instant scroll, and corrected afterwards if fonts or images changed the
  height - but only while the reader is still where it was put, so it
  cannot yank the page from under someone already reading.

While reading:
- The scrollbar and the footer percentage each had their own unthrottled
  scroll listener recomputing the same ratio; they now share one
  listener coalesced to a frame. The footer clock no longer ticks state
  when the footer is hidden.
- Reading time is persisted without rebuilding the in-memory chapter
  list. It was rebuilt every few seconds for a field no screen renders -
  the statistics screen aggregates it from the database - and on Fabric
  react-navigation deliberately does not freeze the screen below the
  focused one, so it re-rendered the novel screen's chapter list too.
- `hidden` moved into its own context. It flips on every tap on the page,
  and a context value change re-renders all consumers, so the WebView,
  drawer, appbar and searchbar were all re-rendering for a flag only the
  reader screen reads.
- `openPage` no longer re-queries the chapter list when the requested
  page is already open, which the drawer does on every mount.

Smaller: the battery level is read asynchronously instead of through two
synchronous native calls per chapter, the sanitizer options object is
built once instead of per chapter, the general settings tab draws its
dozen fixed rows directly instead of virtualising them, and the reader
settings hook stops allocating a new settings object per render.

Verified the document changes by loading the real reader assets in
Chromium: position restored before load, no body rewrite when no
transform applies, both scroll indicators driven by the shared listener,
progress still reported, transforms still applied and reverted, and the
post-load correction only firing on an untouched reader.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ac6DNTqrKqsQjbdMSmU3nm

* perf(reader): Optimize Search Functionality with Caching and Batch Processing

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-07-25 10:47:58 +05:30
Rajarshee Chatterjee 4de82472ee fix: Resolve Require Cycles And LegendList Render Updates 2026-07-25 09:09:23 +05:30
Rajarshee Chatterjee 74808f086e feat: Replace Legacy Media Controls with Nitro-Powered Playback (#1896)
* feat: Replace Legacy Media Controls with Nitro-Powered Playback

* feat: Add TTS Engine Selection

* chore: Remove User-Facing Error Reporting

* refactor: Combine `Tts` and `TtsSession` Imports from `nitro-tts` Module

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-07-24 23:42:17 +05:30
Rajarshee Chatterjee 0c8546188e feat: Add MD3 Slider Component. 2026-07-24 22:16:17 +05:30
Rajarshee Chatterjee e9f6bdaa20 fix: Modernize Menu Styling And Outside-Tap Dismissal 2026-07-24 22:16:17 +05:30
Rajarshee Chatterjee 3d34658d0f feat: Add Material 3 Top Tab Indicators
[skip ci]
2026-07-24 22:16:17 +05:30
Rajarshee Chatterjee 17c891e133 refactor: Standardize Bottom Sheet UX and Styling
[skip ci]
2026-07-24 20:14:33 +05:30
Rajarshee Chatterjee 9805da63cf refactor: Optimize Novel Screen Performance And Architecture
[skip ci]
2026-07-24 17:07:06 +05:30
Rajarshee Chatterjee 916374b5df refactor: Reorganize Repository Structure
[skip ci]
2026-07-24 15:13:50 +05:30
Rajarshee Chatterjee 65e8610030 refactor: Replace Bottom Navigation Shift With Fade
[skip ci]
2026-07-24 13:40:41 +05:30
Rajarshee Chatterjee 22a1efd1e5 perf: Optimize React Native Skeleton Loading Components
[skip ci]
2026-07-24 13:00:51 +05:30
Rajarshee Chatterjee 4cb1890b62 feat: Add Nitro EPUB Exporter 2026-07-24 12:30:43 +05:30
Rajarshee Chatterjee a421177f0c fix: Improve Category Badge Layout And Drag Reordering
[skip ci]
2026-07-24 11:23:59 +05:30
Rajarshee Chatterjee a16ec87631 perf: Optimize Novel Covers, Lists, and Chapter Groups 2026-07-24 11:15:35 +05:30
Rajarshee Chatterjee dfd620aa29 feat: Standardize Dialogs with Material 3 Patterns 2026-07-23 23:05:53 +05:30
Rajarshee Chatterjee a5a6e8326f chore: Update @legendapp/list to 3.3.3 2026-07-23 22:08:26 +05:30
Rajarshee Chatterjee 7f48a8ba82 refactor: Improve Plugins Screen UX and Code 2026-07-23 21:44:01 +05:30
Rajarshee Chatterjee 44c8e54ed8 feat: Add Dynamic Material Theme Colors (Closes #1863) 2026-07-23 09:10:48 +05:30
Ecasept 4a4208e336 feat: Add Time-Tracking Toggle and Inactivity Timeout (#1890)
* feat: implement on-off switch and inactivity timeout for time-tracking

* chore: remove stray console.log
2026-07-23 09:10:14 +05:30
Rajarshee Chatterjee 8c38f499e4 chore: Update AppState Test Setup And pnpm Configuration 2026-07-22 23:54:22 +05:30