mirror of
https://github.com/venera-app/venera.git
synced 2025-09-27 15:57:25 +00:00
131 lines
3.9 KiB
Dart
131 lines
3.9 KiB
Dart
part of 'favorites_page.dart';
|
|
|
|
/// Open a dialog to create a new favorite folder.
|
|
Future<void> newFolder() async {
|
|
return showDialog(
|
|
context: App.rootContext,
|
|
builder: (context) {
|
|
var controller = TextEditingController();
|
|
String? error;
|
|
|
|
return StatefulBuilder(builder: (context, setState) {
|
|
return ContentDialog(
|
|
title: "New Folder".tl,
|
|
content: Column(
|
|
children: [
|
|
TextField(
|
|
controller: controller,
|
|
decoration: InputDecoration(
|
|
hintText: "Folder Name".tl,
|
|
errorText: error,
|
|
),
|
|
onChanged: (s) {
|
|
if (error != null) {
|
|
setState(() {
|
|
error = null;
|
|
});
|
|
}
|
|
},
|
|
),
|
|
],
|
|
).paddingHorizontal(16),
|
|
actions: [
|
|
TextButton(
|
|
child: Text("Import from file".tl),
|
|
onPressed: () async {
|
|
var file = await selectFile(ext: ['json']);
|
|
if(file == null) return;
|
|
var data = await file.readAsBytes();
|
|
try {
|
|
LocalFavoritesManager().fromJson(utf8.decode(data));
|
|
}
|
|
catch(e) {
|
|
context.showMessage(message: "Failed to import".tl);
|
|
return;
|
|
}
|
|
context.pop();
|
|
},
|
|
).paddingRight(4),
|
|
FilledButton(
|
|
onPressed: () {
|
|
var e = validateFolderName(controller.text);
|
|
if (e != null) {
|
|
setState(() {
|
|
error = e;
|
|
});
|
|
} else {
|
|
LocalFavoritesManager().createFolder(controller.text);
|
|
context.pop();
|
|
}
|
|
},
|
|
child: Text("Create".tl),
|
|
),
|
|
],
|
|
);
|
|
});
|
|
});
|
|
}
|
|
|
|
String? validateFolderName(String newFolderName) {
|
|
var folders = LocalFavoritesManager().folderNames;
|
|
if (newFolderName.isEmpty) {
|
|
return "Folder name cannot be empty".tl;
|
|
} else if (newFolderName.length > 50) {
|
|
return "Folder name is too long".tl;
|
|
} else if (folders.contains(newFolderName)) {
|
|
return "Folder already exists".tl;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
void addFavorite(Comic comic) {
|
|
var folders = LocalFavoritesManager().folderNames;
|
|
|
|
showDialog(
|
|
context: App.rootContext,
|
|
builder: (context) {
|
|
String? selectedFolder;
|
|
|
|
return StatefulBuilder(builder: (context, setState) {
|
|
return ContentDialog(
|
|
title: "Select a folder".tl,
|
|
content: ListTile(
|
|
title: Text("Folder".tl),
|
|
trailing: Select(
|
|
current: selectedFolder,
|
|
values: folders,
|
|
minWidth: 112,
|
|
onTap: (v) {
|
|
setState(() {
|
|
selectedFolder = folders[v];
|
|
});
|
|
},
|
|
),
|
|
),
|
|
actions: [
|
|
FilledButton(
|
|
onPressed: () {
|
|
if (selectedFolder != null) {
|
|
LocalFavoritesManager().addComic(
|
|
selectedFolder!,
|
|
FavoriteItem(
|
|
id: comic.id,
|
|
name: comic.title,
|
|
coverPath: comic.cover,
|
|
author: comic.subtitle ?? '',
|
|
type: ComicType((comic.sourceKey == 'local' ? 0 : comic.sourceKey.hashCode)),
|
|
tags: comic.tags ?? [],
|
|
),
|
|
);
|
|
context.pop();
|
|
}
|
|
},
|
|
child: Text("Confirm".tl),
|
|
),
|
|
],
|
|
);
|
|
});
|
|
},
|
|
);
|
|
}
|