Fix bug in delete when shared files are selected

This commit is contained in:
Neeraj Gupta 2023-09-02 12:27:04 +05:30
parent 4312024523
commit ed43970aac
6 changed files with 33 additions and 14 deletions

View file

@ -361,6 +361,8 @@ class MessageLookup extends MessageLookupByLibrary {
"cancelSubscription": "cancelSubscription":
MessageLookupByLibrary.simpleMessage("Cancel subscription"), MessageLookupByLibrary.simpleMessage("Cancel subscription"),
"cannotAddMorePhotosAfterBecomingViewer": m6, "cannotAddMorePhotosAfterBecomingViewer": m6,
"cannotDeleteSharedFiles":
MessageLookupByLibrary.simpleMessage("Cannot delete shared files"),
"centerPoint": MessageLookupByLibrary.simpleMessage("Center point"), "centerPoint": MessageLookupByLibrary.simpleMessage("Center point"),
"changeEmail": MessageLookupByLibrary.simpleMessage("Change email"), "changeEmail": MessageLookupByLibrary.simpleMessage("Change email"),
"changePassword": "changePassword":

View file

@ -3282,6 +3282,16 @@ class S {
); );
} }
/// `Cannot delete shared files`
String get cannotDeleteSharedFiles {
return Intl.message(
'Cannot delete shared files',
name: 'cannotDeleteSharedFiles',
desc: '',
args: [],
);
}
/// `The download could not be completed` /// `The download could not be completed`
String get theDownloadCouldNotBeCompleted { String get theDownloadCouldNotBeCompleted {
return Intl.message( return Intl.message(

View file

@ -468,6 +468,7 @@
"updateAvailable": "Update available", "updateAvailable": "Update available",
"ignoreUpdate": "Ignore", "ignoreUpdate": "Ignore",
"downloading": "Downloading...", "downloading": "Downloading...",
"cannotDeleteSharedFiles": "Cannot delete shared files",
"theDownloadCouldNotBeCompleted": "The download could not be completed", "theDownloadCouldNotBeCompleted": "The download could not be completed",
"retry": "Retry", "retry": "Retry",
"backedUpFolders": "Backed up folders", "backedUpFolders": "Backed up folders",

View file

@ -13,6 +13,7 @@ class FilesSplit {
int get totalFileOwnedCount => int get totalFileOwnedCount =>
pendingUploads.length + ownedByCurrentUser.length; pendingUploads.length + ownedByCurrentUser.length;
int get count => totalFileOwnedCount + ownedByOtherUsers.length;
static FilesSplit split(Iterable<EnteFile> files, int currentUserID) { static FilesSplit split(Iterable<EnteFile> files, int currentUserID) {
final List<EnteFile> ownedByCurrentUser = [], final List<EnteFile> ownedByCurrentUser = [],

View file

@ -383,7 +383,7 @@ class _FileSelectionActionsWidgetState
} }
Future<void> _onDeleteClick() async { Future<void> _onDeleteClick() async {
return showDeleteSheet(context, widget.selectedFiles); return showDeleteSheet(context, widget.selectedFiles, split);
} }
Future<void> _removeFilesFromAlbum() async { Future<void> _removeFilesFromAlbum() async {

View file

@ -4,6 +4,7 @@ import 'dart:math';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:logging/logging.dart'; import 'package:logging/logging.dart';
import "package:path/path.dart";
import 'package:photo_manager/photo_manager.dart'; import 'package:photo_manager/photo_manager.dart';
import 'package:photos/core/constants.dart'; import 'package:photos/core/constants.dart';
import 'package:photos/core/event_bus.dart'; import 'package:photos/core/event_bus.dart';
@ -14,6 +15,7 @@ import "package:photos/events/force_reload_trash_page_event.dart";
import 'package:photos/events/local_photos_updated_event.dart'; import 'package:photos/events/local_photos_updated_event.dart';
import "package:photos/generated/l10n.dart"; import "package:photos/generated/l10n.dart";
import 'package:photos/models/file/file.dart'; import 'package:photos/models/file/file.dart';
import "package:photos/models/files_split.dart";
import 'package:photos/models/selected_files.dart'; import 'package:photos/models/selected_files.dart';
import 'package:photos/models/trash_item_request.dart'; import 'package:photos/models/trash_item_request.dart';
import 'package:photos/services/remote_sync_service.dart'; import 'package:photos/services/remote_sync_service.dart';
@ -500,18 +502,21 @@ Future<bool> shouldProceedWithDeletion(BuildContext context) async {
Future<void> showDeleteSheet( Future<void> showDeleteSheet(
BuildContext context, BuildContext context,
SelectedFiles selectedFiles, SelectedFiles selectedFiles,
FilesSplit filesSplit,
) async { ) async {
bool containsUploadedFile = false, containsLocalFile = false; if (selectedFiles.files.length != filesSplit.count) {
for (final file in selectedFiles.files) { throw AssertionError("Unexpected state, #{selectedFiles.files.length} != "
if (file.uploadedFileID != null) { "${filesSplit.count}");
debugPrint("${file.toString()} is uploaded");
containsUploadedFile = true;
}
if (file.localID != null) {
debugPrint("${file.toString()} has local");
containsLocalFile = true;
}
} }
final List<EnteFile> deletableFiles =
filesSplit.ownedByCurrentUser + filesSplit.pendingUploads;
if (deletableFiles.isEmpty && filesSplit.ownedByOtherUsers.isNotEmpty) {
showShortToast(context, S.of(context).cannotDeleteSharedFiles);
return;
}
final containsUploadedFile = deletableFiles.any((f) => f.isUploaded);
final containsLocalFile = deletableFiles.any((f) => f.localID != null);
final List<ButtonWidget> buttons = []; final List<ButtonWidget> buttons = [];
final bool isBothLocalAndRemote = containsUploadedFile && containsLocalFile; final bool isBothLocalAndRemote = containsUploadedFile && containsLocalFile;
final bool isLocalOnly = !containsUploadedFile; final bool isLocalOnly = !containsUploadedFile;
@ -545,7 +550,7 @@ Future<void> showDeleteSheet(
onTap: () async { onTap: () async {
await deleteFilesFromRemoteOnly( await deleteFilesFromRemoteOnly(
context, context,
selectedFiles.files.toList(), deletableFiles,
).then( ).then(
(value) { (value) {
showShortToast(context, S.of(context).movedToTrash); showShortToast(context, S.of(context).movedToTrash);
@ -572,7 +577,7 @@ Future<void> showDeleteSheet(
shouldSurfaceExecutionStates: false, shouldSurfaceExecutionStates: false,
isInAlert: true, isInAlert: true,
onTap: () async { onTap: () async {
await deleteFilesOnDeviceOnly(context, selectedFiles.files.toList()); await deleteFilesOnDeviceOnly(context, deletableFiles);
}, },
), ),
); );
@ -591,7 +596,7 @@ Future<void> showDeleteSheet(
onTap: () async { onTap: () async {
await deleteFilesFromEverywhere( await deleteFilesFromEverywhere(
context, context,
selectedFiles.files.toList(), deletableFiles,
); );
}, },
), ),