add favorites option to importing comic dialog

This commit is contained in:
nyne
2024-10-29 09:40:34 +08:00
parent e81f58afc1
commit ca15a641a4
3 changed files with 56 additions and 17 deletions

View File

@@ -5,6 +5,7 @@ import 'package:venera/foundation/app.dart';
import 'package:venera/foundation/comic_source/comic_source.dart'; import 'package:venera/foundation/comic_source/comic_source.dart';
import 'package:venera/foundation/comic_type.dart'; import 'package:venera/foundation/comic_type.dart';
import 'package:venera/foundation/consts.dart'; import 'package:venera/foundation/consts.dart';
import 'package:venera/foundation/favorites.dart';
import 'package:venera/foundation/history.dart'; import 'package:venera/foundation/history.dart';
import 'package:venera/foundation/image_provider/cached_image.dart'; import 'package:venera/foundation/image_provider/cached_image.dart';
import 'package:venera/foundation/local.dart'; import 'package:venera/foundation/local.dart';
@@ -384,6 +385,10 @@ class _ImportComicsWidgetState extends State<_ImportComicsWidget> {
var height = 200.0; var height = 200.0;
var folders = LocalFavoritesManager().folderNames;
String? selectedFolder;
@override @override
void dispose() { void dispose() {
loading = false; 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), const SizedBox(height: 8),
Text(info).paddingHorizontal(24), Text(info).paddingHorizontal(24),
], ],
@@ -509,8 +527,18 @@ class _ImportComicsWidgetState extends State<_ImportComicsWidget> {
try { try {
var cache = FilePath.join(App.cachePath, xFile?.name ?? 'temp.cbz'); var cache = FilePath.join(App.cachePath, xFile?.name ?? 'temp.cbz');
await xFile!.saveTo(cache); await xFile!.saveTo(cache);
await CBZ.import(File(cache)); var comic = await CBZ.import(File(cache));
await File(cache).delete(); 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) { } catch (e, s) {
Log.error("Import Comic", e.toString(), s); Log.error("Import Comic", e.toString(), s);
context.showMessage(message: e.toString()); context.showMessage(message: e.toString());
@@ -581,6 +609,16 @@ class _ImportComicsWidgetState extends State<_ImportComicsWidget> {
} }
for (var comic in comics.values) { for (var comic in comics.values) {
LocalManager().add(comic, LocalManager().findValidId(ComicType.local)); 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.pop();
context.showMessage( context.showMessage(

View File

@@ -69,7 +69,7 @@ class _LocalComicsPageState extends State<LocalComicsPage> {
LocalManager().deleteComic(c as LocalComic); LocalManager().deleteComic(c as LocalComic);
}), }),
MenuEntry( MenuEntry(
icon: Icons.delete, icon: Icons.outbox_outlined,
text: "Export as cbz".tl, text: "Export as cbz".tl,
onClick: () async { onClick: () async {
var controller = showLoadingDialog( var controller = showLoadingDialog(

View File

@@ -59,7 +59,7 @@ class ComicChapter {
} }
abstract class CBZ { abstract class CBZ {
static Future<void> import(File file) async { static Future<LocalComic> import(File file) async {
var cache = Directory(FilePath.join(App.cachePath, 'cbz_import')); var cache = Directory(FilePath.join(App.cachePath, 'cbz_import'));
if (cache.existsSync()) cache.deleteSync(recursive: true); if (cache.existsSync()) cache.deleteSync(recursive: true);
cache.createSync(); cache.createSync();
@@ -130,20 +130,21 @@ abstract class CBZ {
} }
} }
} }
LocalManager().add( var comic = LocalComic(
LocalComic( id: LocalManager().findValidId(ComicType.local),
id: LocalManager().findValidId(ComicType.local), title: metaData.title,
title: metaData.title, subtitle: metaData.author,
subtitle: metaData.author, tags: metaData.tags,
tags: metaData.tags, comicType: ComicType.local,
comicType: ComicType.local, directory: dest.name,
directory: dest.name, chapters: cpMap,
chapters: cpMap, downloadedChapters: cpMap?.keys.toList() ?? [],
downloadedChapters: cpMap?.keys.toList() ?? [], cover: 'cover.${coverFile.path.split('.').last}',
cover: 'cover.${coverFile.path.split('.').last}', createdAt: DateTime.now(),
createdAt: DateTime.now(),
),
); );
LocalManager().add(comic);
await cache.delete(recursive: true);
return comic;
} }
static Future<File> export(LocalComic comic) async { static Future<File> export(LocalComic comic) async {