49 Commits

Author SHA1 Message Date
trietng 1607f80a0a feat: Add Volume Button Navigation and Slide Animation Settings for Paged Reading (#2058)
* feat: volume navigation and disable animation settings for paged reading

* fix: transition style removal

* fix: pageReader incorrect initialization

* fix: remove unneeded check

* chore: update Vietnamese translations for paged reading settings
2026-09-26 20:40:43 +05:30
Rajarshee Chatterjee d40713ac99 feat: Improve Custom Code UX 2026-09-23 10:41:38 +05:30
Rajarshee Chatterjee a12cba030d fix: Skip Dash-Only TTS Dividers 2026-09-15 13:38:39 +05:30
Rajarshee Chatterjee 4b580c90ef fix: Prevent TTS From Speaking Surrounding Quotes (Closes #2008) 2026-08-29 11:41:59 +05:30
Rajarshee Chatterjee 5a0717d2c7 fix: Prevent Duplicate TTS Text From Nested Formatting (Closes #1994) 2026-08-18 11:50:06 +05:30
Ahjie521 eb310f7821 feat: Add Empty Chapter Refresh in Reader (#1978)
* feat(reader): swipe down to re-fetch a chapter, never cache empty responses

- pull down at the top of a chapter to re-fetch it, recovering from
  transient empty responses without leaving the reader
- empty responses are evicted from the chapter cache so a refresh
  re-fetches instead of replaying the empty message
- add a refresh button to the reader's bottom bar and a 'Refresh
  chapter' link on the empty-chapter message
- register the typescript-eslint plugin and ignore assets/ in the
  eslint flat config so lint-staged can lint core.js

* feat(reader): move refresh option to appbar menu
2026-08-16 07:36:41 +05:30
Patrick Loser 64707409bb feat: Create Dedicated Custom Code Settings Page V2 (#1902)
* init

* text modification without webview rerender

* Fix SettingsReaderScreen

* remove unneeded

* solve ts issue

* add tests

* Add KeyboardProvider

* Update SimpleCodeEditor.tsx

* fix ts error

* add types package

* reworked SimpleCodeEditor

* Preserve highlightmode

* Update SimpleCodeEditor.tsx

* performance improvement

* simplified

* fix tsc

* fix alignment issues

* load current snippet into example view

* Merge branch 'master' into custom-code-clean

* fix type + lint

* Resolve can't read property id of undefined error

---------

Co-authored-by: Rajarshee Chatterjee <rajarshee.adm@gmail.com>
2026-08-11 07:09:52 +05:30
Rajarshee Chatterjee cbe7d70e2d fix: Restore Collapsed TTS Button Interaction
[skip ci]
2026-07-26 15:08:02 +05:30
Rajarshee Chatterjee 6548e9a6f8 fix: Improve Paged Reader Layout and Performance
Closes #1721
2026-07-26 15:07:46 +05:30
Rajarshee Chatterjee 93fe04c28c feat: Polish Reader Controls And Navigation
[skip ci]
2026-07-25 18:16:08 +05:30
Rajarshee Chatterjee c9358b3a9f feat: Update Android Branding Assets 2026-07-25 15:52:13 +05:30
Rajarshee Chatterjee 67d2c7c01b feat: Add Collapsible TTS Controls And Stable Notification Progress
[skip ci]
2026-07-25 14:47:36 +05:30
Rajarshee Chatterjee 7af0911f5b feat: Add High-Resolution Android Flavor Assets
[skip ci]
2026-07-25 11:54:21 +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 4dcf213037 fix: Restore Reader Changes Reverted During Expo Migration
[skip ci]
2026-07-25 09:20:13 +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 0a2a6c96ca feat: Add Variant-Specific Android Splash Screens
[skip ci]
2026-07-24 14:59:28 +05:30
Rajarshee Chatterjee 1322065290 feat: Add Variant-Specific Android App Icons 2026-07-24 13:18:44 +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
Patrick Loser c3c891cea0 refactor: Migrate to Expo Managed Workflow (#1885)
* enable predictive back gesture

* upgrade to rn 85

* remove deprecated

* added timeout to theme switch

* fix plugin items hit registration

* fix SearchbarV2 hit registration

* fix loading spinner

* migrated to expo

* migrated to expo

* Fix reader footer animation

* working again

* added icons back

* added splashscreen

* clean up

* nitro epub

* fix

* remove .env.local from git tracking

* fix rn background actions not working

* moving custom permissions to app.json

* more cleanup

* fix epub import

* remove unused deps

* Further cleanup for gradle build types

* Update build.yml

* ignore android/ and ios/ as they are generated by CNG

* fix lint

* Delete ios directory

* Delete android directory

* fix lint

* fix test mocks

* update packages

* update eslint

* fix ThemeProvider placement

* fix test and lint

* Add BackgroundTask native module

* Add NativeFile changes

* first round of fixing compatibility issues

* added types for native modules
2026-07-22 23:29:53 +05:30
Rajarshee Chatterjee c40edd5b2c feat: Add Kitsu Tracker (Closes #416) 2026-01-25 14:50:17 +05:30
Rajarshee Chatterjee c06d6f9326 feat: Add MangaUpdates Tracker (#1613)
* feat: Add MangaUpdates Tracker

* refactor: Migrate Tracker Components to TypeScript
2025-10-22 12:46:50 +05:30
nyagami 420603f911 Replace Redux thunk by react native MMKV (#893)
* refactor: useBoolean hook

* refactor: useGithubUpdateChecker hook

* refactor: move showToast to utils

* refactor: useBackHandler hook

* refactor: useTextToSpeech hook

* refactor: useDeviceOrientation hook

* refactor: usePreviousRouteName hook

* refactor: useFullscreenMode hook

* refactor: useSearch hook

* refactor: useTheme hook

* fix: remove updates reducer

* refactor: useCategories hook

* refactor: useHistory hook

* refactor: useLibrarySettings hook
remove unused useCategories hook

* fix: reanimated version for expo

* refactor: library, chatper hooks

* refactor: app, browse settings hooks

* refactor: usePlugins hook

* fix: max depth in useEffect, plugins state logic

* feat: add Anilist tracker

* refactor: useTracker hook

* useTrackedNovel hook

* minor fixs

* refactor: useNovel hook

* minor fix: book mark button

* refactor: useDownload hook

* fix: migrate function

* remove redux + cleanup

* update node version for build

* fix: download Queue, migrate action

* fix: increaes hit slop for thumb, add reader playground

* fix: plugins not updated when installing while searching

* fix: safe plugin management

* Squashed commit of the following:

commit 51968f66bdd69f28f1863b5668f9511ba53c3fff
Author: Nyagami <hoangquan05112002@gmail.com>
Date:   Sat Jan 13 13:20:33 2024 +0700

    better logic for download progress bar

commit 5069de11644e7aece39efc73dfd80d093982b032
Author: Nyagami <hoangquan05112002@gmail.com>
Date:   Sat Jan 13 13:14:33 2024 +0700

    fix: delete BACKGROUND_ACTION in finally clause

commit 181103e994831da6744d122faaa60c48da529a63
Author: Nyagami <hoangquan05112002@gmail.com>
Date:   Sat Jan 13 13:10:56 2024 +0700

    update react-native-background-actions
2024-01-13 14:28:24 +05:30
Rajarshee Chatterjee b947ec2665 Update splash screen and delete old assets 2021-10-10 21:05:21 +05:30
Rajarshee Chatterjee 40f1495cf1 Add webview option to support tables and original text style 2021-07-28 11:46:57 +05:30
Rajarshee Chatterjee b695f57ef4 Refactor 2021-07-19 09:32:48 +05:30
Rajarshee Chatterjee a7f6d2cd3c Fix sources 2021-06-27 10:51:27 +05:30
Rajarshee Chatterjee 4e4f02c5e6 Add Novel Updates 2021-06-09 12:50:47 +05:30
Rajarshee Chatterjee d5b3915ef1 Minor fixes 2021-05-31 21:20:17 +05:30
Rajarshee Chatterjee cb05231335 Group updates and history by date 2021-05-28 10:30:07 +05:30
Rajarshee Chatterjee 7819c7dcdb Add selecting chapters logic 2021-05-27 10:37:43 +05:30
Rajarshee Chatterjee f4fc3d096f Refactor NovelHeader 2021-05-17 09:50:01 +05:30
Rajarshee Chatterjee 67096eb1ff Add library sort/filter sheet and notification icon 2021-05-14 18:30:15 +05:30
Rajarshee Chatterjee 3a156f32a0 Save scroll percentage and add new theme 2021-05-14 12:03:32 +05:30
Rajarshee Chatterjee 555552a64d Update app icon and splash screen 2021-05-14 09:14:31 +05:30
Rajarshee Chatterjee 2170b77607 Add swipe to mark chapter read/ bookmark logic 2021-05-12 10:00:46 +05:30
Rajarshee Chatterjee 6e85909f6f Finish mal tracking and refactor 2021-04-29 20:36:32 +05:30
Rajarshee Chatterjee f4c0a647fb Add fonts in reader 2021-04-26 17:02:36 +05:30
Rajarshee Chatterjee c538bf4956 Add logo in more screen 2021-04-26 12:06:59 +05:30
Rajarshee Chatterjee 4c326e35c0 Add updating a novel 2021-03-23 21:11:57 +05:30
Rajarshee Chatterjee 419420efd1 Add items per row settings 2021-03-23 18:34:58 +05:30
Rajarshee Chatterjee aabac2189e Update app icon 2021-03-09 09:35:58 +05:30
Rajarshee Chatterjee 030e1ca041 Update project structure 2021-03-09 06:35:38 +05:30
Rajarshee Chatterjee 4661e4a42f Refactor novel header 2021-01-02 13:51:05 +05:30
Rajarshee Chatterjee 40dfebe964 Break into components 2020-12-30 12:43:58 +05:30
Rajarshee Chatterjee e387453aec Remove source covers fromm assets 2020-12-27 22:00:05 +05:30
Rajarshee Chatterjee c35df16bdb Add multi sources 2020-12-27 16:07:28 +05:30
Rajarshee Chatterjee 0ca0d79968 Add screens, custom font, navigation 2020-12-23 21:21:29 +05:30
Rajarshee Chatterjee a44c554c4c Created a new Expo app 2020-12-23 09:47:25 +05:30