[pull] master from lnreader:master - #2
Open
pull[bot] wants to merge 180 commits into
Open
Conversation
* install the correct version of the hermes compiler * update node version of gh workflows
* migrate to rock * Update build.yml * Update build.yml again and changed build.gradle * fixed actions build crash * add flashlist to avoid bottomsheet crash * fix Novelscreen filter highlight * upload artifact * update rock config * update build.yml apk path * update rock.config again * Test env file * Update build.yml * remove react-native-config * Update to use split apk and enable custom rock provider paths. * added upload artifact * remove split apk * remove test env
) * fix: Apply active filters to chapter count display (Closes #1793) getChapterCount was always returning the total count regardless of the active filter. When filtering by unread/downloaded/bookmarked, the count shown in the novel header stayed the same as the total. Added an optional filter parameter to getChapterCount and pass the current settingsFilter from useNovel so the displayed count matches the filtered chapter list. * fix lint warning and add tests for filtered chapter count - Use settingsFilter instead of novelSettings.filter in useNovel to fix the react-hooks/exhaustive-deps warning - Add tests for getChapterCount with filter parameter - Update chapterFilterToSQL mock in test setup to actually apply filter conditions so filtered count tests work correctly
* chore: ignore *.tsbuildinfo build cache * chore: stop tracking tsconfig.tsbuildinfo build cache
The plugin row sits inside a react-native-gesture-handler Swipeable but used the React Native Pressable, whose JS responder lost mouse-derived tap events on WSA. Switch to the gesture-handler Pressable so taps share the same responder system as the surrounding Swipeable.
* init * feat: add zustand dependency and persistence key contract * refactor: extract bootstrap data loading into reusable service * refactor: move chapter mutations into store-ready action helpers * feat: add zustand novel store with cache and core actions * refactor: bridge novel persistence contracts for migration safety * refactor: migrate NovelScreen domain flows to zustand selectors * refactor: migrate NovelScreenList to selector-based store access * refactor: move reader chapter flows onto store boundaries * refactor: decouple useNovelSettings from broad context domain state * refactor: align migrateNovel with stable persistence contracts * refactor: cut novel-reader consumers to store-only context boundary * refactor: retire legacy useNovel and route cache cleanup export * test: update suites for store-only context boundary cutover * test: modernize store-era mocks and add contract coverage * test: finalize Task-15 sweep—remove dead useNovelData and lint clear mocksContract Final validation confirms mock-contract test suite clean and target file deletion verified with zero stale references in src/ scope. * remove imports from NovelScreen * reworked ai output * improvements * implemented synchronus novel and chapter fetch * refactor tests * fix db tests * Update remaining tests. * Harden chapter actions and bootstrap flows * Only count filtered chapters * improved chapter insert speed by optimizing triggers * Improved the batching function * Added drizzle support to dbManager.batch * removed better-sqlite3 for testing * fix tests * Update updateNovelChapters fucntion * reverse read filter * fix snackbar * fixed page bottomsheet * resolved paged novels showing wrong chapter number on opening * use openPage instead of setPageIndex in chapterDrawer * fix lint & tests * fix type issues * fix various smaller issues * updated novel restore * Delete tsconfig.tsbuildinfo
* use new ids * refactor in appearance settings * fix lint * remove setThemeMode from handleThemeSelect * fix type logic * use context for theme * shorten animation * adjusted LanguagePickerModal * Fix Accent Color picker * fix bottom navigation coloring * log error instead of crashing when no theme context is available
fix:await db write operations in transactions
…1830) - patches/@rock-js__plugin-metro@0.12.12.patch: wrap absolute paths in pathToFileURL() so dynamic imports work on Windows - pnpm-workspace.yaml: register the patch and pin nodeLinker: hoisted - pnpm-lock.yaml: lock the patched version with hash - android/settings.gradle: invoke npx.cmd on Windows for rock autolink
…1832) fix(native-file): prevent crash when unlinking missing files NativeFileSpec.unlink is codegened as a void-returning TurboModule method, which dispatches asynchronously on the mqt_v_native thread. Throwing "File does not exist" there bypasses every JS try/catch and surfaces as a fatal AndroidRuntime exception, killing the process. Make unlink idempotent (POSIX rm -f semantics): no-op when the path does not exist. The Downloads "delete all" and individual delete flows previously crashed whenever a chapter row had isDownloaded=true while its on-disk folder had already been removed (e.g. after backup restore or external cleanup). The same fix also protects useNovel, pluginManager, fetch, epub/import, backup/local, backup/utils, and AdvancedTab call sites that share the same native handler.
…etMeta (#1873) fix(service): correct notification throttle in ServiceManager.setMeta
* Remove pointless break-lines (just use soft wrap to view this file) * Encase the table in a div
* feat(downloads): make chapter download cooldown configurable The chapter download service used a hard-coded 1s sleep between sequential chapter writes. That worked as a polite default but is either too long for users with patient sources or too short for sources that 429 on tight loops. Surface the value as a single global setting instead. - AppSettings.chapterDownloadCooldownMs (optional, ms) - getChapterDownloadCooldownMs(): synchronous fallback used by the background task runner; returns the historical 1000ms when the user has not configured an override (no regression on upgrade) - downloadChapter.ts: sleep(getChapterDownloadCooldownMs()) replaces the previous hard-coded sleep(1000) - New "Chapter download cooldown" entry in General Settings, placed directly above "Disable haptic feedback". Tapping opens a modal that takes seconds (decimal allowed) and writes back as ms - The input is sanitised on every keystroke to digits + a single decimal point so paste / hardware keyboard input cannot smuggle in non-numeric characters - Reset writes the default explicitly so the user sees feedback even when the override happened to equal the default * feat(downloads): warn about source rate limits in cooldown modal Per review feedback (#1834): the cooldown modal should make the trade-off explicit so users don't lower the value below what their sources can take. Add a single error-coloured line under the input.
* feat: implement scanlator filtering * fix test
* feat(reader): add search button and search input for word search * fix(reader): make keyboard close on hideHeader * chore(reader): format reader files * chore(strings): regenerate string types * feat(reader): add chapter word search * fix(reader): improve chapter search reliability * fix(reader): hide ReaderFooter when search is open * fix(reader): add support for search in bionic reading mode * fix(reader): localize chapter search placeholder * feat(reader): block short word search queries * feat(reader): make android back button exit search * feat(reader): add exception for special character search * refactor(reader): split chapter search script from core
fix: reader being reset when reader settings change
* refactor: Restructure Application Architecture * feat: Support Batched Downloads And EPUB Imports * feat: Add Download Checkpoint Recovery
* 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
* 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>
fix: TTS continues playing during incoming and outgoing phone calls Implement audio focus handling for TTS playback on Android, including support for request and abandonment during playback and transient interruptions. Closes #1975
) The novel detail header rendered its cover with a bare { uri } source, so plugins whose cover CDN requires request headers (e.g. RanobeLib's cover.cdnlibs.org, which 403s without a Referer) showed no cover on the novel detail screen even though covers worked in browse/library lists. Mirror the LibraryListView pattern: fetch getPlugin(novel.pluginId)? .imageRequestInit and attach its headers to the cover source.
rajarsheechatterjee
force-pushed
the
master
branch
from
August 11, 2026 09:22
9e3ef92 to
3ac611f
Compare
…Overlap (#1971) * fix * Update pnpm-lock.yaml * fix tests
* 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
Add tests covering NovelScreenButtonGroup category assignment flows to ensure the library is refreshed and the novel state is updated when needed.
Increased maximum text size limit in Reader component, and settings page
* Add native share intent handling module * Handle shared URLs via intent handler * i18n: add global search and novel error strings Generated with omp (AI coding agent) * novel store: track bootstrap failures as user-facing errors Bootstrap failures no longer surface raw plugin/DB errors; missing novels map to a custom not-found message. Generated with omp (AI coding agent) * novel screen: render error view when bootstrap fails Shows a custom error with a back action instead of a blank screen, and hides the appbar actions in the error state. Generated with omp (AI coding agent) * global search: never auto-navigate or search URL text URLs are handled by the screen's explicit submit flow; navigation and search stay out of the hook. Generated with omp (AI coding agent) * global search: add animated open-novel FAB with clipboard offer Submit or FAB tap opens a matching URL's novel; unmatched URLs toast. The FAB floats above the keyboard via keyboard-controller and slides in from the right. Generated with omp (AI coding agent) * fix review issues * fix rebase issue
… Is Missing Guards against undefined/null chapterName and novelName so parseChapterNumber no longer throws "Cannot read property 'toLowerCase' of undefined" when rendering the Updates screen. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011WW3AHpNPxoRVsbAMVRX6T
rajarsheechatterjee
force-pushed
the
master
branch
from
September 3, 2026 00:46
bb77f5b to
158786c
Compare
rajarsheechatterjee
force-pushed
the
master
branch
from
September 7, 2026 15:13
fd09c4b to
93209ab
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
See Commits and Changes for more details.
Created by
pull[bot] (v2.0.0-alpha.4)
Can you help keep this open source service alive? 💖 Please sponsor : )