From ca15a641a4afb91533020fd886128f8f6956a6fb Mon Sep 17 00:00:00 2001 From: nyne Date: Tue, 29 Oct 2024 09:40:34 +0800 Subject: [PATCH] add favorites option to importing comic dialog --- lib/pages/home_page.dart | 42 ++++++++++++++++++++++++++++++-- lib/pages/local_comics_page.dart | 2 +- lib/utils/cbz.dart | 29 +++++++++++----------- 3 files changed, 56 insertions(+), 17 deletions(-) diff --git a/lib/pages/home_page.dart b/lib/pages/home_page.dart index 75b9bf0..3195e2f 100644 --- a/lib/pages/home_page.dart +++ b/lib/pages/home_page.dart @@ -5,6 +5,7 @@ import 'package:venera/foundation/app.dart'; import 'package:venera/foundation/comic_source/comic_source.dart'; import 'package:venera/foundation/comic_type.dart'; import 'package:venera/foundation/consts.dart'; +import 'package:venera/foundation/favorites.dart'; import 'package:venera/foundation/history.dart'; import 'package:venera/foundation/image_provider/cached_image.dart'; import 'package:venera/foundation/local.dart'; @@ -384,6 +385,10 @@ class _ImportComicsWidgetState extends State<_ImportComicsWidget> { var height = 200.0; + var folders = LocalFavoritesManager().folderNames; + + String? selectedFolder; + @override void dispose() { loading = false; @@ -444,6 +449,19 @@ class _ImportComicsWidgetState extends State<_ImportComicsWidget> { }); }, ), + ListTile( + title: Text("Add to favorites".tl), + trailing: Select( + current: selectedFolder, + values: folders, + minWidth: 112, + onTap: (v) { + setState(() { + selectedFolder = folders[v]; + }); + }, + ), + ).paddingHorizontal(8), const SizedBox(height: 8), Text(info).paddingHorizontal(24), ], @@ -509,8 +527,18 @@ class _ImportComicsWidgetState extends State<_ImportComicsWidget> { try { var cache = FilePath.join(App.cachePath, xFile?.name ?? 'temp.cbz'); await xFile!.saveTo(cache); - await CBZ.import(File(cache)); - await File(cache).delete(); + var comic = await CBZ.import(File(cache)); + if (selectedFolder != null) { + LocalFavoritesManager().addComic(selectedFolder!, FavoriteItem( + id: comic.id, + name: comic.title, + coverPath: comic.cover, + author: comic.subtitle, + type: comic.comicType, + tags: comic.tags, + )); + } + await File(cache).deleteIgnoreError(); } catch (e, s) { Log.error("Import Comic", e.toString(), s); context.showMessage(message: e.toString()); @@ -581,6 +609,16 @@ class _ImportComicsWidgetState extends State<_ImportComicsWidget> { } for (var comic in comics.values) { LocalManager().add(comic, LocalManager().findValidId(ComicType.local)); + if (selectedFolder != null) { + LocalFavoritesManager().addComic(selectedFolder!, FavoriteItem( + id: comic.id, + name: comic.title, + coverPath: comic.cover, + author: comic.subtitle, + type: comic.comicType, + tags: comic.tags, + )); + } } context.pop(); context.showMessage( diff --git a/lib/pages/local_comics_page.dart b/lib/pages/local_comics_page.dart index 9b6a493..6252a81 100644 --- a/lib/pages/local_comics_page.dart +++ b/lib/pages/local_comics_page.dart @@ -69,7 +69,7 @@ class _LocalComicsPageState extends State { LocalManager().deleteComic(c as LocalComic); }), MenuEntry( - icon: Icons.delete, + icon: Icons.outbox_outlined, text: "Export as cbz".tl, onClick: () async { var controller = showLoadingDialog( diff --git a/lib/utils/cbz.dart b/lib/utils/cbz.dart index e3eccd8..cef23ce 100644 --- a/lib/utils/cbz.dart +++ b/lib/utils/cbz.dart @@ -59,7 +59,7 @@ class ComicChapter { } abstract class CBZ { - static Future import(File file) async { + static Future import(File file) async { var cache = Directory(FilePath.join(App.cachePath, 'cbz_import')); if (cache.existsSync()) cache.deleteSync(recursive: true); cache.createSync(); @@ -130,20 +130,21 @@ abstract class CBZ { } } } - LocalManager().add( - LocalComic( - id: LocalManager().findValidId(ComicType.local), - title: metaData.title, - subtitle: metaData.author, - tags: metaData.tags, - comicType: ComicType.local, - directory: dest.name, - chapters: cpMap, - downloadedChapters: cpMap?.keys.toList() ?? [], - cover: 'cover.${coverFile.path.split('.').last}', - createdAt: DateTime.now(), - ), + var comic = LocalComic( + id: LocalManager().findValidId(ComicType.local), + title: metaData.title, + subtitle: metaData.author, + tags: metaData.tags, + comicType: ComicType.local, + directory: dest.name, + chapters: cpMap, + downloadedChapters: cpMap?.keys.toList() ?? [], + cover: 'cover.${coverFile.path.split('.').last}', + createdAt: DateTime.now(), ); + LocalManager().add(comic); + await cache.delete(recursive: true); + return comic; } static Future export(LocalComic comic) async {