Resolve conflicts: keep upstream GitHub workflows, adopt extension_store
migration as 46.sqm, move fork pages_read history column to 47.sqm, merge
DomainModule DI for ExtensionStore + fork features, and combine DE strings.
Co-authored-by: Cursor <cursoragent@cursor.com>
Add configurable library-update download modes (disabled, next X unread, all)
with settings UI and enqueue downloads after chapter sync completes.
Co-authored-by: Cursor <cursoragent@cursor.com>
Extract a single ETA estimator, refresh library badges when history changes,
and expose a history revision stream for reactive updates.
Co-authored-by: Cursor <cursoragent@cursor.com>
Introduce ReadingEtaPreferences and ReadingEtaLimits so library badges, reader series ETA, cross-manga history mining, and page-rate estimation share one configuration. Add reader settings sliders (EN/DE strings). Register preferences in PreferenceModule and wire GetCrossMangaPageRateHistorySamples.
Co-authored-by: Cursor <cursoragent@cursor.com>
- Cap per-chapter samples used for averages at 45m (stats only).
- Prefer session ms/page extrapolation for current chapter so cumulative
DB read time over revisits no longer blows up duration/progress.
- Floor uncertain page rates using conservative ms/page until enough samples.
- Shared defaults in ReadingEtaDefaults for reader + library badge.
Co-authored-by: Cursor <cursoragent@cursor.com>
Persist per-session pages read in history, include it in backup/restore, and prefer a page-based ETA model so chapter-length variance (especially webtoons) is reflected more accurately.
Co-authored-by: Cursor <cursoragent@cursor.com>
* feat: split "sync on add" into separate metadata and chapter fetch preferences
* refactor: remove redundant SnackbarHostState and error snackbars when auto sync entries
* clean other languages strings
* fix: add support for `EnhancedTracker` to merged sources
* ref: readability
* fix: use only sources specific to the merged title
* fix: don't match using name
* formatting
* don't block, suspend
* Move merged source out of EnhancedTracker
* Extract Injekt
* Return first accepted merged manga
* Move getMergedSources to SourceManager and update usages accordingly
* simplify code
---------
Co-authored-by: Cuong-Tran <cuongtran.tm@gmail.com>
Co-authored-by: Cuong-Tran <16017808+cuong-tran@users.noreply.github.com>
* feat(history): Allow multi-selection and batch reset for history items
* Use chapterId instead of history.id
* use remember getUiModel
* Toolbar selection mode
* cleanup History
* Replace selectedChapterIds with selection for chapter selection state
* Remove userSelected parameter from selection logic and related function signatures
* remove parentheses
* Fix range selection
* longclick on cover too
* disable clear-history button when none-selected
* Add Filters to Updates screen
Behaves basically like the filters in the library:
- Unread: Show/Don't show unread chapters
- Downloaded: Show/Don't show downloaded chapters
- Started: Show/Don't show chapters that have some progress but aren't
fully Read
- Bookmarked: Show/Don't show chapters that have been bookmarked
Started behaves differently from its Library counterpart because the
actual manga data is not available at this point in time and I thought
calling getManga for each entry without caching would be a pretty bad
idea.
I have modelled this closely on the filter control flow in the
Library, but I'm sure this can be simplified/adjusted in some way.
* Move most filtering logic to SQL
Unread, Started, and Bookmarked filters are now part of the SQL query.
Download state cannot be filtered in the database so it remains in
Kotlin.
Because the Downloaded filter has to be run in Kotlin, the combine
flow uses the preferences flow twice, once to get the SQL query params
and once for the Kotlin filters (only Downloaded at this time).
* Add "Hide excluded scanlators" to update filters
Based on the work done in mihonapp/mihon#1623 but integrated with the other filters
in this PR. Added the user as a co-author for credit.
Co-authored-by: Dani <17619547+shabnix@users.noreply.github.com>
---------
Co-authored-by: Dani <17619547+shabnix@users.noreply.github.com>
---------
* Merge Panorama toggle into Filter diaglog
* Make Panorama toggle persistent and share it with History
* Implement toggleSwitch method for preference management to avoid create new function on every composition
Co-authored-by: Cuong-Tran <16017808+cuong-tran@users.noreply.github.com>
(cherry picked from commit bbe9aa8561360f030072fbc49f79748e71c6535e)
* feat(history): Add indicator for un-finished reading & has more un-read chapters
* Fix StateProvider
* Show reading progress in History screen
* Don't count bookmark excluded chapters in unread dot for History
* Don't count bookmark excluded chapters in Library unread count
* Exclude bookmark filtered chapters from continue-reading list
* Bundle `applyFilter` for bookmark & scanlator together
* Remove parentheses
* fix(storage): setting app's data folder on Android TV
Also check if set location is actually accessible then update UI compose accordingly (for all devices) in some cases (e.g. location set but actual folder was deleted or permission revoked)
(cherry picked from commit ef56b7f11ef0d243ef14816e85afa360f1137fe8)
* chore(storage): improve permission handling for older Android version & Fire TV
(cherry picked from commit 5ee009a6db73d33687e55ee8f4ad6412a9e320d4)