Browse Source

Add reasons for InvalidFile Errors

Neeraj Gupta 1 year ago
parent
commit
c64a8c304a

+ 5 - 9
lib/core/errors.dart

@@ -1,27 +1,23 @@
 enum InvalidReason {
   assetDeleted,
+  assetDeletedEvent,
   sourceFileMissing,
   livePhotoTypeChanged,
+  livePhotoVideoMissing,
   thumbnailMissing,
-  unknown,
 }
 
 class InvalidFileError extends ArgumentError {
-  final InvalidReason invalidReason;
+  final InvalidReason reason;
 
-  InvalidFileError(String message, {this.invalidReason = InvalidReason.unknown})
-      : super(message);
+  InvalidFileError(String message, this.reason) : super(message);
 
   @override
   String toString() {
-    return 'InvalidFileError: $message (reason: $invalidReason)';
+    return 'InvalidFileError: $message (reason: $reason)';
   }
 }
 
-class InvalidFileUploadState extends AssertionError {
-  InvalidFileUploadState(String message) : super(message);
-}
-
 class SubscriptionAlreadyClaimedError extends Error {}
 
 class WiFiUnavailableError extends Error {}

+ 3 - 5
lib/services/local_file_update_service.dart

@@ -2,7 +2,6 @@ import 'dart:async';
 import 'dart:core';
 import 'dart:io';
 
-import 'package:flutter/foundation.dart';
 import 'package:logging/logging.dart';
 import 'package:photos/core/errors.dart';
 import 'package:photos/db/file_updation_db.dart';
@@ -144,14 +143,13 @@ class LocalFileUpdateService {
           );
         }
         processedIDs.add(file.localID!);
-      } on InvalidFileError {
-        // if we fail to get the file, we can ignore the update
+      } on InvalidFileError catch (e) {
+        _logger.fine("Failed to check hash due to invalidfile ${file.tag}", e);
         processedIDs.add(file.localID!);
       } catch (e) {
-        _logger.severe("Failed to get file uploadData", e);
+        _logger.severe("Failed to check hash", e);
       } finally {}
     }
-    debugPrint("Deleting files ${processedIDs.length}");
     await _fileUpdationDB.deleteByLocalIDs(
       processedIDs.toList(),
       FileUpdationDB.modificationTimeUpdated,

+ 2 - 1
lib/utils/file_uploader.dart

@@ -112,7 +112,8 @@ class FileUploader {
             }
             return false;
           },
-          InvalidFileError("File already deleted"),
+          InvalidFileError(
+              "File already deleted", InvalidReason.assetDeletedEvent,),
         );
       }
     });

+ 16 - 6
lib/utils/file_uploader_util.dart

@@ -88,7 +88,7 @@ Future<MediaUploadData> _getMediaUploadDataFromAssetFile(ente.File file) async {
     }
   });
   if (asset == null) {
-    throw InvalidFileError("asset is null");
+    throw InvalidFileError("", InvalidReason.assetDeleted);
   }
   sourceFile = await asset.originFile
       .timeout(const Duration(seconds: 3))
@@ -101,7 +101,10 @@ Future<MediaUploadData> _getMediaUploadDataFromAssetFile(ente.File file) async {
     }
   });
   if (sourceFile == null || !sourceFile.existsSync()) {
-    throw InvalidFileError("source fill is null or do not exist");
+    throw InvalidFileError(
+      "id: ${file.localID}",
+      InvalidReason.sourceFileMissing,
+    );
   }
 
   // h4ck to fetch location data if missing (thank you Android Q+) lazily only during uploads
@@ -114,7 +117,7 @@ Future<MediaUploadData> _getMediaUploadDataFromAssetFile(ente.File file) async {
       final String errMsg =
           "missing livePhoto url for  ${file.toString()} with subType ${file.fileSubType}";
       _logger.severe(errMsg);
-      throw InvalidFileUploadState(errMsg);
+      throw InvalidFileError(errMsg, InvalidReason.livePhotoVideoMissing);
     }
     final String livePhotoVideoHash =
         CryptoUtil.bin2base64(await CryptoUtil.getHash(videoUrl));
@@ -143,7 +146,10 @@ Future<MediaUploadData> _getMediaUploadDataFromAssetFile(ente.File file) async {
     quality: thumbnailQuality,
   );
   if (thumbnailData == null) {
-    throw InvalidFileError("unable to get asset thumbData");
+    throw InvalidFileError(
+      "no thumbnail ${file.tag}",
+      InvalidReason.thumbnailMissing,
+    );
   }
   int compressionAttempts = 0;
   while (thumbnailData!.length > thumbnailDataLimit &&
@@ -229,7 +235,10 @@ Future<MediaUploadData> _getMediaUploadDataFromAppCache(ente.File file) async {
   sourceFile = io.File(localPath);
   if (!sourceFile.existsSync()) {
     _logger.warning("File doesn't exist in app sandbox");
-    throw InvalidFileError("File doesn't exist in app sandbox");
+    throw InvalidFileError(
+      "source missing in sandbox",
+      InvalidReason.sourceFileMissing,
+    );
   }
   try {
     thumbnailData = await getThumbnailFromInAppCacheFile(file);
@@ -259,7 +268,8 @@ Future<MediaUploadData> _getMediaUploadDataFromAppCache(ente.File file) async {
   } catch (e, s) {
     _logger.severe("failed to generate thumbnail", e, s);
     throw InvalidFileError(
-      "thumbnail generation failed for fileType: ${file.fileType.toString()}",
+      "thumbnail failed for appCache fileType: ${file.fileType.toString()}",
+      InvalidReason.thumbnailMissing,
     );
   }
 }