Explorar o código

Fix: Local id value for trash diff

Neeraj Gupta %!s(int64=2) %!d(string=hai) anos
pai
achega
54d14627b7
Modificáronse 1 ficheiros con 10 adicións e 0 borrados
  1. 10 0
      lib/services/trash_sync_service.dart

+ 10 - 0
lib/services/trash_sync_service.dart

@@ -5,6 +5,7 @@ import 'package:logging/logging.dart';
 import 'package:photos/core/constants.dart';
 import 'package:photos/core/event_bus.dart';
 import 'package:photos/core/network.dart';
+import 'package:photos/db/files_db.dart';
 import 'package:photos/db/trash_db.dart';
 import 'package:photos/events/collection_updated_event.dart';
 import 'package:photos/events/force_reload_trash_page_event.dart';
@@ -40,9 +41,18 @@ class TrashSyncService {
     bool isLocalTrashUpdated = false;
     _logger.fine('sync trash sinceTime : $lastSyncTime');
     final diff = await _diffFetcher.getTrashFilesDiff(lastSyncTime);
+    Set<String>? localFileIDs;
     if (diff.trashedFiles.isNotEmpty) {
       isLocalTrashUpdated = true;
+      localFileIDs ??= await FilesDB.instance.getExistingLocalFileIDs();
       _logger.fine("inserting ${diff.trashedFiles.length} items in trash");
+      // During sync, if trash file local ID is not present in currently
+      // imported files, treat the file as deleted from device
+      for (var trash in diff.trashedFiles) {
+        if (trash.localID != null && !localFileIDs.contains(trash.localID)) {
+          trash.localID = null;
+        }
+      }
       await _trashDB.insertMultiple(diff.trashedFiles);
     }
     if (diff.deletedUploadIDs.isNotEmpty) {