From 4f16669acf5a86e51588f45c5b4bdda5ace65382 Mon Sep 17 00:00:00 2001 From: Abhinav Date: Sun, 19 Jun 2022 18:29:16 +0530 Subject: [PATCH 1/3] restruct postUploadAction --- src/constants/upload/index.ts | 1 + src/services/upload/uploadManager.ts | 124 ++++++++++++++++----------- src/services/upload/uploader.ts | 4 +- 3 files changed, 74 insertions(+), 55 deletions(-) diff --git a/src/constants/upload/index.ts b/src/constants/upload/index.ts index 2c9d7a4e6..6056600e3 100644 --- a/src/constants/upload/index.ts +++ b/src/constants/upload/index.ts @@ -40,6 +40,7 @@ export enum UPLOAD_RESULT { LARGER_THAN_AVAILABLE_STORAGE, UPLOADED, UPLOADED_WITH_STATIC_THUMBNAIL, + ADDED_SYMLINK, } export const MAX_FILE_SIZE_SUPPORTED = 4 * 1024 * 1024 * 1024; // 4 GB diff --git a/src/services/upload/uploadManager.ts b/src/services/upload/uploadManager.ts index 94ddf3778..f711dae86 100644 --- a/src/services/upload/uploadManager.ts +++ b/src/services/upload/uploadManager.ts @@ -329,13 +329,12 @@ class UploadManager { this.existingFilesCollectionWise.get(collectionID) ?? []; const collection = this.collections.get(collectionID); fileWithCollection = { ...fileWithCollection, collection }; - const { fileUploadResult, uploadedFile, skipDecryption } = - await uploader( - worker, - existingFilesInCollection, - this.existingFiles, - fileWithCollection - ); + const { fileUploadResult, uploadedFile } = await uploader( + worker, + existingFilesInCollection, + this.existingFiles, + fileWithCollection + ); UIService.moveFileToResultList( fileWithCollection.localID, fileUploadResult @@ -344,7 +343,6 @@ class UploadManager { await this.postUploadTask( fileUploadResult, uploadedFile, - skipDecryption, fileWithCollection ); } @@ -353,66 +351,46 @@ class UploadManager { async postUploadTask( fileUploadResult: UPLOAD_RESULT, uploadedFile: EnteFile, - skipDecryption: boolean, fileWithCollection: FileWithCollection ) { try { + let decryptedFile: EnteFile; logUploadInfo(`uploadedFile ${JSON.stringify(uploadedFile)}`); - + this.updateElectronRemainingFiles(fileWithCollection); if ( - (fileUploadResult === UPLOAD_RESULT.UPLOADED || - fileUploadResult === - UPLOAD_RESULT.UPLOADED_WITH_STATIC_THUMBNAIL) && - !skipDecryption + fileUploadResult === + UPLOAD_RESULT.LARGER_THAN_AVAILABLE_STORAGE || + fileUploadResult === UPLOAD_RESULT.TOO_LARGE || + fileUploadResult === UPLOAD_RESULT.UNSUPPORTED ) { - const decryptedFile = await decryptFile( - uploadedFile, - fileWithCollection.collection.key - ); - this.existingFiles.push(decryptedFile); - this.existingFiles = sortFiles(this.existingFiles); - await setLocalFiles(this.existingFiles); - this.setFiles(preservePhotoswipeProps(this.existingFiles)); - if ( - !this.existingFilesCollectionWise.has( - decryptedFile.collectionID - ) - ) { - this.existingFilesCollectionWise.set( - decryptedFile.collectionID, - [] - ); - } - this.existingFilesCollectionWise - .get(decryptedFile.collectionID) - .push(decryptedFile); - } - if ( + // no-op + } else if ( fileUploadResult === UPLOAD_RESULT.FAILED || fileUploadResult === UPLOAD_RESULT.BLOCKED ) { this.failedFiles.push(fileWithCollection); - } - - if (isElectron()) { - this.remainingFiles = this.remainingFiles.filter( - (file) => - !areFileWithCollectionsSame(file, fileWithCollection) - ); - ImportService.updatePendingUploads(this.remainingFiles); - - if ( - fileUploadResult === UPLOAD_RESULT.UPLOADED || - fileUploadResult === - UPLOAD_RESULT.UPLOADED_WITH_STATIC_THUMBNAIL || - fileUploadResult === UPLOAD_RESULT.ALREADY_UPLOADED - ) { + } else if (fileUploadResult === UPLOAD_RESULT.ALREADY_UPLOADED) { + if (isElectron()) { await watchFolderService.onFileUpload( fileWithCollection, uploadedFile ); } + } else if ( + fileUploadResult === UPLOAD_RESULT.UPLOADED || + fileUploadResult === + UPLOAD_RESULT.UPLOADED_WITH_STATIC_THUMBNAIL + ) { + decryptedFile = await decryptFile( + uploadedFile, + fileWithCollection.collection.key + ); + } else { + decryptedFile = uploadedFile; } + await this.updateExistingFiles(decryptedFile); + this.updateExistingCollections(decryptedFile); + await this.watchFolderCallback(fileWithCollection, uploadedFile); } catch (e) { logError(e, 'failed to do post file upload action'); logUploadInfo( @@ -423,6 +401,48 @@ class UploadManager { } } + private async watchFolderCallback( + fileWithCollection: FileWithCollection, + uploadedFile: EnteFile + ) { + if (isElectron()) { + await watchFolderService.onFileUpload( + fileWithCollection, + uploadedFile + ); + } + } + + private updateExistingCollections(decryptedFile: EnteFile) { + if (!this.existingFilesCollectionWise.has(decryptedFile.collectionID)) { + this.existingFilesCollectionWise.set( + decryptedFile.collectionID, + [] + ); + } + this.existingFilesCollectionWise + .get(decryptedFile.collectionID) + .push(decryptedFile); + } + + private async updateExistingFiles(decryptedFile: EnteFile) { + this.existingFiles.push(decryptedFile); + this.existingFiles = sortFiles(this.existingFiles); + await setLocalFiles(this.existingFiles); + this.setFiles(preservePhotoswipeProps(this.existingFiles)); + } + + private updateElectronRemainingFiles( + fileWithCollection: FileWithCollection + ) { + if (isElectron()) { + this.remainingFiles = this.remainingFiles.filter( + (file) => !areFileWithCollectionsSame(file, fileWithCollection) + ); + ImportService.updatePendingUploads(this.remainingFiles); + } + } + async retryFailedFiles() { await this.queueFilesForUpload(this.failedFiles, [ ...this.collections.values(), diff --git a/src/services/upload/uploader.ts b/src/services/upload/uploader.ts index c43012b04..12365d9a7 100644 --- a/src/services/upload/uploader.ts +++ b/src/services/upload/uploader.ts @@ -20,7 +20,6 @@ import { addToCollection } from 'services/collectionService'; interface UploadResponse { fileUploadResult: UPLOAD_RESULT; uploadedFile?: EnteFile; - skipDecryption?: boolean; } export default async function uploader( worker: any, @@ -75,9 +74,8 @@ export default async function uploader( resultFile.collectionID = collection.id; await addToCollection(collection, [resultFile]); return { - fileUploadResult: UPLOAD_RESULT.UPLOADED, + fileUploadResult: UPLOAD_RESULT.ADDED_SYMLINK, uploadedFile: resultFile, - skipDecryption: true, }; } From 7f76945ddae3fc1607b7c648cc6c8a5bf58a2ba8 Mon Sep 17 00:00:00 2001 From: Abhinav Date: Thu, 23 Jun 2022 16:50:52 +0530 Subject: [PATCH 2/3] change if else to switch case --- src/services/upload/uploadManager.ts | 60 ++++++++++++++-------------- 1 file changed, 31 insertions(+), 29 deletions(-) diff --git a/src/services/upload/uploadManager.ts b/src/services/upload/uploadManager.ts index f711dae86..f3643110b 100644 --- a/src/services/upload/uploadManager.ts +++ b/src/services/upload/uploadManager.ts @@ -357,36 +357,38 @@ class UploadManager { let decryptedFile: EnteFile; logUploadInfo(`uploadedFile ${JSON.stringify(uploadedFile)}`); this.updateElectronRemainingFiles(fileWithCollection); - if ( - fileUploadResult === - UPLOAD_RESULT.LARGER_THAN_AVAILABLE_STORAGE || - fileUploadResult === UPLOAD_RESULT.TOO_LARGE || - fileUploadResult === UPLOAD_RESULT.UNSUPPORTED - ) { - // no-op - } else if ( - fileUploadResult === UPLOAD_RESULT.FAILED || - fileUploadResult === UPLOAD_RESULT.BLOCKED - ) { - this.failedFiles.push(fileWithCollection); - } else if (fileUploadResult === UPLOAD_RESULT.ALREADY_UPLOADED) { - if (isElectron()) { - await watchFolderService.onFileUpload( - fileWithCollection, - uploadedFile - ); + switch (fileUploadResult) { + case UPLOAD_RESULT.LARGER_THAN_AVAILABLE_STORAGE: + case UPLOAD_RESULT.TOO_LARGE: + case UPLOAD_RESULT.UNSUPPORTED: + // no-op + return; + case UPLOAD_RESULT.FAILED: + case UPLOAD_RESULT.BLOCKED: + this.failedFiles.push(fileWithCollection); + return; + case UPLOAD_RESULT.ALREADY_UPLOADED: { + if (isElectron()) { + await watchFolderService.onFileUpload( + fileWithCollection, + uploadedFile + ); + } + return; } - } else if ( - fileUploadResult === UPLOAD_RESULT.UPLOADED || - fileUploadResult === - UPLOAD_RESULT.UPLOADED_WITH_STATIC_THUMBNAIL - ) { - decryptedFile = await decryptFile( - uploadedFile, - fileWithCollection.collection.key - ); - } else { - decryptedFile = uploadedFile; + case UPLOAD_RESULT.UPLOADED: + case UPLOAD_RESULT.UPLOADED_WITH_STATIC_THUMBNAIL: { + decryptedFile = await decryptFile( + uploadedFile, + fileWithCollection.collection.key + ); + break; + } + case UPLOAD_RESULT.ADDED_SYMLINK: + decryptedFile = uploadedFile; + break; + default: + throw Error('invalid result'); } await this.updateExistingFiles(decryptedFile); this.updateExistingCollections(decryptedFile); From 59295f849d1aebfa27cf8420488902c3a339bfa3 Mon Sep 17 00:00:00 2001 From: Abhinav Date: Thu, 23 Jun 2022 16:59:10 +0530 Subject: [PATCH 3/3] reorder cases --- src/services/upload/uploadManager.ts | 34 +++++++++++++--------------- 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/src/services/upload/uploadManager.ts b/src/services/upload/uploadManager.ts index f3643110b..e7678930c 100644 --- a/src/services/upload/uploadManager.ts +++ b/src/services/upload/uploadManager.ts @@ -358,41 +358,39 @@ class UploadManager { logUploadInfo(`uploadedFile ${JSON.stringify(uploadedFile)}`); this.updateElectronRemainingFiles(fileWithCollection); switch (fileUploadResult) { - case UPLOAD_RESULT.LARGER_THAN_AVAILABLE_STORAGE: - case UPLOAD_RESULT.TOO_LARGE: - case UPLOAD_RESULT.UNSUPPORTED: - // no-op - return; case UPLOAD_RESULT.FAILED: case UPLOAD_RESULT.BLOCKED: this.failedFiles.push(fileWithCollection); - return; - case UPLOAD_RESULT.ALREADY_UPLOADED: { + break; + case UPLOAD_RESULT.ALREADY_UPLOADED: if (isElectron()) { await watchFolderService.onFileUpload( fileWithCollection, uploadedFile ); } - return; - } + break; + case UPLOAD_RESULT.ADDED_SYMLINK: + decryptedFile = uploadedFile; + break; case UPLOAD_RESULT.UPLOADED: - case UPLOAD_RESULT.UPLOADED_WITH_STATIC_THUMBNAIL: { + case UPLOAD_RESULT.UPLOADED_WITH_STATIC_THUMBNAIL: decryptedFile = await decryptFile( uploadedFile, fileWithCollection.collection.key ); break; - } - case UPLOAD_RESULT.ADDED_SYMLINK: - decryptedFile = uploadedFile; - break; default: - throw Error('invalid result'); + // no-op + } + if (decryptedFile) { + await this.updateExistingFiles(decryptedFile); + this.updateExistingCollections(decryptedFile); + await this.watchFolderCallback( + fileWithCollection, + uploadedFile + ); } - await this.updateExistingFiles(decryptedFile); - this.updateExistingCollections(decryptedFile); - await this.watchFolderCallback(fileWithCollection, uploadedFile); } catch (e) { logError(e, 'failed to do post file upload action'); logUploadInfo(