From 752387ccde36b31cfaf8fbaeff98ef367c55f2f7 Mon Sep 17 00:00:00 2001 From: playerterra1 Date: Tue, 5 Nov 2024 14:55:54 +0000 Subject: [PATCH] changes for novel support --- lib/models/history.dart | 9 +++---- lib/models/manga.dart | 5 ---- .../anime_player_controller_provider.dart | 2 +- .../global_search/global_search_screen.dart | 2 +- .../library/providers/add_torrent.dart | 2 +- .../library/providers/local_archive.dart | 1 - .../widgets/library_gridview_widget.dart | 2 +- .../widgets/library_listview_widget.dart | 2 +- lib/modules/main_view/main_screen.dart | 23 ++++++++++++++---- .../main_view/providers/migration.dart | 8 +++---- .../widgets/manga_image_card_widget.dart | 24 +++++++++---------- 11 files changed, 44 insertions(+), 36 deletions(-) diff --git a/lib/models/history.dart b/lib/models/history.dart index 5bf3dc8..ea7b50c 100644 --- a/lib/models/history.dart +++ b/lib/models/history.dart @@ -1,5 +1,6 @@ import 'package:isar/isar.dart'; import 'package:mangayomi/models/chapter.dart'; +import 'package:mangayomi/models/manga.dart'; part 'history.g.dart'; @collection @@ -11,7 +12,7 @@ class History { int? chapterId; - bool? isManga; + ItemType? itemType; final chapter = IsarLink(); @@ -19,7 +20,7 @@ class History { History({ this.id = Isar.autoIncrement, - required this.isManga, + required this.itemType, required this.chapterId, required this.mangaId, required this.date, @@ -29,7 +30,7 @@ class History { chapterId = json['chapterId']; date = json['date']; id = json['id']; - isManga = json['isManga']; + itemType = json['itemType']; mangaId = json['mangaId']; } @@ -37,7 +38,7 @@ class History { 'chapterId': chapterId, 'date': date, 'id': id, - 'isManga': isManga, + 'itemType': itemType, 'mangaId': mangaId }; } diff --git a/lib/models/manga.dart b/lib/models/manga.dart index 2465e0e..1298106 100644 --- a/lib/models/manga.dart +++ b/lib/models/manga.dart @@ -22,8 +22,6 @@ class Manga { @enumerated late Status status; - bool? isManga; - @enumerated late ItemType itemType; @@ -65,7 +63,6 @@ class Manga { required this.name, required this.status, required this.description, - this.isManga = true, this.itemType = ItemType.manga, this.dateAdded, this.lastUpdate, @@ -87,7 +84,6 @@ class Manga { id = json['id']; imageUrl = json['imageUrl']; isLocalArchive = json['isLocalArchive']; - isManga = json['isManga']; itemType = ItemType.values[json['itemType']]; lang = json['lang']; lastRead = json['lastRead']; @@ -111,7 +107,6 @@ class Manga { 'id': id, 'imageUrl': imageUrl, 'isLocalArchive': isLocalArchive, - 'isManga': isManga, 'itemType': itemType.index, 'lang': lang, 'lastRead': lastRead, diff --git a/lib/modules/anime/providers/anime_player_controller_provider.dart b/lib/modules/anime/providers/anime_player_controller_provider.dart index 5be1355..fffa52d 100644 --- a/lib/modules/anime/providers/anime_player_controller_provider.dart +++ b/lib/modules/anime/providers/anime_player_controller_provider.dart @@ -133,7 +133,7 @@ class AnimeStreamController extends _$AnimeStreamController { history = History( mangaId: getAnime().id, date: DateTime.now().millisecondsSinceEpoch.toString(), - isManga: getAnime().isManga, + itemType: getAnime().itemType, chapterId: episode.id) ..chapter.value = episode; } else { diff --git a/lib/modules/browse/global_search/global_search_screen.dart b/lib/modules/browse/global_search/global_search_screen.dart index 17f037f..5ae7146 100644 --- a/lib/modules/browse/global_search/global_search_screen.dart +++ b/lib/modules/browse/global_search/global_search_screen.dart @@ -236,7 +236,7 @@ class _MangaGlobalImageCardState extends ConsumerState context: context, getManga: getMangaDetail, lang: widget.source.lang!, - isManga: widget.source.isManga ?? true, + itemType: widget.source.itemType, useMaterialRoute: true, source: widget.source.name!); }, diff --git a/lib/modules/library/providers/add_torrent.dart b/lib/modules/library/providers/add_torrent.dart index d87e637..ded7dd1 100644 --- a/lib/modules/library/providers/add_torrent.dart +++ b/lib/modules/library/providers/add_torrent.dart @@ -32,7 +32,7 @@ Future addTorrentFromUrlOrFromFile( favorite: true, source: 'torrent', author: '', - isManga: false, + itemType: ItemType.anime, genre: [], imageUrl: '', lang: '', diff --git a/lib/modules/library/providers/local_archive.dart b/lib/modules/library/providers/local_archive.dart index 15b75f2..95a9af4 100644 --- a/lib/modules/library/providers/local_archive.dart +++ b/lib/modules/library/providers/local_archive.dart @@ -24,7 +24,6 @@ Future importArchivesFromFile(ImportArchivesFromFileRef ref, Manga? mManga, favorite: true, source: 'archive', author: '', - isManga: itemType == ItemType.manga, itemType: itemType, genre: [], imageUrl: '', diff --git a/lib/modules/library/widgets/library_gridview_widget.dart b/lib/modules/library/widgets/library_gridview_widget.dart index 7f10e61..e9c6212 100644 --- a/lib/modules/library/widgets/library_gridview_widget.dart +++ b/lib/modules/library/widgets/library_gridview_widget.dart @@ -279,7 +279,7 @@ class _LibraryGridViewWidgetState extends State { .idIsNotNull() .and() .chapter((q) => q.manga((q) => - q.isMangaEqualTo(entry.isManga!))) + q.itemTypeEqualTo(entry.itemType!))) .watch(fireImmediately: true), builder: (context, snapshot) { if (snapshot.hasData && diff --git a/lib/modules/library/widgets/library_listview_widget.dart b/lib/modules/library/widgets/library_listview_widget.dart index a3bb4e6..2a93fe2 100644 --- a/lib/modules/library/widgets/library_listview_widget.dart +++ b/lib/modules/library/widgets/library_listview_widget.dart @@ -264,7 +264,7 @@ class LibraryListViewWidget extends StatelessWidget { .idIsNotNull() .and() .chapter((q) => q.manga((q) => - q.isMangaEqualTo(entry.isManga!))) + q.itemTypeEqualTo(entry.itemType))) .watch(fireImmediately: true), builder: (context, snapshot) { if (snapshot.hasData && diff --git a/lib/modules/main_view/main_screen.dart b/lib/modules/main_view/main_screen.dart index 19b1bb7..e19a484 100644 --- a/lib/modules/main_view/main_screen.dart +++ b/lib/modules/main_view/main_screen.dart @@ -42,11 +42,12 @@ class MainScreen extends ConsumerWidget { location == '/mangaReaderView' || location == '/animePlayerView' || location == '/novelReaderView'; int currentIndex = switch (location) { null || '/MangaLibrary' => 0, - '/AnimeLibrary' => 1, // TODO add /NovelLibrary + '/AnimeLibrary' => 1, '/updates' => 2, '/history' => 3, '/browse' => 4, - _ => 5, + '/NovelLibrary' => 5, + _ => 6, }; final incognitoMode = ref.watch(incognitoModeStateProvider); @@ -95,6 +96,7 @@ class MainScreen extends ConsumerWidget { null => 100, != '/MangaLibrary' && != '/AnimeLibrary' && + != '/NovelLibrary' && != '/history' && != '/updates' && != '/browse' && @@ -134,6 +136,15 @@ class MainScreen extends ConsumerWidget { padding: const EdgeInsets.only( top: 5), child: Text(l10n.anime))), + NavigationRailDestination( + selectedIcon: const Icon( + Icons.local_library), + icon: const Icon(Icons + .local_library_outlined), + label: Padding( + padding: const EdgeInsets.only( + top: 5), + child: Text(l10n.novel))), NavigationRailDestination( selectedIcon: const Icon(Icons.new_releases), @@ -180,9 +191,10 @@ class MainScreen extends ConsumerWidget { final fn = switch (newIndex) { 0 => route.go('/MangaLibrary'), 1 => route.go('/AnimeLibrary'), - 2 => route.go('/updates'), - 3 => route.go('/history'), - 4 => route.go('/browse'), + 2 => route.go('/NovelLibrary'), + 3 => route.go('/updates'), + 4 => route.go('/history'), + 5 => route.go('/browse'), _ => route.go('/more'), }; fn; @@ -216,6 +228,7 @@ class MainScreen extends ConsumerWidget { null => null, != '/MangaLibrary' && != '/AnimeLibrary' && + != '/NovelLibrary' && != '/history' && != '/updates' && != '/browse' && diff --git a/lib/modules/main_view/providers/migration.dart b/lib/modules/main_view/providers/migration.dart index e68b930..79b21d3 100644 --- a/lib/modules/main_view/providers/migration.dart +++ b/lib/modules/main_view/providers/migration.dart @@ -39,15 +39,15 @@ Future migration(MigrationRef ref) async { //chapterId and isManga in History for (var history in histories) { final chapterId = history.chapter.value?.id; - final isManga = history.chapter.value?.manga.value?.isManga; + final itemType = history.chapter.value?.manga.value?.itemType; isar.historys.putSync(history ..chapterId = chapterId - ..isManga = isManga); + ..itemType = itemType); } // isManga in Track for (var track in tracks) { - final isManga = isar.mangas.getSync(track.mangaId!)?.isManga; - isar.tracks.putSync(track..isManga = isManga); + final itemType = isar.mangas.getSync(track.mangaId!)?.itemType; + isar.tracks.putSync(track..itemType = itemType); } }); } diff --git a/lib/modules/widgets/manga_image_card_widget.dart b/lib/modules/widgets/manga_image_card_widget.dart index 642614c..69e5089 100644 --- a/lib/modules/widgets/manga_image_card_widget.dart +++ b/lib/modules/widgets/manga_image_card_widget.dart @@ -19,7 +19,7 @@ import 'package:mangayomi/modules/widgets/cover_view_widget.dart'; class MangaImageCardWidget extends ConsumerWidget { final Source source; - final bool isManga; + final ItemType itemType; final bool isComfortableGrid; final MManga? getMangaDetail; @@ -28,7 +28,7 @@ class MangaImageCardWidget extends ConsumerWidget { super.key, required this.getMangaDetail, required this.isComfortableGrid, - required this.isManga}); + required this.itemType}); @override Widget build(BuildContext context, WidgetRef ref) { @@ -68,7 +68,7 @@ class MangaImageCardWidget extends ConsumerWidget { getManga: getMangaDetail!, lang: source.lang!, source: source.name!, - isManga: isManga); + itemType: itemType); }, onLongPress: () { pushToMangaReaderDetail( @@ -76,7 +76,7 @@ class MangaImageCardWidget extends ConsumerWidget { getManga: getMangaDetail!, lang: source.lang!, source: source.name!, - isManga: isManga, + itemType: itemType, addToFavourite: true); }, onSecondaryTap: () { @@ -85,7 +85,7 @@ class MangaImageCardWidget extends ConsumerWidget { getManga: getMangaDetail!, lang: source.lang!, source: source.name!, - isManga: isManga, + itemType: itemType, addToFavourite: true); }, children: [ @@ -121,13 +121,13 @@ class MangaImageCardWidget extends ConsumerWidget { class MangaImageCardListTileWidget extends ConsumerWidget { final Source source; - final bool isManga; + final ItemType itemType; final MManga? getMangaDetail; const MangaImageCardListTileWidget( {required this.source, super.key, - required this.isManga, + required this.itemType, required this.getMangaDetail}); @override @@ -166,7 +166,7 @@ class MangaImageCardListTileWidget extends ConsumerWidget { getManga: getMangaDetail!, lang: source.lang!, source: source.name!, - isManga: isManga); + itemType: itemType); }, onLongPress: () { pushToMangaReaderDetail( @@ -174,7 +174,7 @@ class MangaImageCardListTileWidget extends ConsumerWidget { getManga: getMangaDetail!, lang: source.lang!, source: source.name!, - isManga: isManga, + itemType: itemType, addToFavourite: true); }, onSecondaryTap: () { @@ -183,7 +183,7 @@ class MangaImageCardListTileWidget extends ConsumerWidget { getManga: getMangaDetail!, lang: source.lang!, source: source.name!, - isManga: isManga, + itemType: itemType, addToFavourite: true); }, child: Row( @@ -252,7 +252,7 @@ Future pushToMangaReaderDetail( required String source, int? archiveId, Manga? mangaM, - bool? isManga, + ItemType? itemType, bool useMaterialRoute = false, bool addToFavourite = false}) async { int? mangaId; @@ -269,7 +269,7 @@ Future pushToMangaReaderDetail( source: source, lang: lang, lastUpdate: 0, - isManga: isManga ?? true, + itemType: itemType ?? ItemType.manga, artist: getManga.artist ?? ''); final empty = isar.mangas .filter()