* first attempt
* first attempt
* added first useNovel tests
* more tests
* more tests
* resolved all test issues
* added test-utils
* add a few component tests
* add TESTIGN.md
* add testing gh action
* fixed minor issues
* fixed minor issues
Replace expo-notifications based TTS controls with a native
NativeTTSMediaControl TurboModule using Android's MediaSessionCompat
and MediaStyle notification. This provides proper media integration
with lock screen controls, cover art display, and seekbar.
- Add NativeTTSMediaControl Kotlin TurboModule with MediaSession
- Support Prev, Rewind, Play/Pause, Next notification buttons
- Show novel cover as notification album art
- Add seekbar with seek-to-element support
- Replace MMKV polling with NativeEventEmitter for instant response
- Add rewind and seekTo methods to TTS in core.js
- Clean up expo-notifications TTS setup from App.tsx
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* added .jj to .gitignore
* chore: Add drizzle-orm and drizzle-kit dependencies to package.json and pnpm-lock.yaml
* update debs
* Edit configs
* create drizzle schema
* generate drizzle migration
* db manager stuff
* Delete unused files
* Update DB Manager
* Rework CategoryQueries and related
* rewrite chapterQueries
* Type safety for chapter order and filter
* Better filter handling
* added queue
* added back database triggers
* Refactor HistoryQueries and LibraryQueries
* fix type issues
* refactor StatsQueries
* refactor NovelQueries
* renamed schemas
* refactor more db calls
* refactor libraryUpdateQueries
* removed deprecated code
* added extracted queries
* fix updates screen issue
* change to op-sqlite
* Update manager.ts
* Update RepositoryQueries
* update packages
* Update NovelQueries
* Update CategoryQueries.ts
* db testing environment v1 (AI)
* Refactor App component to use Suspense for loading state and update database initialization logic. Change drizzle-orm version to 0.45.1 and adjust related database queries for improved error handling and async operations. Clean up unused code and update types for better type safety.
* updated tests
* change db location to default expo-sqlite location
* fix async/sync bugs
* resolve rebase problems
* Added tests for db creation + migration
* update drizzle
* add missing journals to migrations.js
* wrap testDbManager in Proxy to be async
* add db initialization test
* fix lint errors
* improved dbManager.batch function
* remove unused file
* fix rebase conflicts
* use getColumns instead of getTableColumns
* fix lint errors
* fix release build not being able to start
* remove disable lint rule
* improved useLiveQuery
* Resolve issue with the db queue constructor options
* Fix database query issues in library and stats
- Add missing await to all stats query functions
- Remove unnecessary type casts on query results
- Fix downloaded-only filter to use gt(0) instead of eq(1)
---------
Co-authored-by: CD-Z <github.verify097@passmail.com>
LegendList's extraData only included downloadingChapterIds, so chapter
items weren't re-rendered when selection state changed via long press.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Decouple selection state from renderScene via SelectionContext to prevent
all TabView tabs from re-rendering on every selection toggle. Extract
LibraryNovelItem as a memo-wrapped component with stable callbacks and
primitive props so only affected items re-render. Replace O(n) array
lookups with Set-based O(1) checks throughout. Memoize all inline
closures, list furniture, and style objects. Fix library[index] bug that
used the wrong array for "Update Category" menu action.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Fixes initial render height jump by adding initialLayout with window dimensions to TabView. Removes shadow flash on tab switch by setting elevation to 0 and adding consistent border styling.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Optimize Novel screen components with useCallback, useMemo, and memo to prevent unnecessary re-renders
- Replace download queue array iteration with downloadingChapterIds Set for O(1) lookups
- Add loading shimmer to chapter count display (replaces "Loading..." text)
- Fix state mutation bug in useNovel updateChapter (now creates new array)
- Refactor ChapterItem API (onDeleteChapter, onDownloadChapter props for better stability)
- Track download completion via useEffect to update chapter isDownloaded state
- Fix pagination control logic and improve spacing
- Remove unnecessary local state in ChapterDownloadButtons
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Synchronous TurboModule methods throwing IOException (FileNotFoundException)
crash the app process before JS catch blocks execute. Wrap file I/O in
try/catch to convert IOException to Exception for proper bridge serialization,
breaking the crash loop caused by stale tasks in the MMKV queue.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace expo StorageAccessFramework.readAsStringAsync with NativeFile
copyFile+readFile to properly handle content:// URIs from DocumentPicker.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Use content:// URI directly instead of copying to cache directory, which
could be cleaned up by the system before the background import task runs.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* updated debs
* Jump to chapter now loads not preloaded chapters
* chapter drawer scrolls to current chapter
* Load new chapters when reaching end of chapter drawer
* fix JumpToChapterModal rebase
* fix Chapter drawer current chapter position detection
---------
Co-authored-by: CD-Z <github.verify097@passmail.com>
This is a cherry-pick from @IstarVin’s PR #1558. Thanks for the fix and for contributing. I cherry-picked it for the next release since the original PR had merge conflicts.
feat(tts): refactor reading logic and add new settings (voice, speed, pitch, auto page advance)
- Improved how TTS reads page content for smoother playback
- Added settings for voice selection, speed, and pitch control
- Added auto page advance support
- Added scroll-to-top behavior after advancing pages
- Updated UI to expose new TTS configuration options
[skip ci]