diff --git a/lib/utils/file_uploader.dart b/lib/utils/file_uploader.dart index 67e1522a7..bf09700a8 100644 --- a/lib/utils/file_uploader.dart +++ b/lib/utils/file_uploader.dart @@ -55,8 +55,15 @@ class FileUploader { Future forceUpload(File file, int collectionID) async { // If the file hasn't been queued yet, ez. if (!_queue.containsKey(file.generatedID)) { - return _encryptAndUploadFileToCollection(file, collectionID, - forcedUpload: true); + final completer = Completer(); + _queue[file.generatedID] = FileUploadItem( + file, + collectionID, + completer, + status: UploadStatus.in_progress, + ); + _encryptAndUploadFileToCollection(file, collectionID, forcedUpload: true); + return completer.future; } var item = _queue[file.generatedID]; // If the file is being uploaded right now, wait and proceed @@ -112,24 +119,16 @@ class FileUploader { Future _encryptAndUploadFileToCollection(File file, int collectionID, {bool forcedUpload = false}) async { _logger.info("Uploading " + file.toString()); - if (!forcedUpload) { - _currentlyUploading++; - } + _currentlyUploading++; try { final uploadedFile = await _tryToUpload(file, collectionID, forcedUpload); await FilesDB.instance.update(uploadedFile); - if (!forcedUpload) { - _queue.remove(file.generatedID).completer.complete(uploadedFile); - } + _queue.remove(file.generatedID).completer.complete(uploadedFile); } catch (e) { - if (!forcedUpload) { - _queue.remove(file.generatedID).completer.completeError(e); - } + _queue.remove(file.generatedID).completer.completeError(e); } finally { - if (!forcedUpload) { - _currentlyUploading--; - _pollQueue(); - } + _currentlyUploading--; + _pollQueue(); } return null; } @@ -283,23 +282,17 @@ class FileUploader { final fileSize = file.lengthSync().toString(); final startTime = DateTime.now().millisecondsSinceEpoch; _logger.info("Putting file of size " + fileSize + " to " + uploadURL.url); - return Dio() - .put(uploadURL.url, - data: file.openRead(), - options: Options(headers: { - Headers.contentLengthHeader: await file.length(), - })) - .catchError((e) { - _logger.severe(e); - throw e; - }).then((value) { - _logger.info("Upload speed : " + - (file.lengthSync() / - (DateTime.now().millisecondsSinceEpoch - startTime)) - .toString() + - " kilo bytes per second"); - return uploadURL.objectKey; - }); + await Dio().put(uploadURL.url, + data: file.openRead(), + options: Options(headers: { + Headers.contentLengthHeader: await file.length(), + })); + _logger.info("Upload speed : " + + (file.lengthSync() / + (DateTime.now().millisecondsSinceEpoch - startTime)) + .toString() + + " kilo bytes per second"); + return uploadURL.objectKey; } }