Commit graph

225 commits

Author SHA1 Message Date
Moustapha Kodjo Amadou
8c416563d4
Merge pull request #714 from NBA2K1/main
Rewrite chapter update & sorting; Preserve read state & improve ChapterRecognition & adapt EndOfMangaCard to reading mode & Clean Code
2026-04-30 11:19:11 +01:00
NBA2K1
da2682aa48 Reduce Code Duplication
by extracting `hasPreviousChapter` and `hasNextChapter` logic to the `ChapterControllerMixin`.
2026-04-26 22:49:34 +02:00
NBA2K1
dd6ff2580a Use Platform Helper Everywhere Possible 2026-04-26 19:42:13 +02:00
NBA2K1
5bab1492a4 Reduce Code Duplication by Adding Platform Helper
New file `lib/utils/platform_utils.dart`, to stop defining isDesktop and isMobile everywhere.
2026-04-26 19:39:14 +02:00
NBA2K1
3aa5c73dba Improve Performance
`_resize(fit)` was called on every Build.
`_resize` posts a WidgetsBinding frame callback unconditionally. If fit hasn't changed, this is wasted work.
2026-04-26 17:38:26 +02:00
NBA2K1
47f3296e9e Reduce Code Duplication in anime_player_view.dart
by extracting the helper methods `_seekTo()` and `_seekBy()`.
This also fixes a potential bug, where in line 1634 it was calculated
`skipDuration - _currentPosition.value.inSeconds` instead of the other way around.
That doesn't make sense. If currentPosition = 120 and skipDuration = 10, this becomes:
`_tempPosition = Duration(seconds: 10 - 120)`; so `= Duration(seconds: -110)`
A negative duration makes no sense as a UI indicator of a seek target.
2026-04-26 15:28:52 +02:00
NBA2K1
cc189fd4e3 Reduce Code Duplication in anime_player_view.dart
by extracting the same MPV Event Handler Boilerplate into a helper method.
2026-04-26 15:05:23 +02:00
NBA2K1
b05c17518f Reduce Code Duplication Across 3 Files
By extracting:

```
      SystemChrome.setEnabledSystemUIMode(
        SystemUiMode.manual,
        overlays: SystemUiOverlay.values,
      );
```

to a file `system_ui.dart` and calling the method `restoreSystemUI()`
2026-04-26 15:03:56 +02:00
NBA2K1
a9e307b2a4 Add multi-season support and split parse methods
Changes:
- Add season-keyword regex (staffel, season, saison, temporada) and
  episode-keyword regex (folge, episode, ep.) to reliably extract
  the correct number regardless of name format
- parseChapterNumber() now encodes season context into the sort key
  (season * 100000 + episode) so multi-season anime sort correctly
  across seasons without mixing episode numbers
- Add parseEpisodeNumber() which strips season context and returns
  only the episode number within a season; use this for tracker
  updates (MAL/AniList/Kitsu) and AniSkip lookups, where the tracker
  entry is already season-specific
- Switch updateTrackChapterRead and getAniSkipResults to
  parseEpisodeNumber to fix incorrect episode reporting for
  multi-season anime
- Compile all RegExp objects as static finals instead of per-call
  instantiation
- Refactor duplicated parse logic into a single private _parse()
  method with an applySeason flag
2026-04-26 03:32:28 +02:00
NBA2K1
4a44dd6658 New Setting: Mark duplicate chapter as read
When this setting is turned on, the app will automatically mark chapters as read if they have the same chapter number as a chapter you've already read.

This is useful for sources where:

- multiple scanlators upload the same chapter number
- duplicate entries appear due to different naming formats
- a series has repeated or alternative releases of the same chapter

With the setting enabled, you won’t have to manually mark each duplicate as read.
2026-04-26 01:09:28 +02:00
NBA2K1
0a2c8e2649 rename files manga.dart and chapter.dart 2026-04-23 18:53:25 +02:00
NBA2K1
6aef999fd1 move extensions to correct files 2026-04-15 23:41:19 +02:00
NBA2K1
09a4517d33 Fix reader 2026-04-15 22:08:54 +02:00
NBA2K1
04e04010f4 Reduce Code Duplication 2026-04-15 22:04:15 +02:00
NBA2K1
d8ff9fb01d performance+
Change Clip.antiAliasWithSaveLayer to Clip.antiAlias
2026-04-12 23:03:07 +02:00
Moustapha Kodjo Amadou
d275120cac refactor 2026-04-07 14:43:39 +01:00
Moustapha Kodjo Amadou
236a0cfc6d feat: add localization strings for statistics and reading time tracking #672
- Added new localization strings for total, mean per title, completion rate, watching time, reading time, average chapters per title, read percentage, and entries in multiple languages.
- Enhanced the History model to include readingTimeSeconds.
- Updated AnimeStreamController and ReaderController to track reading time and save it to history.
- Implemented reading time tracking in Anime and Novel reader views.
- Introduced statistics calculations for total reading time across histories.
- Updated statistics screen to display total reading time and average reading time per title.
2026-03-23 11:19:04 +01:00
Moustapha Kodjo Amadou
566da0ae06 feat: implement multiple bug fixes and feature requests\n\n- #339: Remember window size/position on desktop (WindowGeometry utility)\n- #256: Add S key shortcut to skip intro in desktop anime player\n- #372: Auto-delete downloaded chapters after reading (new setting + toggle)\n- #402: Fix manhwa reader scroll jumps by caching image dimensions for placeholders\n- #608: Fix 'Fit width' scale type cropping pages in paged reader mode\n- #572: Add mouse back button navigation support on desktop" 2026-03-17 14:31:21 +01:00
Moustapha Kodjo Amadou
1f4e81e9b3 fix #669 2026-03-17 11:19:55 +01:00
Moustapha Kodjo Amadou
1256e608c7 Refactor 2026-03-02 11:49:19 +01:00
Moustapha Kodjo Amadou
74b194602c update dependencies & update riverpod provider declarations 2026-01-08 14:27:08 +01:00
686udjie
79ee4b4fc8 add a force landscapre mode on mobile 2026-01-01 19:48:57 +02:00
NBA2K1
67dee18776 remove redundant import 2025-12-17 20:43:23 +01:00
hndrbrm
91b8c08658 Make the AlwaysOnTopStateMixin private for least scope principal. 2025-11-29 17:36:06 +07:00
hndrbrm
a6df770275 Add new feature: Always On Top on the anime player view. 2025-11-29 17:11:14 +07:00
Moustapha Kodjo Amadou
9b5bae831e fix #613 2025-11-29 06:38:45 +01:00
NBA2K1
30c74423ad dispose in correct order 2025-11-29 02:57:25 +01:00
Moustapha Kodjo Amadou
485696ea3f fix: enhance error message 2025-11-25 16:55:31 +01:00
Moustapha Kodjo Amadou
fd615bd44b refactor: streamline archive import process and enhance cover image handling 2025-11-11 13:13:35 +01:00
Moustapha Kodjo Amadou
0d0f488ef3 Update WidgetRef types to dynamic to fix updateTrackChapterRead 2025-10-31 11:38:39 +01:00
Moustapha Kodjo Amadou
8213a36895 Update 2025-10-29 13:25:52 +01:00
Moustapha Kodjo Amadou
430e81e021 Refactor and update dependencies for Isar and Riverpod 2025-10-29 13:08:42 +01:00
Schnitzel5
5a6552e6f6 local folders now also scans for subtitles
- added help button to show an example of a local folder
2025-09-05 21:33:22 +02:00
Schnitzel5
958ae0b448 added option to turn on/off mpv hardware acceleration 2025-08-28 16:41:43 +02:00
Moustapha Kodjo Amadou
600a699708 feat: Add use sourceId property if not null to get source model 2025-08-28 12:12:23 +01:00
Schnitzel5
790519fcae fixed ShareX for iPad
https://github.com/fluttercommunity/plus_plugins/tree/main/packages/share_plus/share_plus#ipad
2025-08-27 01:40:31 +02:00
Schnitzel5
da7161e199 - 2025-08-27 00:02:42 +02:00
Schnitzel5
e2ddcf1ffe add option to download online subtitles
- button appears for downloaded and local entries
- added app logging class
2025-08-27 00:01:18 +02:00
Moustapha Kodjo Amadou
a061129b86
Merge pull request #560 from Schnitzel5/feature/subtitle-search
added subtitles search
2025-08-26 20:04:10 +01:00
Schnitzel5
a7b9231eda fixed local subtitles 2025-08-26 02:40:39 +02:00
Moustapha Kodjo Amadou
3a577a4c9e Add fixed versions packages of isar_generator and hive_generator to avoid the Analyzer plugin error 2025-08-25 13:21:37 +01:00
Schnitzel5
42c3f87811 small bug fix 2025-08-23 21:58:32 +02:00
Schnitzel5
9278b6f8af added subtitles search 2025-08-23 21:55:01 +02:00
Schnitzel5
72dd2d7661 removed iOS PiP 2025-08-07 23:56:27 +02:00
Schnitzel5
20c943e5fc testing iOS Picture-in-Picture
implementation from [PR #206](https://github.com/media-kit/media-kit/pull/206)
2025-08-07 21:37:46 +02:00
Schnitzel5
715f077c13 added calendar 2025-08-06 16:44:12 +02:00
Schnitzel5
6e9b882b83 added custom buttons to backup 2025-08-06 04:01:00 +02:00
Schnitzel5
1db55b8018 fixed android screen
- adjusted show_text
- fixed exception for android update screen
2025-08-06 03:05:41 +02:00
Schnitzel5
608fc525fb Discord RPC now shows correct position / duration 2025-08-06 00:03:05 +02:00
Schnitzel5
0fea3ab84e switched to lua scripts 2025-08-01 02:57:05 +02:00