Make sure that upload resumes when possible
This commit is contained in:
parent
ccbc3bec96
commit
6891beeb48
2 changed files with 50 additions and 30 deletions
|
@ -193,12 +193,17 @@ class SyncService {
|
|||
completed: i + 1, total: filesToBeUploaded.length));
|
||||
});
|
||||
futures.add(future);
|
||||
} catch (e) {
|
||||
} catch (e, s) {
|
||||
Bus.instance.fire(PhotoUploadEvent(hasError: true));
|
||||
throw e;
|
||||
_logger.severe(e, s);
|
||||
}
|
||||
}
|
||||
await Future.wait(futures);
|
||||
try {
|
||||
await Future.wait(futures);
|
||||
} catch (e, s) {
|
||||
Bus.instance.fire(PhotoUploadEvent(hasError: true));
|
||||
_logger.severe("Error in syncing files", e, s);
|
||||
}
|
||||
}
|
||||
|
||||
Future _storeDiff(List<File> diff, int collectionID) async {
|
||||
|
|
|
@ -111,6 +111,31 @@ class FileUploader {
|
|||
if (!forcedUpload) {
|
||||
_currentlyUploading++;
|
||||
}
|
||||
try {
|
||||
final uploadedFile = await _tryToUpload(file, collectionID, forcedUpload);
|
||||
await FilesDB.instance.update(uploadedFile);
|
||||
if (!forcedUpload) {
|
||||
_queue.remove(file.generatedID).completer.complete(uploadedFile);
|
||||
}
|
||||
} catch (e, s) {
|
||||
_logger.severe(
|
||||
"File upload failed for file ID " + file.generatedID.toString(),
|
||||
e,
|
||||
s);
|
||||
if (!forcedUpload) {
|
||||
_queue.remove(file.generatedID).completer.completeError(e);
|
||||
}
|
||||
} finally {
|
||||
if (!forcedUpload) {
|
||||
_currentlyUploading--;
|
||||
_pollQueue();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
Future<File> _tryToUpload(
|
||||
File file, int collectionID, bool forcedUpload) async {
|
||||
final encryptedFileName = file.generatedID.toString() + ".encrypted";
|
||||
final tempDirectory = Configuration.instance.getTempDirectory();
|
||||
final encryptedFilePath = tempDirectory + encryptedFileName;
|
||||
|
@ -164,7 +189,7 @@ class FileUploader {
|
|||
final metadataDecryptionHeader =
|
||||
Sodium.bin2base64(encryptedMetadataData.header);
|
||||
|
||||
final data = {
|
||||
final request = {
|
||||
"collectionID": collectionID,
|
||||
"encryptedKey": encryptedKey,
|
||||
"keyDecryptionNonce": keyDecryptionNonce,
|
||||
|
@ -181,35 +206,25 @@ class FileUploader {
|
|||
"decryptionHeader": metadataDecryptionHeader,
|
||||
}
|
||||
};
|
||||
return _dio
|
||||
.post(
|
||||
final response = await _dio.post(
|
||||
Configuration.instance.getHttpEndpoint() + "/files",
|
||||
options:
|
||||
Options(headers: {"X-Auth-Token": Configuration.instance.getToken()}),
|
||||
data: data,
|
||||
)
|
||||
.then((response) async {
|
||||
encryptedFile.deleteSync();
|
||||
encryptedThumbnail.deleteSync();
|
||||
final data = response.data;
|
||||
file.uploadedFileID = data["id"];
|
||||
file.collectionID = collectionID;
|
||||
file.updationTime = data["updationTime"];
|
||||
file.ownerID = data["ownerID"];
|
||||
file.encryptedKey = encryptedKey;
|
||||
file.keyDecryptionNonce = keyDecryptionNonce;
|
||||
file.fileDecryptionHeader = fileDecryptionHeader;
|
||||
file.thumbnailDecryptionHeader = thumbnailDecryptionHeader;
|
||||
file.metadataDecryptionHeader = metadataDecryptionHeader;
|
||||
if (!forcedUpload) {
|
||||
_currentlyUploading--;
|
||||
_queue[file.generatedID].completer.complete(file);
|
||||
_queue.remove(file.generatedID);
|
||||
_pollQueue();
|
||||
}
|
||||
await FilesDB.instance.update(file);
|
||||
return file;
|
||||
});
|
||||
data: request,
|
||||
);
|
||||
encryptedFile.deleteSync();
|
||||
encryptedThumbnail.deleteSync();
|
||||
final data = response.data;
|
||||
file.uploadedFileID = data["id"];
|
||||
file.collectionID = collectionID;
|
||||
file.updationTime = data["updationTime"];
|
||||
file.ownerID = data["ownerID"];
|
||||
file.encryptedKey = encryptedKey;
|
||||
file.keyDecryptionNonce = keyDecryptionNonce;
|
||||
file.fileDecryptionHeader = fileDecryptionHeader;
|
||||
file.thumbnailDecryptionHeader = thumbnailDecryptionHeader;
|
||||
file.metadataDecryptionHeader = metadataDecryptionHeader;
|
||||
return file;
|
||||
}
|
||||
|
||||
Future<UploadURL> _getUploadURL() async {
|
||||
|
|
Loading…
Add table
Reference in a new issue