Prechádzať zdrojové kódy

Put invalid files in ignored table

Neeraj Gupta 1 rok pred
rodič
commit
880f8c9429

+ 13 - 5
lib/services/local_sync_service.dart

@@ -15,7 +15,9 @@ import 'package:photos/events/local_photos_updated_event.dart';
 import 'package:photos/events/sync_status_update_event.dart';
 import 'package:photos/events/sync_status_update_event.dart';
 import 'package:photos/extensions/stop_watch.dart';
 import 'package:photos/extensions/stop_watch.dart';
 import 'package:photos/models/file.dart';
 import 'package:photos/models/file.dart';
+import "package:photos/models/ignored_file.dart";
 import 'package:photos/services/app_lifecycle_service.dart';
 import 'package:photos/services/app_lifecycle_service.dart';
+import "package:photos/services/ignored_files_service.dart";
 import 'package:photos/services/local/local_sync_util.dart';
 import 'package:photos/services/local/local_sync_util.dart';
 import 'package:shared_preferences/shared_preferences.dart';
 import 'package:shared_preferences/shared_preferences.dart';
 import 'package:sqflite/sqflite.dart';
 import 'package:sqflite/sqflite.dart';
@@ -203,13 +205,19 @@ class LocalSyncService {
   }
   }
 
 
   Future<void> trackInvalidFile(File file, InvalidFileError error) async {
   Future<void> trackInvalidFile(File file, InvalidFileError error) async {
-    if (file.localID == null) {
-      debugPrint("Warning: Invalid file has no localID");
+    if (file.localID == null ||
+        file.deviceFolder == null ||
+        file.title == null) {
+      _logger.warning('Invalid file received for ignoring: $file');
       return;
       return;
     }
     }
-    final invalidIDs = _getInvalidFileIDs();
-    invalidIDs.add(file.localID!);
-    await _prefs.setStringList(kInvalidFileIDsKey, invalidIDs);
+    final ignored = IgnoredFile(
+      file.localID,
+      file.title,
+      file.deviceFolder,
+      error.reason.name,
+    );
+    await IgnoredFilesService.instance.cacheAndInsert([ignored]);
   }
   }
 
 
   @Deprecated(
   @Deprecated(

+ 20 - 9
lib/utils/file_uploader.dart

@@ -9,7 +9,6 @@ import 'package:connectivity_plus/connectivity_plus.dart';
 import 'package:dio/dio.dart';
 import 'package:dio/dio.dart';
 import 'package:flutter/foundation.dart';
 import 'package:flutter/foundation.dart';
 import 'package:logging/logging.dart';
 import 'package:logging/logging.dart';
-import 'package:path/path.dart';
 import 'package:photos/core/configuration.dart';
 import 'package:photos/core/configuration.dart';
 import 'package:photos/core/errors.dart';
 import 'package:photos/core/errors.dart';
 import 'package:photos/core/event_bus.dart';
 import 'package:photos/core/event_bus.dart';
@@ -113,7 +112,9 @@ class FileUploader {
             return false;
             return false;
           },
           },
           InvalidFileError(
           InvalidFileError(
-              "File already deleted", InvalidReason.assetDeletedEvent,),
+            "File already deleted",
+            InvalidReason.assetDeletedEvent,
+          ),
         );
         );
       }
       }
     });
     });
@@ -733,13 +734,23 @@ class FileUploader {
   }
   }
 
 
   Future _onInvalidFileError(File file, InvalidFileError e) async {
   Future _onInvalidFileError(File file, InvalidFileError e) async {
-    final String ext = file.title == null ? "no title" : extension(file.title!);
-    _logger.severe(
-      "Invalid file: (ext: $ext) encountered: " + file.toString(),
-      e,
-    );
-    await FilesDB.instance.deleteLocalFile(file);
-    await LocalSyncService.instance.trackInvalidFile(file);
+    final bool canIgnoreFile = file.localID != null &&
+        file.deviceFolder != null &&
+        file.title != null &&
+        !file.isSharedMediaToAppSandbox;
+    final bool deleteEntry = !file.isUploaded && !canIgnoreFile;
+    if (e.reason != InvalidReason.thumbnailMissing || !canIgnoreFile) {
+      _logger.severe(
+        "Invalid file, localDelete: $deleteEntry, ignored: $canIgnoreFile",
+        e,
+      );
+    }
+    if (deleteEntry) {
+      await FilesDB.instance.deleteLocalFile(file);
+    }
+    if (canIgnoreFile) {
+      await LocalSyncService.instance.trackInvalidFile(file, e);
+    }
     throw e;
     throw e;
   }
   }