Bladeren bron

Verify if user can upload more files before preparing files for upload

Neeraj Gupta 3 jaren geleden
bovenliggende
commit
2f847e0ccc
2 gewijzigde bestanden met toevoegingen van 14 en 3 verwijderingen
  1. 3 0
      lib/services/remote_sync_service.dart
  2. 11 3
      lib/utils/file_uploader.dart

+ 3 - 0
lib/services/remote_sync_service.dart

@@ -86,6 +86,8 @@ class RemoteSyncService {
       await TrashSyncService.instance
           .syncTrash()
           .onError((e, s) => _logger.severe('trash sync failed', e, s));
+      // check if user can upload new files
+      await _uploader.canUpload();
       final filesToBeUploaded = await _getFilesToBeUploaded();
       final hasUploadedFiles = await _uploadFiles(filesToBeUploaded);
       if (hasUploadedFiles) {
@@ -255,6 +257,7 @@ class RemoteSyncService {
     return filesToBeUploaded;
   }
 
+
   Future<bool> _uploadFiles(List<File> filesToBeUploaded) async {
     final updatedFileIDs = await _db.getUploadedFileIDsToBeUpdated();
     _logger.info(updatedFileIDs.length.toString() + " files updated.");

+ 11 - 3
lib/utils/file_uploader.dart

@@ -650,20 +650,28 @@ class FileUploader {
 
   Future<UploadURL> _getUploadURL() async {
     if (_uploadURLs.isEmpty) {
-      await _fetchUploadURLs();
+      await _fetchUploadURLs(2 * _queue.length);
     }
     return _uploadURLs.removeFirst();
   }
 
+  // can upload is a helper method to verify that user can actually upload
+  // new files or not based on their subscription plan and storage limit.
+  // To avoid creating new endpoint, we are using fetchUploadUrls as alternative
+  // method.
+  Future<void> canUpload() async {
+    return await _fetchUploadURLs(2);
+  }
+
   Future<void> _uploadURLFetchInProgress;
 
-  Future<void> _fetchUploadURLs() async {
+  Future<void> _fetchUploadURLs(int urlCount) async {
     _uploadURLFetchInProgress ??= Future<void>(() async {
       try {
         final response = await _dio.get(
           Configuration.instance.getHttpEndpoint() + "/files/upload-urls",
           queryParameters: {
-            "count": min(42, 2 * _queue.length), // m4gic number
+            "count": min(42, urlCount), // m4gic number
           },
           options: Options(
             headers: {"X-Auth-Token": Configuration.instance.getToken()},