Update delete file interaction

This commit is contained in:
Vishnu Mohandas 2020-10-23 20:50:51 +05:30
parent c44e89641b
commit 56c31318d4
4 changed files with 31 additions and 34 deletions

View file

@ -8,6 +8,7 @@ import 'package:photos/models/file.dart';
import 'package:photos/ui/video_widget.dart';
import 'package:photos/ui/zoomable_image.dart';
import 'package:photos/utils/date_time_util.dart';
import 'package:photos/utils/dialog_util.dart';
import 'package:photos/utils/file_util.dart';
import 'package:photos/utils/share_util.dart';
import 'package:logging/logging.dart';
@ -179,8 +180,19 @@ class _DetailPageState extends State<DetailPage> {
final file = _files[_selectedIndex];
return LikeButton(
isLiked: FavoritesService.instance.isLiked(file),
onTap: (oldValue) {
return FavoritesService.instance.setLiked(file, !oldValue);
onTap: (oldValue) async {
// return FavoritesService.instance.setLiked(file, !oldValue);
final dialog = createProgressDialog(context, "Adding to favorites...");
await dialog.show();
try {
await FavoritesService.instance.addToFavorites(file);
} catch (e, s) {
_logger.severe(e, s);
await dialog.hide();
showGenericErrorDialog(context);
} finally {
await dialog.hide();
}
},
likeBuilder: (isLiked) {
return Icon(
@ -255,21 +267,15 @@ class _DetailPageState extends State<DetailPage> {
void _showDeleteSheet() {
final action = CupertinoActionSheet(
title: Text("Delete file?"),
actions: <Widget>[
CupertinoActionSheetAction(
child: Text("Delete on device"),
child: Text("Delete"),
isDestructiveAction: true,
onPressed: () async {
await _delete(false);
await _delete();
},
),
CupertinoActionSheetAction(
child: Text("Delete everywhere [WiP]"),
isDestructiveAction: true,
onPressed: () async {
await _delete(true);
},
)
],
cancelButton: CupertinoActionSheetAction(
child: Text("Cancel"),
@ -281,7 +287,7 @@ class _DetailPageState extends State<DetailPage> {
showCupertinoModalPopup(context: context, builder: (_) => action);
}
Future _delete(bool deleteEveryWhere) async {
Future _delete() async {
final file = _files[_selectedIndex];
final totalFiles = _files.length;
if (_selectedIndex == totalFiles - 1) {
@ -305,7 +311,6 @@ class _DetailPageState extends State<DetailPage> {
Navigator.of(context, rootNavigator: true).pop(); // Close gallery
}
await deleteFiles([file], deleteEveryWhere: deleteEveryWhere);
FileRepository.instance.reloadFiles();
await deleteFiles([file]);
}
}

View file

@ -181,21 +181,15 @@ class _GalleryAppBarWidgetState extends State<GalleryAppBarWidget> {
void _showDeleteSheet(BuildContext context) {
final action = CupertinoActionSheet(
title: Text("Delete file?"),
actions: <Widget>[
CupertinoActionSheetAction(
child: Text("Delete on device"),
child: Text("Delete"),
isDestructiveAction: true,
onPressed: () {
_deleteSelected(context, false);
onPressed: () async {
await _deleteSelected();
},
),
CupertinoActionSheetAction(
child: Text("Delete everywhere [WiP]"),
isDestructiveAction: true,
onPressed: () {
_deleteSelected(context, true);
},
)
],
cancelButton: CupertinoActionSheetAction(
child: Text("Cancel"),
@ -207,13 +201,11 @@ class _GalleryAppBarWidgetState extends State<GalleryAppBarWidget> {
showCupertinoModalPopup(context: context, builder: (_) => action);
}
_deleteSelected(BuildContext context, bool deleteEveryWhere) async {
_deleteSelected() async {
Navigator.of(context, rootNavigator: true).pop();
final dialog = createProgressDialog(context, "Deleting...");
await dialog.show();
await deleteFiles(widget.selectedFiles.files.toList(),
deleteEveryWhere: deleteEveryWhere);
await FileRepository.instance.reloadFiles();
await deleteFiles(widget.selectedFiles.files.toList());
_clearSelectedFiles();
await dialog.hide();
}

View file

@ -88,7 +88,6 @@ class _ThumbnailWidgetState extends State<ThumbnailWidget> {
widget.file.getAsset().then((asset) async {
if (asset == null) {
await deleteFiles([widget.file]);
await FileRepository.instance.reloadFiles();
return;
}
asset

View file

@ -17,21 +17,22 @@ import 'package:photos/core/constants.dart';
import 'package:photos/db/files_db.dart';
import 'package:photos/models/file.dart';
import 'package:photos/models/file_type.dart';
import 'package:photos/repositories/file_repository.dart';
import 'package:photos/services/collections_service.dart';
import 'package:photos/services/sync_service.dart';
import 'crypto_util.dart';
final logger = Logger("FileUtil");
Future<void> deleteFiles(List<File> files,
{bool deleteEveryWhere = false}) async {
Future<void> deleteFiles(List<File> files) async {
await PhotoManager.editor
.deleteWithIds(files.map((file) => file.localID).toList());
for (File file in files) {
deleteEveryWhere
? await FilesDB.instance.markForDeletion(file)
: await FilesDB.instance.delete(file);
await FilesDB.instance.markForDeletion(file);
}
await FileRepository.instance.reloadFiles();
SyncService.instance.sync();
}
void preloadFile(File file) {