Explorar el Código

Execute deletion on remote

vishnukvmd hace 3 años
padre
commit
82aeff80cc
Se han modificado 2 ficheros con 45 adiciones y 10 borrados
  1. 3 2
      lib/ui/deduplicate_page.dart
  2. 42 8
      lib/utils/delete_file_util.dart

+ 3 - 2
lib/ui/deduplicate_page.dart

@@ -1,7 +1,6 @@
 import 'package:flutter/material.dart';
 import 'package:flutter/services.dart';
 import 'package:flutter/widgets.dart';
-import 'package:logging/logging.dart';
 import 'package:photos/core/constants.dart';
 import 'package:photos/models/duplicate_files.dart';
 import 'package:photos/models/file.dart';
@@ -9,6 +8,7 @@ import 'package:photos/ui/common_elements.dart';
 import 'package:photos/ui/detail_page.dart';
 import 'package:photos/ui/thumbnail_widget.dart';
 import 'package:photos/utils/data_util.dart';
+import 'package:photos/utils/delete_file_util.dart';
 import 'package:photos/utils/navigation_util.dart';
 
 class DeduplicatePage extends StatefulWidget {
@@ -145,7 +145,8 @@ class _DeduplicatePageState extends State<DeduplicatePage> {
       color: Colors.red[700],
       onPressed: _selectedFiles.isEmpty
           ? null
-          : () {
+          : () async {
+              await deleteFilesFromRemoteOnly(context, _selectedFiles.toList());
               Navigator.of(context).pop(_selectedFiles.length);
             },
     );

+ 42 - 8
lib/utils/delete_file_util.dart

@@ -35,11 +35,11 @@ Future<void> deleteFilesFromEverywhere(
   final List<String> localSharedMediaIDs = [];
   final List<String> alreadyDeletedIDs = []; // to ignore already deleted files
   for (final file in files) {
-    if (file.localID != null)  {
+    if (file.localID != null) {
       if (!(await _localFileExist(file))) {
         _logger.warning("Already deleted " + file.toString());
         alreadyDeletedIDs.add(file.localID);
-      } else if(file.isSharedMediaToAppSandbox()) {
+      } else if (file.isSharedMediaToAppSandbox()) {
         localSharedMediaIDs.add(file.localID);
       } else {
         localAssetIDs.add(file.localID);
@@ -48,7 +48,8 @@ Future<void> deleteFilesFromEverywhere(
   }
   Set<String> deletedIDs = <String>{};
   try {
-    deletedIDs = (await PhotoManager.editor.deleteWithIds(localAssetIDs)).toSet();
+    deletedIDs =
+        (await PhotoManager.editor.deleteWithIds(localAssetIDs)).toSet();
   } catch (e, s) {
     _logger.severe("Could not delete file", e, s);
   }
@@ -108,6 +109,37 @@ Future<void> deleteFilesFromEverywhere(
   }
 }
 
+Future<void> deleteFilesFromRemoteOnly(
+    BuildContext context, List<File> files) async {
+  final dialog = createProgressDialog(context, "deleting...");
+  await dialog.show();
+  _logger.info("Trying to delete files " + files.toString());
+  final updatedCollectionIDs = <int>{};
+  final List<int> ids = [];
+  for (final file in files) {
+    updatedCollectionIDs.add(file.collectionID);
+    ids.add(file.uploadedFileID);
+  }
+  try {
+    await SyncService.instance.deleteFilesOnServer(ids);
+    await FilesDB.instance.deleteMultipleUploadedFiles(ids);
+  } catch (e) {
+    _logger.severe(e);
+    await dialog.hide();
+    showGenericErrorDialog(context);
+    rethrow;
+  }
+  for (final collectionID in updatedCollectionIDs) {
+    Bus.instance.fire(CollectionUpdatedEvent(
+      collectionID,
+      files.where((file) => file.collectionID == collectionID).toList(),
+      type: EventType.deleted,
+    ));
+  }
+  await dialog.hide();
+  RemoteSyncService.instance.sync(silently: true);
+}
+
 Future<void> deleteFilesOnDeviceOnly(
     BuildContext context, List<File> files) async {
   final dialog = createProgressDialog(context, "deleting...");
@@ -121,7 +153,7 @@ Future<void> deleteFilesOnDeviceOnly(
       if (!(await _localFileExist(file))) {
         _logger.warning("Already deleted " + file.toString());
         alreadyDeletedIDs.add(file.localID);
-      } else if(file.isSharedMediaToAppSandbox()) {
+      } else if (file.isSharedMediaToAppSandbox()) {
         localSharedMediaIDs.add(file.localID);
       } else {
         localAssetIDs.add(file.localID);
@@ -130,7 +162,8 @@ Future<void> deleteFilesOnDeviceOnly(
   }
   Set<String> deletedIDs = <String>{};
   try {
-    deletedIDs = (await PhotoManager.editor.deleteWithIds(localAssetIDs)).toSet();
+    deletedIDs =
+        (await PhotoManager.editor.deleteWithIds(localAssetIDs)).toSet();
   } catch (e, s) {
     _logger.severe("Could not delete file", e, s);
   }
@@ -169,9 +202,11 @@ Future<bool> deleteLocalFiles(
   if (Platform.isAndroid) {
     final androidInfo = await DeviceInfoPlugin().androidInfo;
     if (androidInfo.version.sdkInt < kAndroid11SDKINT) {
-      deletedIDs.addAll(await _deleteLocalFilesInBatches(context, localAssetIDs));
+      deletedIDs
+          .addAll(await _deleteLocalFilesInBatches(context, localAssetIDs));
     } else {
-      deletedIDs.addAll(await _deleteLocalFilesInOneShot(context, localAssetIDs));
+      deletedIDs
+          .addAll(await _deleteLocalFilesInOneShot(context, localAssetIDs));
     }
   } else {
     deletedIDs.addAll(await _deleteLocalFilesInOneShot(context, localAssetIDs));
@@ -251,7 +286,6 @@ Future<List<String>> _deleteLocalFilesInBatches(
   return deletedIDs;
 }
 
-
 Future<bool> _localFileExist(File file) {
   if (file.isSharedMediaToAppSandbox()) {
     var localFile = io.File(getSharedMediaFilePath(file));