diff --git a/mobile/lib/db/upload_locks_db.dart b/mobile/lib/db/upload_locks_db.dart index d22498820..8dfc01a1a 100644 --- a/mobile/lib/db/upload_locks_db.dart +++ b/mobile/lib/db/upload_locks_db.dart @@ -395,4 +395,25 @@ class UploadLocksDB { now - createdAt > 7 * 24 * 60 * 60 * 1000; }); } + + Future 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; + }); + } } diff --git a/mobile/lib/utils/file_uploader.dart b/mobile/lib/utils/file_uploader.dart index dadfe75a1..ec8c213ac 100644 --- a/mobile/lib/utils/file_uploader.dart +++ b/mobile/lib/utils/file_uploader.dart @@ -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;