From e901ef6281cdd7deb170ca87097b7eba1f4063ab Mon Sep 17 00:00:00 2001 From: Moustapha Kodjo Amadou <107993382+kodjodevf@users.noreply.github.com> Date: Wed, 22 Jan 2025 10:02:44 +0100 Subject: [PATCH] refactor: update chapter handling to use IDs instead of objects in reader views --- lib/modules/anime/anime_player_view.dart | 14 +++++------ .../manga/reader/providers/push_router.dart | 12 ++++----- lib/modules/manga/reader/reader_view.dart | 8 +++--- lib/modules/novel/novel_reader_view.dart | 9 ++++--- lib/router/router.dart | 25 +++++++++---------- 5 files changed, 34 insertions(+), 34 deletions(-) diff --git a/lib/modules/anime/anime_player_view.dart b/lib/modules/anime/anime_player_view.dart index cb43eb9..97b5508 100644 --- a/lib/modules/anime/anime_player_view.dart +++ b/lib/modules/anime/anime_player_view.dart @@ -5,6 +5,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart' as riv; +import 'package:mangayomi/main.dart'; import 'package:mangayomi/models/chapter.dart'; import 'package:mangayomi/models/video.dart' as vid; import 'package:mangayomi/modules/anime/providers/anime_player_controller_provider.dart'; @@ -32,14 +33,15 @@ import 'package:path/path.dart' as path; bool _isDesktop = Platform.isMacOS || Platform.isLinux || Platform.isWindows; class AnimePlayerView extends riv.ConsumerStatefulWidget { - final Chapter episode; - const AnimePlayerView({super.key, required this.episode}); + final int episodeId; + const AnimePlayerView({super.key, required this.episodeId}); @override riv.ConsumerState createState() => _AnimePlayerViewState(); } class _AnimePlayerViewState extends riv.ConsumerState { + late final Chapter episode = isar.chapters.getSync(widget.episodeId)!; List _infoHashList = []; bool desktopFullScreenPlayer = false; @override @@ -65,15 +67,13 @@ class _AnimePlayerViewState extends riv.ConsumerState { @override Widget build(BuildContext context) { - final serversData = - ref.watch(getVideoListProvider(episode: widget.episode)); + final serversData = ref.watch(getVideoListProvider(episode: episode)); SystemChrome.setEnabledSystemUIMode(SystemUiMode.immersive); return serversData.when( data: (data) { final (videos, isLocal, infoHashList) = data; _infoHashList = infoHashList; - if (videos.isEmpty && - !(widget.episode.manga.value!.isLocalArchive ?? false)) { + if (videos.isEmpty && !(episode.manga.value!.isLocalArchive ?? false)) { return Scaffold( backgroundColor: Theme.of(context).scaffoldBackgroundColor, appBar: AppBar( @@ -91,7 +91,7 @@ class _AnimePlayerViewState extends riv.ConsumerState { } return AnimeStreamPage( - episode: widget.episode, + episode: episode, videos: videos, isLocal: isLocal, isTorrent: infoHashList.isNotEmpty, diff --git a/lib/modules/manga/reader/providers/push_router.dart b/lib/modules/manga/reader/providers/push_router.dart index cd7a9c2..0d6ffdc 100644 --- a/lib/modules/manga/reader/providers/push_router.dart +++ b/lib/modules/manga/reader/providers/push_router.dart @@ -26,13 +26,13 @@ Future pushMangaReaderView({ if (sourceExist || chapter.manga.value!.isLocalArchive!) { switch (chapter.manga.value!.itemType) { case ItemType.manga: - await context.push('/mangaReaderView', extra: chapter); + await context.push('/mangaReaderView', extra: chapter.id!); break; case ItemType.anime: - await context.push('/animePlayerView', extra: chapter); + await context.push('/animePlayerView', extra: chapter.id!); break; case ItemType.novel: - await context.push('/novelReaderView', extra: chapter); + await context.push('/novelReaderView', extra: chapter.id!); break; } } @@ -42,13 +42,13 @@ void pushReplacementMangaReaderView( {required BuildContext context, required Chapter chapter}) { switch (chapter.manga.value!.itemType) { case ItemType.manga: - context.pushReplacement('/mangaReaderView', extra: chapter); + context.pushReplacement('/mangaReaderView', extra: chapter.id!); break; case ItemType.anime: - context.pushReplacement('/animePlayerView', extra: chapter); + context.pushReplacement('/animePlayerView', extra: chapter.id!); break; case ItemType.novel: - context.pushReplacement('/novelReaderView', extra: chapter); + context.pushReplacement('/novelReaderView', extra: chapter.id!); break; } } diff --git a/lib/modules/manga/reader/reader_view.dart b/lib/modules/manga/reader/reader_view.dart index 092574c..5ef8399 100644 --- a/lib/modules/manga/reader/reader_view.dart +++ b/lib/modules/manga/reader/reader_view.dart @@ -48,12 +48,12 @@ import 'package:path/path.dart' as p; typedef DoubleClickAnimationListener = void Function(); class MangaReaderView extends ConsumerWidget { - final Chapter chapter; - const MangaReaderView({ + final int chapterId; + MangaReaderView({ super.key, - required this.chapter, + required this.chapterId, }); - + late final Chapter chapter = isar.chapters.getSync(chapterId)!; @override Widget build(BuildContext context, WidgetRef ref) { final chapterData = ref.watch(getChapterPagesProvider( diff --git a/lib/modules/novel/novel_reader_view.dart b/lib/modules/novel/novel_reader_view.dart index 7a25311..dd5a08d 100644 --- a/lib/modules/novel/novel_reader_view.dart +++ b/lib/modules/novel/novel_reader_view.dart @@ -7,6 +7,7 @@ import 'package:flutter/services.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; +import 'package:mangayomi/main.dart'; import 'package:mangayomi/models/chapter.dart'; import 'package:mangayomi/models/page.dart'; import 'package:mangayomi/models/settings.dart'; @@ -28,12 +29,12 @@ import 'package:flutter_widget_from_html/flutter_widget_from_html.dart'; typedef DoubleClickAnimationListener = void Function(); class NovelReaderView extends ConsumerWidget { - final Chapter chapter; - const NovelReaderView({ + final int chapterId; + NovelReaderView({ super.key, - required this.chapter, + required this.chapterId, }); - + late final Chapter chapter = isar.chapters.getSync(chapterId)!; @override Widget build(BuildContext context, WidgetRef ref) { final htmlContent = ref.watch(getHtmlContentProvider(chapter: chapter)); diff --git a/lib/router/router.dart b/lib/router/router.dart index 9b54711..46e1c31 100644 --- a/lib/router/router.dart +++ b/lib/router/router.dart @@ -2,7 +2,6 @@ import 'dart:io'; import 'package:bot_toast/bot_toast.dart'; import 'package:flutter/foundation.dart'; import 'package:go_router/go_router.dart'; -import 'package:mangayomi/models/chapter.dart'; import 'package:mangayomi/models/manga.dart'; import 'package:mangayomi/models/source.dart'; import 'package:mangayomi/models/track_preference.dart'; @@ -203,17 +202,17 @@ class RouterNotifier extends ChangeNotifier { path: "/mangaReaderView", name: "mangaReaderView", builder: (context, state) { - final chapter = state.extra as Chapter; + final chapterId = state.extra as int; return MangaReaderView( - chapter: chapter, + chapterId: chapterId, ); }, pageBuilder: (context, state) { - final chapter = state.extra as Chapter; + final chapterId = state.extra as int; return transitionPage( key: state.pageKey, child: MangaReaderView( - chapter: chapter, + chapterId: chapterId, ), ); }, @@ -222,17 +221,17 @@ class RouterNotifier extends ChangeNotifier { path: "/animePlayerView", name: "animePlayerView", builder: (context, state) { - final episode = state.extra as Chapter; + final episodeId = state.extra as int; return AnimePlayerView( - episode: episode, + episodeId: episodeId, ); }, pageBuilder: (context, state) { - final episode = state.extra as Chapter; + final episodeId = state.extra as int; return transitionPage( key: state.pageKey, child: AnimePlayerView( - episode: episode, + episodeId: episodeId, ), ); }, @@ -241,17 +240,17 @@ class RouterNotifier extends ChangeNotifier { path: "/novelReaderView", name: "novelReaderView", builder: (context, state) { - final chapter = state.extra as Chapter; + final chapterId = state.extra as int; return NovelReaderView( - chapter: chapter, + chapterId: chapterId, ); }, pageBuilder: (context, state) { - final chapter = state.extra as Chapter; + final chapterId = state.extra as int; return transitionPage( key: state.pageKey, child: NovelReaderView( - chapter: chapter, + chapterId: chapterId, ), ); },