Browse Source

batch files to batch of 1000s on deleteFromTrash()

ashilkn 2 years ago
parent
commit
6f30346462
1 changed files with 20 additions and 15 deletions
  1. 20 15
      lib/services/trash_sync_service.dart

+ 20 - 15
lib/services/trash_sync_service.dart

@@ -139,22 +139,27 @@ class TrashSyncService {
     final params = <String, dynamic>{};
     final uniqueFileIds = files.map((e) => e.uploadedFileID).toSet().toList();
     params["fileIDs"] = [];
-    for (final fileID in uniqueFileIds) {
-      params["fileIDs"].add(fileID);
-    }
-    try {
-      await _enteDio.post(
-        "/trash/delete",
-        data: params,
-      );
-      await _trashDB.delete(uniqueFileIds);
-      Bus.instance.fire(TrashUpdatedEvent());
-      // no need to await on syncing trash from remote
-      unawaited(syncTrash());
-    } catch (e, s) {
-      _logger.severe("failed to delete from trash", e, s);
-      rethrow;
+    final batchedFileIDs = uniqueFileIds.chunks(1000);
+    for (final batch in batchedFileIDs) {
+      for (final fileID in batch) {
+        params["fileIDs"].add(fileID);
+      }
+      try {
+        await _enteDio.post(
+          "/trash/delete",
+          data: params,
+        );
+        await _trashDB.delete(batch);
+        Bus.instance.fire(TrashUpdatedEvent());
+      } catch (e, s) {
+        _logger.severe("failed to delete from trash", e, s);
+        rethrow;
+      } finally {
+        params["fileIDs"] = <int>[];
+      }
     }
+    // no need to await on syncing trash from remote
+    unawaited(syncTrash());
   }
 
   Future<void> emptyTrash() async {