浏览代码

Fix: Swallow InvalidFileError during upload session

Signed-off-by: Neeraj Gupta <254676+ua741@users.noreply.github.com>
Neeraj Gupta 1 年之前
父节点
当前提交
eabcded25e
共有 2 个文件被更改,包括 32 次插入4 次删除
  1. 31 3
      lib/services/remote_sync_service.dart
  2. 1 1
      lib/utils/file_uploader.dart

+ 31 - 3
lib/services/remote_sync_service.dart

@@ -45,6 +45,7 @@ class RemoteSyncService {
   final LocalFileUpdateService _localFileUpdateService =
       LocalFileUpdateService.instance;
   int _completedUploads = 0;
+  int _ignoredUploads = 0;
   late SharedPreferences _prefs;
   Completer<void>? _existingSync;
   bool _isExistingSyncSilent = false;
@@ -122,7 +123,9 @@ class RemoteSyncService {
       }
       final filesToBeUploaded = await _getFilesToBeUploaded();
       final hasUploadedFiles = await _uploadFiles(filesToBeUploaded);
-      _logger.info("File upload complete");
+      _logger.info(
+        "Files ${filesToBeUploaded.length} upload complete for this session",
+      );
       if (hasUploadedFiles) {
         await _pullDiff();
         _existingSync?.complete();
@@ -144,6 +147,11 @@ class RemoteSyncService {
         if (filesToBeUploaded.isEmpty) {
           await _uploader.removeStaleFiles();
         }
+        if (_ignoredUploads > 0) {
+          _logger.info("Ignored $_ignoredUploads files for upload, fire "
+              "backup done");
+          Bus.instance.fire(SyncStatusUpdate(SyncStatus.completedBackup));
+        }
         _existingSync?.complete();
         _existingSync = null;
       }
@@ -156,7 +164,7 @@ class RemoteSyncService {
           e is WiFiUnavailableError ||
           e is StorageLimitExceededError ||
           e is SyncStopRequestedError) {
-        _logger.warning("Error executing remote sync", e);
+        _logger.warning("Error executing remote sync", e, s);
         rethrow;
       } else {
         _logger.severe("Error executing remote sync ", e, s);
@@ -535,6 +543,7 @@ class RemoteSyncService {
     }
 
     _completedUploads = 0;
+    _ignoredUploads = 0;
     final int toBeUploaded = filesToBeUploaded.length + updatedFileIDs.length;
     if (toBeUploaded > 0) {
       Bus.instance.fire(SyncStatusUpdate(SyncStatus.preparingForUpload));
@@ -614,7 +623,10 @@ class RemoteSyncService {
   void _uploadFile(EnteFile file, int collectionID, List<Future> futures) {
     final future = _uploader
         .upload(file, collectionID)
-        .then((uploadedFile) => _onFileUploaded(uploadedFile));
+        .then((uploadedFile) => _onFileUploaded(uploadedFile))
+        .onError(
+          (error, stackTrace) => _onFileUploadError(error, stackTrace, file),
+        );
     futures.add(future);
   }
 
@@ -648,6 +660,22 @@ class RemoteSyncService {
     );
   }
 
+  void _onFileUploadError(
+    Object? error,
+    StackTrace stackTrace,
+    EnteFile file,
+  ) {
+    if (error == null) {
+      return;
+    }
+    if (error is InvalidFileError) {
+      _ignoredUploads++;
+      _logger.warning("Invalid file error", error);
+    } else {
+      throw (error as Error);
+    }
+  }
+
   /* _storeDiff maps each remoteFile to existing
       entries in files table. When match is found, it compares both file to
       perform relevant actions like

+ 1 - 1
lib/utils/file_uploader.dart

@@ -539,7 +539,7 @@ class FileUploader {
         _logger.severe("File upload failed for " + file.toString(), e, s);
       }
       if (e is InvalidFileError) {
-        _logger.severe("File upload ignored for " + file.toString(), e, s);
+        _logger.severe("File upload ignored for " + file.toString(), e);
         await _onInvalidFileError(file, e);
       }
       if ((e is StorageLimitExceededError ||