Commit graph

288 commits

Author SHA1 Message Date
Moustapha Kodjo Amadou
b507f17846
Merge pull request #719 from NBA2K1/main
Make Code More Readable
2026-05-11 08:38:24 +01:00
NBA2K1
0316afc2c6 Make downloadedChapterIdsProvider async 2026-05-09 00:33:36 +02:00
NBA2K1
40fce92a87 Extract helper to keep build() readable
No functional change. Just a simple method extraction from inside `itemBuilder` to `_buildPagedItem()`.
2026-05-07 21:28:41 +02:00
NBA2K1
3fe74f8883 Clean up _setReaderMode()
No logic difference. This refactor just makes the helper more readable.
2026-04-30 19:47:46 +02:00
NBA2K1
ffe8dee065 Improve _handlePageNavigation()
The helper now handles every continuous reading mode, not just webtoon.
2026-04-30 17:32:15 +02:00
NBA2K1
456589ccfb Use ReaderModeExtension 2026-04-30 17:30:43 +02:00
abdelmonm alsnajleh
bc19e2d7cb
Merge branch 'main' into QoF-webtoon 2026-04-30 14:25:01 +03:00
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
Abdelmonm Alsnajleh
0894b94767 Refactor page navigation handling in reader view
* Extracted page navigation to its own function
* Allow for better reading in webtoon mode
2026-04-27 20:14:24 +03:00
NBA2K1
8d5aa05952 Fix potential focus flicker
`wrapWithKeyboardListener` creates a `FocusNode()` internally on every call.
If no `focusNode` is passed, a new one is allocated every rebuild, which can cause focus flicker.
Without this fix, keyboard focus can be intermittently lost after widget rebuilds,
which would silently swallow keyboard shortcuts.
2026-04-27 00:08:15 +02:00
NBA2K1
ad4207da82 Add Copilot suggested change
https://github.com/kodjodevf/mangayomi/pull/714#discussion_r3144115142
2026-04-26 23:57:23 +02:00
NBA2K1
64d22741a5 Add Copilot suggested change
https://github.com/kodjodevf/mangayomi/pull/714#discussion_r3144115131
2026-04-26 23:33:14 +02:00
NBA2K1
da2682aa48 Reduce Code Duplication
by extracting `hasPreviousChapter` and `hasNextChapter` logic to the `ChapterControllerMixin`.
2026-04-26 22:49:34 +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
ffa8f15c88 ReaderModeExtension to Reduce Code Duplication 2026-04-26 19:12:56 +02:00
NBA2K1
c09eb5351d Reduce Code Duplication in reader_view.dart
extract helper method `_goToChapter()`, to reduce the code duplication in the `ReaderKeyboardHandler` and `ReaderBottomBar` call.
2026-04-26 17:45:02 +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
d625b9c77d Improve EndOfMangaCard
When in vertical mode, it now shows the last_page icon pointing down,
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
8ac25750a2 Why reverse the reading list and then calculate -1 2026-04-25 00:15:13 +02:00
NBA2K1
0a2c8e2649 rename files manga.dart and chapter.dart 2026-04-23 18:53:25 +02:00
NBA2K1
5104f6c19b Fix ChapterTransitionPage layout exceptions
The horizontal layout (_buildHorizontalLayout) used FittedBox as a
shared scaffold for both vertical and horizontal reading modes.
FittedBox passes unbounded width constraints to its child, which caused
RenderFlex to throw "children have non-zero flex but incoming width
constraints are unbounded" when Row + Expanded children were used.
This cascaded into a chain of "RenderBox was not laid out" assertions
all the way up through IntrinsicHeight, ConstrainedBox, FittedBox,
LayoutBuilder, and into the ScrollablePositionedList in
image_view_webtoon.dart.

Fix: split the two layout paths before they reach a scaffold widget.
The vertical path keeps FittedBox (safe, maxWidth is capped at 480px).
The horizontal path uses SizedBox(width: MediaQuery screenWidth) so
Row/Expanded always receive a finite width constraint.
2026-04-21 21:33:16 +02:00
Moustapha Kodjo Amadou
853a9d599b v0.7.60 2026-04-21 17:05:15 +01:00
Moustapha Kodjo Amadou
8595d62c71
Merge pull request #703 from NBA2K1/fix-reader
Fix reader and Code Cleanup
2026-04-21 16:54:08 +01:00
Moustapha Kodjo Amadou
6fe1b8e844 Refactor chapter navigation and improve page indicator responsiveness 2026-04-21 16:52:43 +01:00
Moustapha Kodjo Amadou
7bec3c551a Disable previous chapter preloading for optimization 2026-04-21 10:23:47 +01:00
Moustapha Kodjo Amadou
b5de2693ba Revert "Disable previous chapter preloading for optimization"
This reverts commit a0512564b4.
2026-04-21 10:08:33 +01:00
Moustapha Kodjo Amadou
a0512564b4 Disable previous chapter preloading for optimization 2026-04-21 09:58:45 +01:00
NBA2K1
af49eaee68 Make cards equal in size 2026-04-20 02:33:50 +02:00
NBA2K1
e68815bde2 Fix Overflow Exception 2026-04-20 01:09:48 +02:00
NBA2K1
ef31d94e01 Use animatePageTransitions value 2026-04-19 21:10:12 +02:00
NBA2K1
519dd048ee Use width for minCacheExtent when in horizontal 2026-04-19 21:09:49 +02:00
NBA2K1
1eed6fe01e add ordered prefetch to prioritize early pages 2026-04-18 20:15:03 +02:00
NBA2K1
0cfc8456b7 set _isNextChapterPreloading = false if it isn't 2026-04-17 17:21:49 +02:00
NBA2K1
489a19170f Fix and improve ChapterTransitionPage
Fix an Exception:

```
════════ Exception caught by rendering library ═════════════════════════════════
A RenderFlex overflowed by 274 pixels on the bottom.
The relevant error-causing widget was:
    Column Column:file:///lib/modules/manga/reader/widgets/chapter_transition_page.dart:28:18
════════════════════════════════════════════════════════════════════════════════
```

Improved: The UI adapts to the reading mode now
2026-04-16 03:31:18 +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
Moustapha Kodjo Amadou
ca51a38fbd fix #702 2026-04-15 12:53:50 +01:00
Moustapha Kodjo Amadou
feb0a3635f Fix sorting logic for chapters 2026-04-13 10:40:05 +01:00
NBA2K1
81123dc3cb Change the MangasListStateProvider to Set<int>
MangasListState previously stored selected manga IDs as List<int>.
Every visible library card called .contains() on that list once per
rebuild to determine its highlight state, making each check O(n) in
the number of selected items. The provider's own update/selectAll/
selectSome methods also used .contains() and .remove() on a List.

Change the state type to Set<int> throughout, making all membership
checks O(1). Updated all consumers: library_gridview_widget,
library_listview_widget, library_app_bar, library_dialogs, and
MangasSetIsReadState.
2026-04-12 23:03:18 +02:00
NBA2K1
9f113f2956 Optimize downloaded‑chapter filtering
- Precompute downloaded chapter IDs in a single query
- Replace per‑chapter lookups with in‑memory `Set` checks
2026-04-12 23:02:43 +02:00
NBA2K1
547413cad3 return correct List<Chapter> 2026-04-12 23:02:26 +02:00
NBA2K1
1286afb3df change ref.watch to ref.read 2026-04-12 01:56:47 +02:00
NBA2K1
c468de6a16 make code more readable 2026-04-12 01:56:42 +02:00
NBA2K1
7f12e1ae6e cache settings 2026-04-12 01:56:31 +02:00
NBA2K1
b0b48403fd Reduce FilterQuality
reduce FilterQuality during scroll/zoom for smoother rendering
2026-04-12 00:05:02 +02:00
NBA2K1
64a28d822d CropBorders performance+
call `_processCropBorders()` once, from _initCurrentIndex and after new pages arrive.

Also make _processCropBorders idempotent by the existing _cropBorderCheckList guard
2026-04-12 00:04:56 +02:00
NBA2K1
590ce38f29 save last index 2026-04-12 00:04:31 +02:00
NBA2K1
1735c80014 Fix page jumps
fix for the "jump back" bug that occurred when scrolling up in vertical continuous and webtoon reader modes.

- `ChapterPreloadManager` was maintaining its own `_currentIndex`.
- When prepending previous chapter pages, the index was being incremented
  twice (once in the manager + once in `_handlePrevChapterPrepended`).
- This caused `itemScrollController.jumpTo()` to overshoot, resulting in
  a visible jump forward (perceived as "jump back" while trying to scroll up).

- Removed all index management (`_currentIndex`, getter, setter, startIndex)
  from `ChapterPreloadManager` and `ReaderMemoryManagement`.
- `ChapterPreloadManager` is now a pure data container (only manages `_pages`).
- `_handlePrevChapterPrepended` now captures the **current visible top index**
  *before* prepending and adjusts the scroll position only once.
- `_readProgressListener` is now the single source of truth for `_currentIndex`.
- Removed stale `initialScrollIndex` logic from preload initialization.
2026-04-12 00:02:50 +02:00