diff --git a/lib/modules/browse/extension/extension_detail.dart b/lib/modules/browse/extension/extension_detail.dart index 3a0322d..3488e33 100644 --- a/lib/modules/browse/extension/extension_detail.dart +++ b/lib/modules/browse/extension/extension_detail.dart @@ -90,7 +90,7 @@ class ExtensionDetail extends ConsumerWidget { title: Text( source.name!, ), - content: Text("Uninstall ${source.name} extension ?"), + content: Text(l10n.uninstall_extension(source.name!)), actions: [ Row( mainAxisAlignment: MainAxisAlignment.end, @@ -105,8 +105,12 @@ class ExtensionDetail extends ConsumerWidget { ), TextButton( onPressed: () { - isar.writeTxnSync(() => - isar.sources.deleteSync(source.id!)); + isar.writeTxnSync( + () => isar.sources.putSync(source + ..sourceCode = "" + ..isAdded = false + ..isPinned = false + ..isNsfw = false)); Navigator.pop(ctx); Navigator.pop(context); }, @@ -118,7 +122,7 @@ class ExtensionDetail extends ConsumerWidget { }); // if (res != null && res == true) {} }, - child: const Text("Uninstall")) + child: Text(l10n.uninstall)) ], ), ); diff --git a/lib/modules/manga/detail/manga_detail_main.dart b/lib/modules/manga/detail/manga_detail_main.dart index fada79e..3506713 100644 --- a/lib/modules/manga/detail/manga_detail_main.dart +++ b/lib/modules/manga/detail/manga_detail_main.dart @@ -1,5 +1,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:isar/isar.dart'; +import 'package:mangayomi/main.dart'; +import 'package:mangayomi/models/source.dart'; import 'package:mangayomi/modules/manga/detail/manga_details_view.dart'; import 'package:mangayomi/modules/manga/detail/providers/update_manga_detail_providers.dart'; import 'package:mangayomi/modules/manga/detail/providers/isar_providers.dart'; @@ -41,29 +44,45 @@ class _MangaReaderDetailState extends ConsumerState { return Scaffold( body: manga.when( data: (manga) { - return RefreshIndicator( - onRefresh: () async { - await ref.read( - updateMangaDetailProvider(mangaId: manga.id, isInit: false) - .future); - }, - child: Stack( - children: [ - MangaDetailsView( - manga: manga!, - ), - if (_isLoading) - const Positioned( - top: 0, - bottom: 0, - left: 0, - right: 0, - child: Center( - child: CircularProgressIndicator(), - )), - ], - ), - ); + return StreamBuilder( + stream: isar.sources + .filter() + .langContains(manga!.lang!, caseSensitive: false) + .and() + .nameContains(manga.source!, caseSensitive: false) + .and() + .idIsNotNull() + .and() + .isActiveEqualTo(true) + .and() + .isAddedEqualTo(true) + .watch(fireImmediately: true), + builder: (context, snapshot) { + final sourceExist = snapshot.hasData && snapshot.data!.isNotEmpty; + return RefreshIndicator( + onRefresh: () async { + if (sourceExist) { + await ref.read(updateMangaDetailProvider( + mangaId: manga.id, isInit: false) + .future); + } + }, + child: Stack( + children: [ + MangaDetailsView(manga: manga, sourceExist: sourceExist), + if (_isLoading) + const Positioned( + top: 0, + bottom: 0, + left: 0, + right: 0, + child: Center( + child: CircularProgressIndicator(), + )), + ], + ), + ); + }); }, error: (Object error, StackTrace stackTrace) { return ErrorText(error); diff --git a/lib/modules/manga/detail/manga_detail_view.dart b/lib/modules/manga/detail/manga_detail_view.dart index 6a8e7d3..0605e37 100644 --- a/lib/modules/manga/detail/manga_detail_view.dart +++ b/lib/modules/manga/detail/manga_detail_view.dart @@ -49,12 +49,14 @@ class MangaDetailView extends ConsumerStatefulWidget { final List? backButtonColors; final Widget? action; final Manga? manga; + final bool sourceExist; const MangaDetailView({ super.key, required this.isExtended, this.titleDescription, this.backButtonColors, this.action, + required this.sourceExist, required this.manga, }); @@ -510,6 +512,7 @@ class _MangaDetailViewState extends ConsumerState return ChapterListTileWidget( chapter: chapters[indexx], chapterList: chapterList, + sourceExist: widget.sourceExist, ); })), ), diff --git a/lib/modules/manga/detail/manga_details_view.dart b/lib/modules/manga/detail/manga_details_view.dart index 73d3a4c..971465d 100644 --- a/lib/modules/manga/detail/manga_details_view.dart +++ b/lib/modules/manga/detail/manga_details_view.dart @@ -21,8 +21,10 @@ import 'package:mangayomi/modules/widgets/progress_center.dart'; class MangaDetailsView extends ConsumerStatefulWidget { final Manga manga; + final bool sourceExist; const MangaDetailsView({ super.key, + required this.sourceExist, required this.manga, }); @@ -119,7 +121,16 @@ class _MangaDetailsViewState extends ConsumerState { Text(getMangaStatusName(widget.manga.status, context)), const Text(' • '), Text(widget.manga.source!), - Text(' (${widget.manga.lang!.toUpperCase()})') + Text(' (${widget.manga.lang!.toUpperCase()})'), + if (!widget.sourceExist) + const Padding( + padding: EdgeInsets.all(3), + child: Icon( + Icons.warning_amber, + color: Colors.deepOrangeAccent, + size: 14, + ), + ) ], ) ], @@ -202,6 +213,7 @@ class _MangaDetailsViewState extends ConsumerState { isExtended: (value) { ref.read(isExtendedStateProvider.notifier).update(value); }, + sourceExist: widget.sourceExist, ), ); } diff --git a/lib/modules/manga/detail/widgets/chapter_list_tile_widget.dart b/lib/modules/manga/detail/widgets/chapter_list_tile_widget.dart index c52f567..685afcb 100644 --- a/lib/modules/manga/detail/widgets/chapter_list_tile_widget.dart +++ b/lib/modules/manga/detail/widgets/chapter_list_tile_widget.dart @@ -13,9 +13,11 @@ import 'package:mangayomi/modules/manga/download/download_page_widget.dart'; class ChapterListTileWidget extends ConsumerWidget { final Chapter chapter; final List chapterList; + final bool sourceExist; const ChapterListTileWidget({ required this.chapterList, required this.chapter, + required this.sourceExist, super.key, }); @@ -123,7 +125,7 @@ class ChapterListTileWidget extends ConsumerWidget { ) ], ), - trailing: chapter.manga.value!.isLocalArchive ?? false + trailing: !sourceExist || (chapter.manga.value!.isLocalArchive ?? false) ? null : ChapterPageDownload(chapter: chapter), ), diff --git a/lib/modules/manga/reader/providers/push_router.dart b/lib/modules/manga/reader/providers/push_router.dart index 64de44e..88f389e 100644 --- a/lib/modules/manga/reader/providers/push_router.dart +++ b/lib/modules/manga/reader/providers/push_router.dart @@ -1,15 +1,33 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; +import 'package:isar/isar.dart'; +import 'package:mangayomi/main.dart'; import 'package:mangayomi/models/chapter.dart'; +import 'package:mangayomi/models/source.dart'; pushMangaReaderView({ required BuildContext context, required Chapter chapter, }) { - if (chapter.manga.value!.isManga!) { - context.push('/mangareaderview', extra: chapter); - } else { - context.push('/animestreamview', extra: chapter); + final sourceExist = isar.sources + .filter() + .langContains(chapter.manga.value!.lang!, caseSensitive: false) + .and() + .nameContains(chapter.manga.value!.source!, caseSensitive: false) + .and() + .idIsNotNull() + .and() + .isActiveEqualTo(true) + .and() + .isAddedEqualTo(true) + .findAllSync() + .isNotEmpty; + if (sourceExist) { + if (chapter.manga.value!.isManga!) { + context.push('/mangareaderview', extra: chapter); + } else { + context.push('/animestreamview', extra: chapter); + } } }