浏览代码

Merge pull request #40 from ente-io/handle_file_too_large_err

Vishnu Mohandas 3 年之前
父节点
当前提交
ed50f0bb79
共有 2 个文件被更改,包括 9 次插入2 次删除
  1. 3 0
      lib/core/errors.dart
  2. 6 2
      lib/utils/file_uploader.dart

+ 3 - 0
lib/core/errors.dart

@@ -14,6 +14,9 @@ class NoActiveSubscriptionError extends Error {}
 
 
 class StorageLimitExceededError extends Error {}
 class StorageLimitExceededError extends Error {}
 
 
+// error when file size + current usage >= storage plan limit + buffer
+class FileTooLargeForPlanError extends Error {}
+
 class SilentlyCancelUploadsError extends Error {}
 class SilentlyCancelUploadsError extends Error {}
 
 
 class UserCancelledUploadError extends Error {}
 class UserCancelledUploadError extends Error {}

+ 6 - 2
lib/utils/file_uploader.dart

@@ -383,7 +383,9 @@ class FileUploader {
       _logger.info("File upload complete for " + remoteFile.toString());
       _logger.info("File upload complete for " + remoteFile.toString());
       return remoteFile;
       return remoteFile;
     } catch (e, s) {
     } catch (e, s) {
-      if (!(e is NoActiveSubscriptionError || e is StorageLimitExceededError)) {
+      if (!(e is NoActiveSubscriptionError ||
+          e is StorageLimitExceededError ||
+          e is FileTooLargeForPlanError)) {
         _logger.severe("File upload failed for " + file.toString(), e, s);
         _logger.severe("File upload failed for " + file.toString(), e, s);
       }
       }
       rethrow;
       rethrow;
@@ -465,7 +467,9 @@ class FileUploader {
       file.metadataDecryptionHeader = metadataDecryptionHeader;
       file.metadataDecryptionHeader = metadataDecryptionHeader;
       return file;
       return file;
     } on DioError catch (e) {
     } on DioError catch (e) {
-      if (e.response?.statusCode == 426) {
+      if (e.response?.statusCode == 413) {
+        throw FileTooLargeForPlanError();
+      } else if (e.response?.statusCode == 426) {
         _onStorageLimitExceeded();
         _onStorageLimitExceeded();
       } else if (attempt < kMaximumUploadAttempts) {
       } else if (attempt < kMaximumUploadAttempts) {
         _logger.info("Upload file failed, will retry in 3 seconds");
         _logger.info("Upload file failed, will retry in 3 seconds");