Fix bug in delete when shared files are selected
This commit is contained in:
parent
4312024523
commit
ed43970aac
6 changed files with 33 additions and 14 deletions
2
lib/generated/intl/messages_en.dart
generated
2
lib/generated/intl/messages_en.dart
generated
|
@ -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":
|
||||||
|
|
10
lib/generated/l10n.dart
generated
10
lib/generated/l10n.dart
generated
|
@ -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(
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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 = [],
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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,
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
|
|
Loading…
Add table
Reference in a new issue