Commit graph

1130 commits

Author SHA1 Message Date
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
40a1697e86
Merge pull request #462 from NBA2K1/main
Update storage_provider.dart
2025-05-27 15:07:19 +01:00
NBA2K1
6b81d0fc02 Update storage_provider.dart
- Move manageExternalStorage inside if (android), as it is Android only.
- Cache permission state, to only check for permission once per app start preventing redundant checks.
- Made `initDB` fully async to enhance efficiency and avoid sync operations
2025-05-26 15:37:09 +02:00
Moustapha Kodjo Amadou
6ea8d088ed + 2025-05-22 18:05:08 +01:00
Moustapha Kodjo Amadou
962bab1cdd upgrade 2025-05-21 18:16:18 +01:00
Moustapha Kodjo Amadou
0f333848cd add Entitlements for File Access (read-only) 2025-05-20 17:45:09 +01:00
Moustapha Kodjo Amadou
45715cf488 fix 2025-05-20 15:26:46 +01:00
Moustapha Kodjo Amadou
fc5776ab60
Merge pull request #457 from NBA2K1/main
Improve Video Playback UI & Maintainability
2025-05-19 15:29:36 +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
Moustapha Kodjo Amadou
e5a880d188
Merge pull request #455 from Schnitzel5/enhance/repo-check
added JSON structure check for repos
2025-05-18 00:23:56 +01: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
NBA2K1
b2695aae49 Get latest appimagetool 2025-05-17 04:56:35 +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
b57683f1a1 fix 2025-05-11 15:22:22 +01: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
8b84e18b6a + 2025-05-10 11:34:39 +01:00
Moustapha Kodjo Amadou
129b6ef4d4 - 2025-05-09 19:04:33 +01:00
Moustapha Kodjo Amadou
51522360ab
Merge pull request #451 from kodjodevf/migrate_to_d4rt_package
refactor: update AndroidManifest and MainActivity for APK installatio…
2025-05-09 18:46:41 +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
c43deefbaa
Merge pull request #450 from kodjodevf/migrate_to_d4rt_package
migrate to d4rt package
2025-05-09 17:48:58 +01:00
Moustapha Kodjo Amadou
c558c08376 migrate to d4rt package 2025-05-09 17:47:27 +01:00
Moustapha Kodjo Amadou
b54aa3e2df
Merge pull request #449 from Schnitzel5/feature/epub
added support for epubs
2025-05-09 15:43:52 +01:00
Schnitzel5
843f5c505b + 2025-05-07 22:32:18 +02: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
Schnitzel5
d6d674c270 + 2025-05-05 20:12:58 +02:00
Moustapha Kodjo Amadou
1751a0ca35 Update media_kit_video dependency to use git source 2025-05-05 15:46:24 +01:00
Moustapha Kodjo Amadou
e46975e381
Merge pull request #446 from NBA2K1/main
Refactor code, fix AniList/MAL bugs, add local scan (#148, #349)
2025-05-05 10:20:14 +01:00
NBA2K1
152f2d5969 Fix incorrect expiresIn in Kitsu and AniList
- Resolved the same timestamp conversion issue that affected MyAnimeList.
- Previously, seconds-to-milliseconds conversion and `DateTime.now()` were applied twice — once on `login()` and once in `_getAccessToken()` — resulting in incorrect expiry dates (e.g., year 57349).
- Updated Kitsu’s URL from `.io` to `.app`.
2025-05-05 02:33:55 +02:00
Schnitzel5
821366cb06 added epubx dependency 2025-05-04 23:45:46 +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
NBA2K1
4010d019ae Idk why I had removed the requirement 2025-05-02 13:13:14 +02:00
NBA2K1
34206dbc42 storage_provider trim()
trim whitespace to prevent Exception
2025-05-02 13:02:50 +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