Commit graph

644 commits

Author SHA1 Message Date
Schnitzel5
7c8faf8bed added info card 2025-06-15 01:30:51 +02:00
Schnitzel5
24eb09b701 adding Kitsu 2025-06-12 00:18:14 +02:00
Schnitzel5
5dff4a1aa3 added two-way tracking 2025-06-09 02:26:31 +02:00
Schnitzel5
f7a124d72c added two-way-tracking 2025-06-09 02:22:33 +02:00
Schnitzel5
e994d3230a + 2025-06-08 19:11:31 +02:00
Schnitzel5
4c3b6bc430 + 2025-06-08 03:02:18 +02:00
Moustapha Kodjo Amadou
183e88ebd0
Merge pull request #484 from NBA2K1/main
Fixes, Refactors, and Async Improvements
2025-06-07 13:37:57 +01:00
NBA2K1
fecda49373 Merge Provider => Remove Code Duplication
Merge `fetchMangaSourcesListProvider`, `fetchAnimeSourcesListProvider` and `fetchNovelSourcesListProvider` into a single Provider, `FetchItemSourcesListProvider`, reducing code duplication.
2025-06-07 03:24:39 +02:00
NBA2K1
138e2887e0 Fix Extension Installation
There was a bug when uninstalling an extension and trying to reinstall it, it didn't install.
You had to restart the app to reinstall the same extension again.
Now the provider is invalidated when reinstalling an uninstalled extension,
so the fetch logic is triggered correctly. Prevents stale cache issues from
Riverpod's keepAlive behavior.
2025-06-07 02:37:51 +02:00
Schnitzel5
a0ebe46fa0 added option to change hwdec 2025-06-07 01:46:30 +02:00
Schnitzel5
51352efd24 + 2025-06-06 00:22:31 +02:00
Schnitzel5
1b4177b59b + 2025-06-05 00:19:47 +02:00
Moustapha Kodjo Amadou
0f430f80d9 Fix indexing and path for downloaded chapter images and update padding logic 2025-06-04 17:28:31 +01:00
Schnitzel5
f152339162 + 2025-06-03 23:49:14 +02:00
NBA2K1
f6945cf189 Fix Exception _AssertionError
When customizing navigation, toggling one item off.

```

Exception has occurred.
_AssertionError ('package:flutter/src/material/navigation_rail.dart': Failed assertion: line 112 pos 15: 'selectedIndex == null || (0 <= selectedIndex && selectedIndex < destinations.length)': is not true.)

```
2025-06-02 17:49:44 +02:00
NBA2K1
7eec89b1b9 Add Switch to automatically check for updates
Instead of checking for updates by default, the user now has the choice to disable automatic app update checks.
2025-06-02 17:49:16 +02:00
NBA2K1
88899f6e00
Merge branch 'kodjodevf:main' into main 2025-06-02 17:48:16 +02:00
NBA2K1
2482f6ec2e Change Button Behavior of "Edit Categories"
The Button "Edit Categories" (now called "set Categories"), now opens the category select menu instead of the category edit menu.

This makes more sense in the library item detail view. For example you have the categories "Watching" and "Finished". You just finished an anime and you want to change its category directly in the detail view. Now you can.

Before you had to exit the detail view, go in to the library view, long press the item, tap the category button and then edit it there.
2025-06-02 13:44:04 +02:00
Moustapha Kodjo Amadou
538f87630c + 2025-06-02 12:41:06 +01:00
Moustapha Kodjo Amadou
664a1f6dcf + 2025-06-02 12:30:47 +01:00
Moustapha Kodjo Amadou
fdb47334db fix #464 2025-06-02 12:17:54 +01:00
Moustapha Kodjo Amadou
4d27a2c0e3 fix #468 2025-06-02 11:41:12 +01:00
Moustapha Kodjo Amadou
1c256f884d fix 2025-06-02 10:37:01 +01:00
Moustapha Kodjo Amadou
d5247a8183 fix 2025-06-02 10:14:39 +01:00
Moustapha Kodjo Amadou
446ba5503d fix #474 2025-06-02 10:11:21 +01:00
NBA2K1
2822f9f17f Use the passed parameter Manga in _openCategory
- Use the passed parameter instead of widget.manga
- refactored the method a little to make it more readable.
2025-06-02 01:53:06 +02:00
NBA2K1
b3ffc3ea67 Apply System Theme After Backup Restore 2025-06-02 00:08:41 +02:00
NBA2K1
7c5a7cb2e5 Implement QOL-feature
If the last episode of an Anime has ended, exit fullscreen mode.
2025-06-01 18:29:31 +02:00
NBA2K1
3a1d568a42 Center the Discord Icon in the button
And adjust the GitHub button size to match the now larger Discord button.
2025-06-01 01:05:34 +02:00
NBA2K1
2ba453a394 Update edit_code.dart 2025-05-31 16:35:35 +02:00
NBA2K1
62c7099a0f Update edit_code.dart
Change keyboard type to alphanumeric
2025-05-31 15:29:19 +02:00
Moustapha Kodjo Amadou
5ee30851d5 fix #467 2025-05-31 01:16:33 +01:00
Moustapha Kodjo Amadou
01e03f033c fix #466 2025-05-30 19:10:10 +01:00
Moustapha Kodjo Amadou
80efee40d1 dart format 2025-05-30 17:43:42 +01:00
Moustapha Kodjo Amadou
c24df38506 feat: Implement virtual scrolling for manga reader with optimized page management
- Added VirtualMangaList widget for displaying manga pages in a virtual scrolling list.
- Introduced VirtualPageManager to handle page loading, caching, and memory optimization.
- Created VirtualReaderView to integrate virtual scrolling with PhotoView for enhanced reading experience.
- Implemented page loading states and memory cleanup mechanisms in VirtualPageManager.
- Added debug information overlay for monitoring virtual page manager statistics.
- Enhanced user experience with callbacks for chapter transitions and page changes.
2025-05-28 14:56:05 +01:00
Moustapha Kodjo Amadou
c3ac07fa97 feat(reader): implement chapter transition view
- Introduced `TransitionViewPaged` and `TransitionViewVertical` widgets to handle chapter transitions.
- Created `ChapterTransitionPage` widget to display transition information between chapters.
- Updated reader view logic to incorporate transition pages when navigating chapters.
- Enhanced `UChapDataPreload` model to support transition states and next chapter information.

feat(localization): add chapter transition messages in multiple languages

fix(dependencies): update Dart SDK and dependencies

- Updated Dart SDK constraint to ^3.8.0.
- Changed `epubx` dependency to use the latest version from GitHub.
2025-05-27 17:30:31 +01:00
Moustapha Kodjo Amadou
45715cf488 fix 2025-05-20 15:26:46 +01:00
NBA2K1
41618fa8ce Merge remote-tracking branch 'upstream/main' 2025-05-19 00:51:19 +02:00
Moustapha Kodjo Amadou
2371d52661 update to d4rt v0.0.5 2025-05-18 13:20:35 +01:00
NBA2K1
3060663e2b Merge remote-tracking branch 'upstream/main' 2025-05-18 01:50:42 +02:00
NBA2K1
3709163a49 Reduce Code Duplication
Extract `CustomMaterialPlayOrPauseButton` class from *mobile.dart* and `CustomMaterialDesktopPlayOrPauseButton` class from *desktop.dart* into *play_or_pause_button.dart* to eliminate code duplication and improve maintainability.
2025-05-18 01:47:12 +02:00
NBA2K1
711e5ea6ae Fix UI bug
Fix playback time display exceeding max duration when skipping near video end
2025-05-17 22:07:50 +02:00
NBA2K1
9b7fea1435 Implement Dropdown menu to video speed 2025-05-17 21:46:52 +02:00
NBA2K1
1e0951be42 Fix Slider assertion error when skipping past video duration
Prevent an AssertionError in the Slider widget when the skip duration
button causes the value to exceed the video's maximum duration.
Clamp the Slider's value to the range [0, max]
using `clamp(0.0, maxValue).toDouble()` to ensure it stays within bounds.

Exception example:
```
Exception has occurred.
_AssertionError ('package:flutter/src/material/slider.dart': Failed assertion: line 199 pos 10: 'value >= min && value <= max': Value 1410000.0 is not between minimum 0.0 and maximum 1409533.0)
```
2025-05-17 21:44:12 +02:00
NBA2K1
3bb8c1acdf Reduce Code duplication 2025-05-17 04:56:53 +02:00
Schnitzel5
e29470308c fixed repo check for deep links 2025-05-14 23:00:24 +02:00
Schnitzel5
49914c5a53 added JSON structure check for repos 2025-05-13 16:03:21 +02:00
Moustapha Kodjo Amadou
9e9bbc785b fix 2025-05-10 17:13:58 +01:00
Moustapha Kodjo Amadou
f651d460d7 update d4rt to 0.0.2 & some fixes 2025-05-10 14:54:06 +01:00
Moustapha Kodjo Amadou
206a51df69 + 2025-05-10 12:26:02 +01:00
Moustapha Kodjo Amadou
d250c08424 refactor: update AndroidManifest and MainActivity for APK installation; remove flutter_app_installer dependency 2025-05-09 18:38:23 +01:00
Moustapha Kodjo Amadou
c558c08376 migrate to d4rt package 2025-05-09 17:47:27 +01:00
Schnitzel5
24c4c89418 Merge branch 'temp/epub' into feature/epub 2025-05-07 22:25:11 +02:00
Schnitzel5
3677938bf8 added support for epubs
embedded images not supported yet
2025-05-07 22:17:23 +02:00
NBA2K1
73e7ad05f9 Fix MyAnimeList expiresIn retrieval
Remove incorrect expiresIn calculation in `OAuth.fromJson`. The `login()`
function of the MyAnimeList class already sets expiresIn as an absolute timestamp in milliseconds.
Multiplying by 1000 and adding the current timestamp in fromJson caused
expiresIn to be inflated, making the expiration check in `_getAccessToken()`
always false, skipping token refresh and returning an invalid token.
2025-05-04 22:36:54 +02:00
NBA2K1
1014c71f5c #148
Users can now add Mangas/Animes to a **manually** created Mangayomi/local folder.
Feature as described:
```
App Home Location/
  local/
    Manga Title/
      cover.jpg (optional)
      Chapter 1/
        1.jpg
        ...
      Chapter 2.cbz
      ...
    Anime Title/
      cover.png (optional)
      Episode 1.mp4
      Episode 2.mkv
```

The folder (if exist) will be scanned once per app start.

**Supported filetypes:** (taken from lib/modules/library/providers/local_archive.dart, line 98)
```
Videotypes:   mp4, mov, avi, flv, wmv, mpeg, mkv
Imagetypes:   jpg, jpeg, png, webp
Archivetypes: cbz, zip, cbt, tar
```
2025-05-02 13:44:37 +02:00
Schnitzel5
e2a862d30b limited the amount of downloading operations
+ fixed failed downloads caused by spaces in file path
2025-05-02 02:10:57 +02:00
Schnitzel5
cc5bb1cd2a separated download function 2025-04-30 00:39:10 +02:00
NBA2K1
2698db6085 Reduce I/O operations
getMangaChapterDirectory() now accepts an optional mangaMainDirectory
to avoid calling getMangaMainDirectory() and thus getDirectory() twice in places where both methods are called successively.
2025-04-29 18:47:43 +02:00
NBA2K1
46526c6b6b Update download_provider.dart
Move the getDirectory() call out of the for loop to enhance performance.
2025-04-29 18:18:40 +02:00
Enbiya Olgun
b6ff9fe141 Update custom_navigation_settings.dart
No need for SingleChildScrollView, because ReorderableListView already is scrollable
2025-04-28 21:03:41 +02:00
Enbiya Olgun
c799c3451c rearranged Code
- New SettingsSection class to remove code duplication

- Moved the big ListTile+Dialog blocks in their own private methods:
_buildLanguageTile(),
_buildFontTile(),
_buildRelativeTimestampTile(),
_buildDateFormatTile()
2025-04-28 21:02:06 +02:00
Enbiya Olgun
7690f2cae1 FollowSystemThemeButton rearrangement
Show the FollowSystemThemeButton always on first positon, whether ON or OFF.

Before, the FollowSystemThemeButton was on first position if it was ON and in second position if it was OFF (DarkModeButton took the first position)
2025-04-28 18:52:20 +02:00
Schnitzel5
77b912d40e added download all option 2025-04-28 15:03:45 +02:00
NBA2K1
843ed46269 Update library_screen.dart 2025-04-27 06:33:35 +02:00
Enbiya Olgun
d64f332f77 Added comment 2025-04-27 03:18:40 +02:00
Enbiya Olgun
6b4a86d2b5 Better UX for mobile
Better text rendering of "ignore filters" checkbox on mobile.
Adds a line break to mobile devices, where horizontal space is limited.
2025-04-27 03:15:04 +02:00
Enbiya Olgun
71a6358452 Fix #349
Added a checkbox "ignoreFiltersOnSearch" to the library search, so when checked, the whole library will be searched, not just the filtered library (Downloaded, Unwatched/Unread, Started, Bookmarked)

+ added some comments
2025-04-26 05:03:06 +02:00
Enbiya Olgun
4f1e2cb492 Remove code duplication + BugFix
Fixed a bug, where newly added animes to AniList would register as "Rewatching" instead of "Plan to watch".
2025-04-24 05:48:52 +02:00
Schnitzel5
7e9202ceeb added extension notes/hints 2025-04-23 23:33:18 +02:00
Enbiya Olgun
404e18c4a5 introduce mangaReaderProvider and refactor MangaReaderView
- Add `ChapterWithPages` model and `MangaReaderController` (FamilyAsyncNotifier)
  to load chapter + pages in a single provider (`mangaReaderProvider`)
- Replace synchronous Isar fetch in `MangaReaderView` with `ref.watch(mangaReaderProvider)`
- Unify loading, error, and data states using a shared `scaffoldWith` helper
- Remove duplicated `Scaffold`/`AppBar` boilerplate and inline SystemChrome restore logic
- Simplify error handling
2025-04-23 00:11:20 +02:00
Schnitzel5
479a89042e Merge branch 'temp/optimize' into optimize 2025-04-22 22:42:46 +02:00
Schnitzel5
0ad836994d bottoast 2025-04-22 22:30:11 +02:00
Enbiya Olgun
2446756552 moved super() call of initState to top of method 2025-04-22 04:57:52 +02:00
Enbiya Olgun
ffd776dbf1 tidy up main.dart and move theme handling to provider
removed code duplication
2025-04-22 03:53:28 +02:00
Enbiya Olgun
3ecbef80b2 Fix Exception
At line 963, when scrolling too fast in manga reader and page didn't load before.
```
═══════ Exception caught by foundation library ════════════════════════════════
The following StateError was thrown while dispatching notifications for ValueNotifier<Iterable<ItemPosition>>:
Bad state: No element
```
2025-04-22 03:49:31 +02:00
Enbiya Olgun
59b2389631 Fix Exception
```
════════ Exception caught by widgets library ═══════════════════════════════════
The following UnsupportedError was thrown building CircularProgressIndicator(100.0%, dependencies: [InheritedCupertinoTheme, _InheritedTheme, _LocalizationsScope-[GlobalKey#3b6da]], state: _CircularProgressIndicatorState#8c03b(ticker inactive)):
Unsupported operation: Infinity or NaN toInt

The relevant error-causing widget was:
    CircularProgressIndicator CircularProgressIndicator (package:mangayomi/modules/manga/reader/widgets/circular_progress_indicator_animate_rotate.dart:56:27)
```
2025-04-22 03:23:12 +02:00
Enbiya Olgun
b5d65168fb Fix Exception
```
[ERROR:flutter/runtime/dart_vm_initializer.cc(40)] Unhandled Exception: Bad state: Cannot use "ref" after the widget was disposed.
#0      ConsumerStatefulElement._assertNotDisposed (package:flutter_riverpod/src/consumer.dart:550:7)
consumer.dart:550
#1      ConsumerStatefulElement.read (package:flutter_riverpod/src/consumer.dart:619:5)
consumer.dart:619
#2      _MainScreenState.initState.<anonymous closure>.<anonymous closure> (package:mangayomi/modules/main_view/main_screen.dart:70:13)
main_screen.dart:70
#3      _Timer._runTimers (dart:isolate-patch/timer_impl.dart:410:19)
timer_impl.dart:410
#4      _Timer._handleMessage (dart:isolate-patch/timer_impl.dart:441:5)
timer_impl.dart:441
#5      _RawReceivePort._handleMessage (dart:isolate-patch/isolate_patch.dart:194:12)
isolate_patch.dart:194
```
2025-04-22 00:39:00 +02:00
Enbiya Olgun
6d99d9a690 Implemented text scroll to chapter/episode list
title text scroll (like a marquee effect) when the chapter/episode name is too long.
2025-04-21 22:47:23 +02:00
Enbiya Olgun
ef4abc47f2 Fix #444 + Remove code duplication
- Tracker Kitsu now displays "ì" correctly
- Removed a lot of code duplication in Kitsu.
2025-04-21 19:10:09 +02:00
Enbiya Olgun
dfade2f78e Kitsu no shows "Start date" and "Finish Date" when date is not set
Instead of "01 Jan 1970" show "Start date" and "Finish Date" on kitsu. Just like MyAnimeList
2025-04-21 19:05:01 +02:00
Schnitzel5
d4e768f6f7 added progress for updating the library 2025-04-17 23:15:59 +02:00
Schnitzel5
58ec9895eb + 2025-04-15 00:18:23 +02:00
Schnitzel5
50fe6abfac updates screen search query 2025-04-14 00:00:41 +02:00
Schnitzel5
90dadbd2c6 fixed last updated 2025-04-10 16:03:08 +02:00
Schnitzel5
454445ad25 fixed auto theme 2025-04-08 23:39:17 +02:00
Enbiya Olgun
cf8852fe50 Stays in the current category when updating
Fix #437
2025-04-08 00:36:33 +02:00
Enbiya Olgun
f765581b37 Fixed the Archive creation
This fixes issue #435
2025-04-07 19:23:28 +02:00
Enbiya Olgun
5e5f4d34cf Pass the correct list to convertToCBZ
e.url are the original remote URLs
Now the correct list of local image file paths is being passed to convertToCBZ.
2025-04-07 19:17:39 +02:00
Enbiya Olgun
0188f99aad Added keyboard shortcut
Added the Enter-key as a shortcut to skip the Anime intro (defaultSkipIntroLength).
2025-04-06 23:18:47 +02:00
NBA2K1
fcc6aa0f7f Localized messages are generated into source.
https://docs.flutter.dev/release/breaking-changes/flutter-generate-i10n-source
The flutter tool will no longer generate a synthetic package:flutter_gen or modify the package_config.json of the app.
Applications or tools that referenced package:flutter_gen should instead reference source files generated into the app's source directory directly.
2025-04-03 01:27:24 +02:00
Moustapha Kodjo Amadou
a0df094504 refactor: improve download button logic and clean up code 2025-04-01 17:15:54 +01:00
Schnitzel5
4791acc425 android users now can directly install new updates 2025-03-28 23:54:33 +01:00
Schnitzel5
175ea414b8 added android update 2025-03-28 16:00:29 +01:00
Schnitzel5
c45d8df099 test 2025-03-28 00:15:35 +01:00
Moustapha Kodjo Amadou
49bc8dd1a1 refactor 2025-03-27 16:03:11 +01:00
Moustapha Kodjo Amadou
5ef6963edc implement conditional display of DarkModeButton based on system theme preference 2025-03-27 15:54:19 +01:00
Moustapha Kodjo Amadou
451a07aef5 add statistics provider and redesign 2025-03-27 15:48:54 +01:00
Schnitzel5
3b2e6f9fcc fixed archive bug 2025-03-26 23:46:42 +01:00
Schnitzel5
95619437a1 added screenshot option to player view 2025-03-24 21:33:34 +01:00