From 0842abf8a3c16c866d39b8b99a40c55ece7cdfba Mon Sep 17 00:00:00 2001 From: Rushikesh Tote Date: Thu, 23 Jun 2022 19:10:19 +0530 Subject: [PATCH] refactor --- src/services/upload/livePhotoService.ts | 22 ++++++------ src/services/upload/uploadManager.ts | 18 ++++++---- src/services/upload/uploader.ts | 48 ++----------------------- src/types/upload/index.ts | 2 +- src/utils/file/index.ts | 33 +++++++++++++++++ src/utils/upload/index.ts | 18 +--------- 6 files changed, 61 insertions(+), 80 deletions(-) diff --git a/src/services/upload/livePhotoService.ts b/src/services/upload/livePhotoService.ts index 80b84e4f3..740c4da2a 100644 --- a/src/services/upload/livePhotoService.ts +++ b/src/services/upload/livePhotoService.ts @@ -1,7 +1,7 @@ import { FILE_TYPE } from 'constants/file'; import { LIVE_PHOTO_ASSET_SIZE_LIMIT } from 'constants/upload'; import { encodeMotionPhoto } from 'services/motionPhotoService'; -import { NEW_FILE_MAGIC_METADATA } from 'types/magicMetadata'; +import { FileMagicMetadata } from 'types/file'; import { ElectronFile, FileTypeInfo, @@ -62,6 +62,14 @@ export function getLivePhotoMetadata( }; } +export function getLivePhotoMagicMetadata( + imageFile: FileWithCollection +): FileMagicMetadata['data'] { + return { + filePaths: [getLivePhotoName((imageFile.file as any).path as string)], + }; +} + export function getLivePhotoSize(livePhotoAssets: LivePhotoAssets) { return livePhotoAssets.image.size + livePhotoAssets.video.size; } @@ -190,18 +198,12 @@ export function clusterLivePhotoFiles(mediaFiles: FileWithCollection[]) { imageAsset.metadata, videoAsset.metadata ); + const livePhotoMagicMetadata: FileMagicMetadata['data'] = + getLivePhotoMagicMetadata(firstMediaFile); uploadService.setFileMetadataAndFileTypeInfo(livePhotoLocalID, { fileTypeInfo: { ...livePhotoFileTypeInfo }, metadata: { ...livePhotoMetadata }, - magicMetadata: { - ...NEW_FILE_MAGIC_METADATA, - data: { - filePaths: [ - (firstMediaFile.file as any).path as string, - (secondMediaFile.file as any).path as string, - ], - }, - }, + magicMetadata: { ...livePhotoMagicMetadata }, }); index += 2; } else { diff --git a/src/services/upload/uploadManager.ts b/src/services/upload/uploadManager.ts index d546e09be..05dd0adb8 100644 --- a/src/services/upload/uploadManager.ts +++ b/src/services/upload/uploadManager.ts @@ -6,6 +6,7 @@ import { sortFiles, preservePhotoswipeProps, decryptFile, + changeMagicMetadataFilePaths, } from 'utils/file'; import { logError } from 'utils/sentry'; import { getMetadataJSONMapKey, parseMetadataJSON } from './metadataService'; @@ -40,7 +41,6 @@ import isElectron from 'is-electron'; import ImportService from 'services/importService'; import watchFolderService from 'services/watchFolder/watchFolderService'; import { ProgressUpdater } from 'types/upload/ui'; -import { NEW_FILE_MAGIC_METADATA } from 'types/magicMetadata'; const MAX_CONCURRENT_UPLOADS = 4; const FILE_UPLOAD_COMPLETED = 100; @@ -261,11 +261,8 @@ class UploadManager { fileTypeInfo )) || null; const magicMetadata = { - ...NEW_FILE_MAGIC_METADATA, - data: { - filePaths: [(file as any).path as string], - }, - } as FileMagicMetadata; + filePaths: [(file as any).path as string], + } as FileMagicMetadata['data']; return { fileTypeInfo, metadata, magicMetadata }; })(); @@ -344,6 +341,15 @@ class UploadManager { this.existingFiles, fileWithCollection ); + const filePaths = UploadService.getFileMetadataAndFileTypeInfo( + fileWithCollection.localID + ).magicMetadata.filePaths; + await changeMagicMetadataFilePaths( + fileUploadResult, + uploadedFile, + fileWithCollection.collection.key, + filePaths + ); UIService.moveFileToResultList( fileWithCollection.localID, fileUploadResult diff --git a/src/services/upload/uploader.ts b/src/services/upload/uploader.ts index 91e699325..c62522630 100644 --- a/src/services/upload/uploader.ts +++ b/src/services/upload/uploader.ts @@ -1,10 +1,9 @@ -import { EnteFile, FileMagicMetadata } from 'types/file'; +import { EnteFile } from 'types/file'; import { handleUploadError, CustomError } from 'utils/error'; import { logError } from 'utils/sentry'; import { findSameFileInCollection, findSameFileInOtherCollection, - getMergedMagicMetadataFilePaths, shouldDedupeAcrossCollection, } from 'utils/upload'; import UploadHttpClient from './uploadHttpClient'; @@ -17,10 +16,6 @@ import { logUploadInfo } from 'utils/upload'; import { convertBytesToHumanReadable } from 'utils/billing'; import { sleep } from 'utils/common'; import { addToCollection } from 'services/collectionService'; -import { updateMagicMetadataProps } from 'utils/magicMetadata'; -import { updateFileMagicMetadata } from 'services/fileService'; -import { NEW_FILE_MAGIC_METADATA } from 'types/magicMetadata'; -import { getFileKey } from 'utils/file'; interface UploadResponse { fileUploadResult: UPLOAD_RESULT; @@ -28,25 +23,6 @@ interface UploadResponse { skipDecryption?: boolean; } -const updateMagicMetadata = async ( - file: EnteFile, - magicMetadata: FileMagicMetadata, - collectionKey: string -) => { - magicMetadata.data.filePaths = getMergedMagicMetadataFilePaths( - file.magicMetadata, - magicMetadata - ); - file.key = await getFileKey(file, collectionKey); - const updatedMagicMetadata = await updateMagicMetadataProps( - file.magicMetadata ?? NEW_FILE_MAGIC_METADATA, - file.key, - { filePaths: magicMetadata.data.filePaths } - ); - file.magicMetadata = updatedMagicMetadata; - await updateFileMagicMetadata([file]); -}; - export default async function uploader( worker: any, existingFilesInCollection: EnteFile[], @@ -61,7 +37,7 @@ export default async function uploader( logUploadInfo(`uploader called for ${fileNameSize}`); UIService.setFileProgress(localID, 0); await sleep(0); - const { fileTypeInfo, metadata, magicMetadata } = + const { fileTypeInfo, metadata } = UploadService.getFileMetadataAndFileTypeInfo(localID); try { const fileSize = UploadService.getAssetSize(uploadAsset); @@ -81,11 +57,6 @@ export default async function uploader( ); if (sameFileInSameCollection) { logUploadInfo(`skipped upload for ${fileNameSize}`); - await updateMagicMetadata( - sameFileInSameCollection, - magicMetadata, - fileWithCollection.collection.key - ); return { fileUploadResult: UPLOAD_RESULT.ALREADY_UPLOADED, uploadedFile: sameFileInSameCollection, @@ -104,11 +75,6 @@ export default async function uploader( const resultFile = Object.assign({}, sameFileInOtherCollection); resultFile.collectionID = collection.id; await addToCollection(collection, [resultFile]); - await updateMagicMetadata( - resultFile, - magicMetadata, - fileWithCollection.collection.key - ); return { fileUploadResult: UPLOAD_RESULT.UPLOADED, uploadedFile: resultFile, @@ -126,11 +92,6 @@ export default async function uploader( metadata ); if (sameFileInOtherCollection) { - await updateMagicMetadata( - sameFileInOtherCollection, - magicMetadata, - fileWithCollection.collection.key - ); return { fileUploadResult: UPLOAD_RESULT.ALREADY_UPLOADED, uploadedFile: sameFileInOtherCollection, @@ -176,11 +137,6 @@ export default async function uploader( UIService.increaseFileUploaded(); logUploadInfo(`${fileNameSize} successfully uploaded`); - await updateMagicMetadata( - uploadedFile, - magicMetadata, - fileWithCollection.collection.key - ); return { fileUploadResult: metadata.hasStaticThumbnail ? UPLOAD_RESULT.UPLOADED_WITH_STATIC_THUMBNAIL diff --git a/src/types/upload/index.ts b/src/types/upload/index.ts index 0f7716bef..e473f419f 100644 --- a/src/types/upload/index.ts +++ b/src/types/upload/index.ts @@ -92,7 +92,7 @@ export interface FileWithCollection extends UploadAsset { export interface MetadataAndFileTypeInfo { metadata: Metadata; fileTypeInfo: FileTypeInfo; - magicMetadata: FileMagicMetadata; + magicMetadata: FileMagicMetadata['data']; } export type MetadataAndFileTypeInfoMap = Map; diff --git a/src/utils/file/index.ts b/src/utils/file/index.ts index 5a9e0f5e3..2fde13fe2 100644 --- a/src/utils/file/index.ts +++ b/src/utils/file/index.ts @@ -26,6 +26,8 @@ import ffmpegService from 'services/ffmpeg/ffmpegService'; import { NEW_FILE_MAGIC_METADATA, VISIBILITY_STATE } from 'types/magicMetadata'; import { IsArchived, updateMagicMetadataProps } from 'utils/magicMetadata'; import { ARCHIVE_SECTION, TRASH_SECTION } from 'constants/collection'; +import { UPLOAD_RESULT } from 'constants/upload'; +import { updateFileMagicMetadata } from 'services/fileService'; export function downloadAsFile(filename: string, content: string) { const file = new Blob([content], { type: 'text/plain', @@ -452,6 +454,37 @@ export async function changeFileName(file: EnteFile, editedName: string) { return file; } +export const changeMagicMetadataFilePaths = async ( + fileUploadResult: UPLOAD_RESULT, + file: EnteFile, + collectionKey: string, + filePaths: string[] +) => { + if ( + fileUploadResult === UPLOAD_RESULT.UPLOADED || + fileUploadResult === UPLOAD_RESULT.ALREADY_UPLOADED || + fileUploadResult === UPLOAD_RESULT.UPLOADED_WITH_STATIC_THUMBNAIL + ) { + let mergedMetadataFilePaths = [...filePaths]; + if (file.magicMetadata?.data.filePaths?.length > 0) { + mergedMetadataFilePaths = [ + ...new Set([ + ...file.magicMetadata.data.filePaths, + ...filePaths, + ]), + ]; + } + file.key = await getFileKey(file, collectionKey); + const updatedMagicMetadata = await updateMagicMetadataProps( + file.magicMetadata ?? NEW_FILE_MAGIC_METADATA, + file.key, + { filePaths: mergedMetadataFilePaths } + ); + file.magicMetadata = updatedMagicMetadata; + await updateFileMagicMetadata([file]); + } +}; + export function isSharedFile(file: EnteFile) { const user: User = getData(LS_KEYS.USER); diff --git a/src/utils/upload/index.ts b/src/utils/upload/index.ts index a002c29e6..71a27f47b 100644 --- a/src/utils/upload/index.ts +++ b/src/utils/upload/index.ts @@ -1,5 +1,5 @@ import { ElectronFile, FileWithCollection, Metadata } from 'types/upload'; -import { EnteFile, FileMagicMetadata } from 'types/file'; +import { EnteFile } from 'types/file'; import { convertBytesToHumanReadable } from 'utils/billing'; import { formatDateTime } from 'utils/file'; import { getLogs, saveLogLine } from 'utils/storage'; @@ -141,19 +141,3 @@ export function areFileWithCollectionsSame( ): boolean { return firstFile.localID === secondFile.localID; } - -export function getMergedMagicMetadataFilePaths( - oldMetadata: FileMagicMetadata, - newMetadata: FileMagicMetadata -): string[] { - if (!oldMetadata || !oldMetadata.data.filePaths) { - return newMetadata.data.filePaths; - } - const mergedMetadataFilePaths = [...oldMetadata.data.filePaths]; - newMetadata.data.filePaths.forEach((newMetadataFilePath) => { - if (!mergedMetadataFilePaths.includes(newMetadataFilePath)) { - mergedMetadataFilePaths.push(newMetadataFilePath); - } - }); - return mergedMetadataFilePaths; -}