fix: use existing encryption path on multipart entry found

This commit is contained in:
Prateek Sunal 2024-04-18 22:42:32 +05:30
parent f65e8359a7
commit 336a6c53fc
2 changed files with 37 additions and 11 deletions

View file

@ -395,4 +395,25 @@ class UploadLocksDB {
now - createdAt > 7 * 24 * 60 * 60 * 1000;
});
}
Future<String> getEncryptedPath(
String localId,
String fileHash,
int collectionID,
) {
return instance.database.then((db) async {
final rows = await db.query(
_trackUploadTable.table,
where: '${_trackUploadTable.columnLocalID} = ?'
' AND ${_trackUploadTable.columnFileHash} = ?'
' AND ${_trackUploadTable.columnCollectionID} = ?',
whereArgs: [localId, fileHash, collectionID],
);
if (rows.isEmpty) {
throw Exception("No cached links found for $localId and $fileHash");
}
final row = rows.first;
return row[_trackUploadTable.columnEncryptedFilePath] as String;
});
}
}

View file

@ -427,10 +427,22 @@ class FileUploader {
MediaUploadData? mediaUploadData;
mediaUploadData = await getUploadDataFromEnteFile(file);
var multipartEntryExists = mediaUploadData.hashData?.fileHash != null &&
await _uploadLocks.doesExists(
lockKey,
mediaUploadData.hashData!.fileHash!,
collectionID,
);
final String uniqueID = const Uuid().v4().toString();
final encryptedFilePath =
'$tempDirectory$kUploadTempPrefix${uniqueID}_file.encrypted';
final encryptedFilePath = multipartEntryExists
? await _uploadLocks.getEncryptedPath(
lockKey,
mediaUploadData.hashData!.fileHash!,
collectionID,
)
: '$tempDirectory$kUploadTempPrefix${uniqueID}_file.encrypted';
final encryptedThumbnailPath =
'$tempDirectory$kUploadTempPrefix${uniqueID}_thumb.encrypted';
var uploadCompleted = false;
@ -446,13 +458,6 @@ class FileUploader {
'${isUpdatedFile ? 're-upload' : 'upload'} of ${file.toString()}',
);
var multipartEntryExists = mediaUploadData.hashData?.fileHash != null &&
await _uploadLocks.doesExists(
lockKey,
mediaUploadData.hashData!.fileHash!,
collectionID,
);
Uint8List? key;
EncryptionResult? multipartEncryptionResult;
if (isUpdatedFile) {
@ -535,8 +540,8 @@ class FileUploader {
// Calculate the number of parts for the file.
final count = await _multiPartUploader.calculatePartCount(
await encryptedFile.length(),
);
await encryptedFile.length(),
);
late String fileObjectKey;