From b7ffb724c958516b2b9b95e9b423c782835b897a Mon Sep 17 00:00:00 2001 From: Abhinav Date: Tue, 30 May 2023 10:15:55 +0530 Subject: [PATCH 1/8] rename updateMagicMetadataProps to updateMagicMetadata --- .../photos/src/services/upload/magicMetadataService.ts | 4 ++-- apps/photos/src/utils/file/index.ts | 10 +++++----- apps/photos/src/utils/magicMetadata/index.ts | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/apps/photos/src/services/upload/magicMetadataService.ts b/apps/photos/src/services/upload/magicMetadataService.ts index cb286b281..c52bde6d5 100644 --- a/apps/photos/src/services/upload/magicMetadataService.ts +++ b/apps/photos/src/services/upload/magicMetadataService.ts @@ -3,12 +3,12 @@ import { FilePublicMagicMetadataProps, FilePublicMagicMetadata, } from 'types/magicMetadata'; -import { updateMagicMetadataProps } from 'utils/magicMetadata'; +import { updateMagicMetadata } from 'utils/magicMetadata'; export async function constructPublicMagicMetadata( publicMagicMetadataProps: FilePublicMagicMetadataProps ): Promise { - const pubMagicMetadata = await updateMagicMetadataProps( + const pubMagicMetadata = await updateMagicMetadata( NEW_FILE_MAGIC_METADATA, null, publicMagicMetadataProps diff --git a/apps/photos/src/utils/file/index.ts b/apps/photos/src/utils/file/index.ts index 060aa18a4..e679a4f7b 100644 --- a/apps/photos/src/utils/file/index.ts +++ b/apps/photos/src/utils/file/index.ts @@ -25,7 +25,7 @@ import { NEW_FILE_MAGIC_METADATA, VISIBILITY_STATE, } from 'types/magicMetadata'; -import { IsArchived, updateMagicMetadataProps } from 'utils/magicMetadata'; +import { IsArchived, updateMagicMetadata } from 'utils/magicMetadata'; import { addLogLine } from 'utils/logging'; import { CustomError } from 'utils/error'; @@ -360,7 +360,7 @@ export async function changeFilesVisibility( updatedFiles.push({ ...file, - magicMetadata: await updateMagicMetadataProps( + magicMetadata: await updateMagicMetadata( file.magicMetadata ?? NEW_FILE_MAGIC_METADATA, file.key, updatedMagicMetadataProps @@ -377,7 +377,7 @@ export async function changeFileCreationTime( const updatedPublicMagicMetadataProps: FilePublicMagicMetadataProps = { editedTime, }; - file.pubMagicMetadata = await updateMagicMetadataProps( + file.pubMagicMetadata = await updateMagicMetadata( file.pubMagicMetadata ?? NEW_FILE_MAGIC_METADATA, file.key, updatedPublicMagicMetadataProps @@ -390,7 +390,7 @@ export async function changeFileName(file: EnteFile, editedName: string) { editedName, }; - file.pubMagicMetadata = await updateMagicMetadataProps( + file.pubMagicMetadata = await updateMagicMetadata( file.pubMagicMetadata ?? NEW_FILE_MAGIC_METADATA, file.key, updatedPublicMagicMetadataProps @@ -403,7 +403,7 @@ export async function changeCaption(file: EnteFile, caption: string) { caption, }; - file.pubMagicMetadata = await updateMagicMetadataProps( + file.pubMagicMetadata = await updateMagicMetadata( file.pubMagicMetadata ?? NEW_FILE_MAGIC_METADATA, file.key, updatedPublicMagicMetadataProps diff --git a/apps/photos/src/utils/magicMetadata/index.ts b/apps/photos/src/utils/magicMetadata/index.ts index e8c9d0f52..3883330ca 100644 --- a/apps/photos/src/utils/magicMetadata/index.ts +++ b/apps/photos/src/utils/magicMetadata/index.ts @@ -20,7 +20,7 @@ export function IsArchived(item: Collection | EnteFile) { return item.magicMetadata.data.visibility === VISIBILITY_STATE.ARCHIVED; } -export async function updateMagicMetadataProps( +export async function updateMagicMetadata( originalMagicMetadata: MagicMetadataCore, decryptionKey: string, magicMetadataUpdates: Record From 4f8a8d52ef764be1de40c2e63022de564586ad98 Mon Sep 17 00:00:00 2001 From: Abhinav Date: Tue, 30 May 2023 10:20:35 +0530 Subject: [PATCH 2/8] update updateCollectionMagicMetadata service to accept updatedMagicMetadata as second prop and move updateCollectionSubType to util --- apps/photos/src/services/collectionService.ts | 40 ++++++------------- apps/photos/src/utils/collection/index.ts | 34 +++++++++++----- 2 files changed, 36 insertions(+), 38 deletions(-) diff --git a/apps/photos/src/services/collectionService.ts b/apps/photos/src/services/collectionService.ts index b74968749..5f36d9bfb 100644 --- a/apps/photos/src/services/collectionService.ts +++ b/apps/photos/src/services/collectionService.ts @@ -47,7 +47,7 @@ import { SUB_TYPE, UpdateMagicMetadataRequest, } from 'types/magicMetadata'; -import { IsArchived, updateMagicMetadataProps } from 'utils/magicMetadata'; +import { IsArchived, updateMagicMetadata } from 'utils/magicMetadata'; import { User } from 'types/user'; import { isQuickLinkCollection, @@ -58,6 +58,7 @@ import { isHiddenCollection, isValidReplacementAlbum, getNonHiddenCollections, + changeCollectionSubType, } from 'utils/collection'; import ComlinkCryptoWorker from 'utils/comlink/ComlinkCryptoWorker'; import { getLocalFiles } from './fileService'; @@ -345,7 +346,7 @@ const createCollection = async ( await cryptoWorker.encryptUTF8(collectionName, collectionKey); let encryptedMagicMetadata: EncryptedMagicMetadata; if (magicMetadataProps) { - const magicMetadata = await updateMagicMetadataProps( + const magicMetadata = await updateMagicMetadata( NEW_COLLECTION_MAGIC_METADATA, null, magicMetadataProps @@ -711,7 +712,10 @@ export const leaveSharedAlbum = async (collectionID: number) => { } }; -export const updateCollectionMagicMetadata = async (collection: Collection) => { +export const updateCollectionMagicMetadata = async ( + collection: Collection, + updatedMagicMetadata: CollectionMagicMetadata +) => { const token = getToken(); if (!token) { return; @@ -720,15 +724,15 @@ export const updateCollectionMagicMetadata = async (collection: Collection) => { const cryptoWorker = await ComlinkCryptoWorker.getInstance(); const { file: encryptedMagicMetadata } = await cryptoWorker.encryptMetadata( - collection.magicMetadata.data, + updatedMagicMetadata.data, collection.key ); const reqBody: UpdateMagicMetadataRequest = { id: collection.id, magicMetadata: { - version: collection.magicMetadata.version, - count: collection.magicMetadata.count, + version: updatedMagicMetadata.version, + count: updatedMagicMetadata.count, data: encryptedMagicMetadata.encryptedData, header: encryptedMagicMetadata.decryptionHeader, }, @@ -745,8 +749,8 @@ export const updateCollectionMagicMetadata = async (collection: Collection) => { const updatedCollection: Collection = { ...collection, magicMetadata: { - ...collection.magicMetadata, - version: collection.magicMetadata.version + 1, + ...updatedMagicMetadata, + version: updatedMagicMetadata.version + 1, }, }; return updatedCollection; @@ -758,7 +762,7 @@ export const renameCollection = async ( ) => { if (isQuickLinkCollection(collection)) { // Convert quick link collection to normal collection on rename - await updateCollectionSubType(collection, SUB_TYPE.DEFAULT); + await changeCollectionSubType(collection, SUB_TYPE.DEFAULT); } const token = getToken(); const cryptoWorker = await ComlinkCryptoWorker.getInstance(); @@ -779,24 +783,6 @@ export const renameCollection = async ( ); }; -const updateCollectionSubType = async ( - collection: Collection, - subType: SUB_TYPE -) => { - const updatedMagicMetadataProps: CollectionMagicMetadataProps = { - subType: subType, - }; - const updatedCollection = { - ...collection, - magicMetadata: await updateMagicMetadataProps( - collection.magicMetadata ?? NEW_COLLECTION_MAGIC_METADATA, - collection.key, - updatedMagicMetadataProps - ), - } as Collection; - await updateCollectionMagicMetadata(updatedCollection); -}; - export const shareCollection = async ( collection: Collection, withUserEmail: string diff --git a/apps/photos/src/utils/collection/index.ts b/apps/photos/src/utils/collection/index.ts index 0aa411937..ec6375bcb 100644 --- a/apps/photos/src/utils/collection/index.ts +++ b/apps/photos/src/utils/collection/index.ts @@ -33,7 +33,7 @@ import { SUB_TYPE, VISIBILITY_STATE, } from 'types/magicMetadata'; -import { IsArchived, updateMagicMetadataProps } from 'utils/magicMetadata'; +import { IsArchived, updateMagicMetadata } from 'utils/magicMetadata'; import { getAlbumsURL } from 'utils/common/apiUtil'; import bs58 from 'bs58'; import { t } from 'i18next'; @@ -165,16 +165,12 @@ export const changeCollectionVisibility = async ( visibility, }; - const updatedCollection = { - ...collection, - magicMetadata: await updateMagicMetadataProps( - collection.magicMetadata ?? NEW_COLLECTION_MAGIC_METADATA, - collection.key, - updatedMagicMetadataProps - ), - } as Collection; - - await updateCollectionMagicMetadata(updatedCollection); + const updatedMagicMetadata = await updateMagicMetadata( + collection.magicMetadata ?? NEW_COLLECTION_MAGIC_METADATA, + collection.key, + updatedMagicMetadataProps + ); + await updateCollectionMagicMetadata(collection, updatedMagicMetadata); } catch (e) { logError(e, 'change file visibility failed'); switch (e.status?.toString()) { @@ -185,6 +181,22 @@ export const changeCollectionVisibility = async ( } }; +export const changeCollectionSubType = async ( + collection: Collection, + subType: SUB_TYPE +) => { + const updatedMagicMetadataProps: CollectionMagicMetadataProps = { + subType: subType, + }; + + const updatedMagicMetadata = await updateMagicMetadata( + collection.magicMetadata ?? NEW_COLLECTION_MAGIC_METADATA, + collection.key, + updatedMagicMetadataProps + ); + await updateCollectionMagicMetadata(collection, updatedMagicMetadata); +}; + export const getArchivedCollections = (collections: Collection[]) => { return new Set( collections.filter(IsArchived).map((collection) => collection.id) From 14a0f75e03a73f0c65dc6786e41919e7cf2d559e Mon Sep 17 00:00:00 2001 From: Abhinav Date: Tue, 30 May 2023 10:33:49 +0530 Subject: [PATCH 3/8] updated updateFileMagicMetadata service to accept a list of files with updated magic metadata --- apps/photos/src/pages/gallery/index.tsx | 7 +----- apps/photos/src/services/fileService.ts | 33 +++++++++++++++---------- apps/photos/src/types/file/index.ts | 5 ++++ apps/photos/src/utils/file/index.ts | 18 +++++++++----- 4 files changed, 38 insertions(+), 25 deletions(-) diff --git a/apps/photos/src/pages/gallery/index.tsx b/apps/photos/src/pages/gallery/index.tsx index 3a15b6185..932aac5a4 100644 --- a/apps/photos/src/pages/gallery/index.tsx +++ b/apps/photos/src/pages/gallery/index.tsx @@ -11,7 +11,6 @@ import { clearKeys, getKey, SESSION_KEYS } from 'utils/storage/sessionStorage'; import { getLocalFiles, syncFiles, - updateFileMagicMetadata, trashFiles, deleteFromTrash, getLocalHiddenFiles, @@ -658,11 +657,7 @@ export default function Gallery() { startLoading(); try { const selectedFiles = getSelectedFiles(selected, filteredData); - const updatedFiles = await changeFilesVisibility( - selectedFiles, - visibility - ); - await updateFileMagicMetadata(updatedFiles); + await changeFilesVisibility(selectedFiles, visibility); clearSelection(); } catch (e) { logError(e, 'change file visibility failed'); diff --git a/apps/photos/src/services/fileService.ts b/apps/photos/src/services/fileService.ts index f9c07d39b..435de8ed7 100644 --- a/apps/photos/src/services/fileService.ts +++ b/apps/photos/src/services/fileService.ts @@ -12,7 +12,12 @@ import { sortFiles, } from 'utils/file'; import { eventBus, Events } from './events'; -import { EnteFile, EncryptedEnteFile, TrashRequest } from 'types/file'; +import { + EnteFile, + EncryptedEnteFile, + TrashRequest, + FileWithUpdatedMagicMetadata, +} from 'types/file'; import { SetFiles } from 'types/gallery'; import { BulkUpdateMagicMetadataRequest } from 'types/magicMetadata'; import { addLogLine } from 'utils/logging'; @@ -250,24 +255,26 @@ export const deleteFromTrash = async (filesToDelete: number[]) => { } }; -export const updateFileMagicMetadata = async (files: EnteFile[]) => { +export const updateFileMagicMetadata = async ( + fileWithUpdatedMagicMetadataList: FileWithUpdatedMagicMetadata[] +) => { const token = getToken(); if (!token) { return; } const reqBody: BulkUpdateMagicMetadataRequest = { metadataList: [] }; const cryptoWorker = await ComlinkCryptoWorker.getInstance(); - for (const file of files) { + for (const { + file, + updatedMagicMetadata, + } of fileWithUpdatedMagicMetadataList) { const { file: encryptedMagicMetadata } = - await cryptoWorker.encryptMetadata( - file.magicMetadata.data, - file.key - ); + await cryptoWorker.encryptMetadata(updatedMagicMetadata, file.key); reqBody.metadataList.push({ id: file.id, magicMetadata: { - version: file.magicMetadata.version, - count: file.magicMetadata.count, + version: updatedMagicMetadata.version, + count: updatedMagicMetadata.count, data: encryptedMagicMetadata.encryptedData, header: encryptedMagicMetadata.decryptionHeader, }, @@ -276,12 +283,12 @@ export const updateFileMagicMetadata = async (files: EnteFile[]) => { await HTTPService.put(`${ENDPOINT}/files/magic-metadata`, reqBody, null, { 'X-Auth-Token': token, }); - return files.map( - (file): EnteFile => ({ + return fileWithUpdatedMagicMetadataList.map( + ({ file, updatedMagicMetadata }): EnteFile => ({ ...file, magicMetadata: { - ...file.magicMetadata, - version: file.magicMetadata.version + 1, + ...updatedMagicMetadata, + version: updatedMagicMetadata.version + 1, }, }) ); diff --git a/apps/photos/src/types/file/index.ts b/apps/photos/src/types/file/index.ts index ffcf99587..d4311eabc 100644 --- a/apps/photos/src/types/file/index.ts +++ b/apps/photos/src/types/file/index.ts @@ -70,3 +70,8 @@ export interface TrashRequestItems { fileID: number; collectionID: number; } + +export interface FileWithUpdatedMagicMetadata { + file: EnteFile; + updatedMagicMetadata: FileMagicMetadata; +} diff --git a/apps/photos/src/utils/file/index.ts b/apps/photos/src/utils/file/index.ts index e679a4f7b..c67287efb 100644 --- a/apps/photos/src/utils/file/index.ts +++ b/apps/photos/src/utils/file/index.ts @@ -1,5 +1,9 @@ import { SelectedState } from 'types/gallery'; -import { EnteFile, EncryptedEnteFile } from 'types/file'; +import { + EnteFile, + EncryptedEnteFile, + FileWithUpdatedMagicMetadata, +} from 'types/file'; import { decodeLivePhoto } from 'services/livePhotoService'; import { getFileType } from 'services/typeDetectionService'; import DownloadManager from 'services/downloadManager'; @@ -31,6 +35,7 @@ import { addLogLine } from 'utils/logging'; import { CustomError } from 'utils/error'; import { convertBytesToHumanReadable } from './size'; import ComlinkCryptoWorker from 'utils/comlink/ComlinkCryptoWorker'; +import { updateFileMagicMetadata } from 'services/fileService'; const WAIT_TIME_IMAGE_CONVERSION = 30 * 1000; @@ -352,22 +357,23 @@ export async function changeFilesVisibility( files: EnteFile[], visibility: VISIBILITY_STATE ) { - const updatedFiles: EnteFile[] = []; + const fileWithUpdatedMagicMetadataList: FileWithUpdatedMagicMetadata[] = []; for (const file of files) { const updatedMagicMetadataProps: FileMagicMetadataProps = { visibility, }; - updatedFiles.push({ - ...file, - magicMetadata: await updateMagicMetadata( + fileWithUpdatedMagicMetadataList.push({ + file, + updatedMagicMetadata: await updateMagicMetadata( file.magicMetadata ?? NEW_FILE_MAGIC_METADATA, file.key, updatedMagicMetadataProps ), }); } - return updatedFiles; + await updateFileMagicMetadata(fileWithUpdatedMagicMetadataList); + return fileWithUpdatedMagicMetadataList; } export async function changeFileCreationTime( From 68cdf5abdac7b3afff3cd4c35ec0769181af1430 Mon Sep 17 00:00:00 2001 From: Abhinav Date: Tue, 30 May 2023 10:42:09 +0530 Subject: [PATCH 4/8] updated updateFilePublicMagicMetadata to accept a list of files with updated public magic metadata --- apps/photos/src/services/fileService.ts | 24 ++++--- .../services/updateCreationTimeWithExif.ts | 6 +- apps/photos/src/types/file/index.ts | 5 ++ apps/photos/src/utils/file/index.ts | 62 ++++++++++++------- 4 files changed, 61 insertions(+), 36 deletions(-) diff --git a/apps/photos/src/services/fileService.ts b/apps/photos/src/services/fileService.ts index 435de8ed7..c3d3a33eb 100644 --- a/apps/photos/src/services/fileService.ts +++ b/apps/photos/src/services/fileService.ts @@ -17,6 +17,7 @@ import { EncryptedEnteFile, TrashRequest, FileWithUpdatedMagicMetadata, + FileWithUpdatedPublicMagicMetadata, } from 'types/file'; import { SetFiles } from 'types/gallery'; import { BulkUpdateMagicMetadataRequest } from 'types/magicMetadata'; @@ -294,24 +295,29 @@ export const updateFileMagicMetadata = async ( ); }; -export const updateFilePublicMagicMetadata = async (files: EnteFile[]) => { +export const updateFilePublicMagicMetadata = async ( + fileWithUpdatedPublicMagicMetadataList: FileWithUpdatedPublicMagicMetadata[] +) => { const token = getToken(); if (!token) { return; } const reqBody: BulkUpdateMagicMetadataRequest = { metadataList: [] }; const cryptoWorker = await ComlinkCryptoWorker.getInstance(); - for (const file of files) { + for (const { + file, + updatedPublicMagicMetadata: updatePublicMagicMetadata, + } of fileWithUpdatedPublicMagicMetadataList) { const { file: encryptedPubMagicMetadata } = await cryptoWorker.encryptMetadata( - file.pubMagicMetadata.data, + updatePublicMagicMetadata.data, file.key ); reqBody.metadataList.push({ id: file.id, magicMetadata: { - version: file.pubMagicMetadata.version, - count: file.pubMagicMetadata.count, + version: updatePublicMagicMetadata.version, + count: updatePublicMagicMetadata.count, data: encryptedPubMagicMetadata.encryptedData, header: encryptedPubMagicMetadata.decryptionHeader, }, @@ -325,12 +331,12 @@ export const updateFilePublicMagicMetadata = async (files: EnteFile[]) => { 'X-Auth-Token': token, } ); - return files.map( - (file): EnteFile => ({ + return fileWithUpdatedPublicMagicMetadataList.map( + ({ file, updatedPublicMagicMetadata }): EnteFile => ({ ...file, pubMagicMetadata: { - ...file.pubMagicMetadata, - version: file.pubMagicMetadata.version + 1, + ...updatedPublicMagicMetadata, + version: updatedPublicMagicMetadata.version + 1, }, }) ); diff --git a/apps/photos/src/services/updateCreationTimeWithExif.ts b/apps/photos/src/services/updateCreationTimeWithExif.ts index 52de86cb9..19a352827 100644 --- a/apps/photos/src/services/updateCreationTimeWithExif.ts +++ b/apps/photos/src/services/updateCreationTimeWithExif.ts @@ -7,7 +7,6 @@ import { } from 'utils/file'; import { logError } from 'utils/sentry'; import downloadManager from './downloadManager'; -import { updateFilePublicMagicMetadata } from './fileService'; import { EnteFile } from 'types/file'; import { getParsedExifData } from './upload/exifService'; @@ -66,13 +65,10 @@ export async function updateCreationTimeWithExif( correctCreationTime && correctCreationTime !== file.metadata.creationTime ) { - let updatedFile = await changeFileCreationTime( + const updatedFile = await changeFileCreationTime( file, correctCreationTime ); - updatedFile = ( - await updateFilePublicMagicMetadata([updatedFile]) - )[0]; updateExistingFilePubMetadata(file, updatedFile); } } catch (e) { diff --git a/apps/photos/src/types/file/index.ts b/apps/photos/src/types/file/index.ts index d4311eabc..5b4e3c37f 100644 --- a/apps/photos/src/types/file/index.ts +++ b/apps/photos/src/types/file/index.ts @@ -75,3 +75,8 @@ export interface FileWithUpdatedMagicMetadata { file: EnteFile; updatedMagicMetadata: FileMagicMetadata; } + +export interface FileWithUpdatedPublicMagicMetadata { + file: EnteFile; + updatedPublicMagicMetadata: FilePublicMagicMetadata; +} diff --git a/apps/photos/src/utils/file/index.ts b/apps/photos/src/utils/file/index.ts index c67287efb..6fd02c227 100644 --- a/apps/photos/src/utils/file/index.ts +++ b/apps/photos/src/utils/file/index.ts @@ -35,7 +35,10 @@ import { addLogLine } from 'utils/logging'; import { CustomError } from 'utils/error'; import { convertBytesToHumanReadable } from './size'; import ComlinkCryptoWorker from 'utils/comlink/ComlinkCryptoWorker'; -import { updateFileMagicMetadata } from 'services/fileService'; +import { + updateFileMagicMetadata, + updateFilePublicMagicMetadata, +} from 'services/fileService'; const WAIT_TIME_IMAGE_CONVERSION = 30 * 1000; @@ -379,42 +382,57 @@ export async function changeFilesVisibility( export async function changeFileCreationTime( file: EnteFile, editedTime: number -) { +): Promise { const updatedPublicMagicMetadataProps: FilePublicMagicMetadataProps = { editedTime, }; - file.pubMagicMetadata = await updateMagicMetadata( - file.pubMagicMetadata ?? NEW_FILE_MAGIC_METADATA, - file.key, - updatedPublicMagicMetadataProps - ); - return file; + const updatedPublicMagicMetadata: FilePublicMagicMetadata = + await updateMagicMetadata( + file.pubMagicMetadata ?? NEW_FILE_MAGIC_METADATA, + file.key, + updatedPublicMagicMetadataProps + ); + return await updateFilePublicMagicMetadata([ + { file, updatedPublicMagicMetadata }, + ])[0]; } -export async function changeFileName(file: EnteFile, editedName: string) { +export async function changeFileName( + file: EnteFile, + editedName: string +): Promise { const updatedPublicMagicMetadataProps: FilePublicMagicMetadataProps = { editedName, }; - file.pubMagicMetadata = await updateMagicMetadata( - file.pubMagicMetadata ?? NEW_FILE_MAGIC_METADATA, - file.key, - updatedPublicMagicMetadataProps - ); - return file; + const updatedPublicMagicMetadata: FilePublicMagicMetadata = + await updateMagicMetadata( + file.pubMagicMetadata ?? NEW_FILE_MAGIC_METADATA, + file.key, + updatedPublicMagicMetadataProps + ); + return await updateFilePublicMagicMetadata([ + { file, updatedPublicMagicMetadata }, + ])[0]; } -export async function changeCaption(file: EnteFile, caption: string) { +export async function changeCaption( + file: EnteFile, + caption: string +): Promise { const updatedPublicMagicMetadataProps: FilePublicMagicMetadataProps = { caption, }; - file.pubMagicMetadata = await updateMagicMetadata( - file.pubMagicMetadata ?? NEW_FILE_MAGIC_METADATA, - file.key, - updatedPublicMagicMetadataProps - ); - return file; + const updatedPublicMagicMetadata: FilePublicMagicMetadata = + await updateMagicMetadata( + file.pubMagicMetadata ?? NEW_FILE_MAGIC_METADATA, + file.key, + updatedPublicMagicMetadataProps + ); + return await updateFilePublicMagicMetadata([ + { file, updatedPublicMagicMetadata }, + ])[0]; } export function isSharedFile(user: User, file: EnteFile) { From a05de5c67eb2761c8be21267c7ce2cbdbb966995 Mon Sep 17 00:00:00 2001 From: Abhinav Date: Tue, 30 May 2023 16:01:07 +0530 Subject: [PATCH 5/8] fix build issues --- .../PhotoViewer/FileInfo/RenderCaption.tsx | 6 +--- .../FileInfo/RenderCreationTime.tsx | 6 +--- .../PhotoViewer/FileInfo/RenderFileName.tsx | 6 +--- apps/photos/src/utils/collection/index.ts | 31 ++++++++++--------- apps/photos/src/utils/file/index.ts | 5 ++- 5 files changed, 21 insertions(+), 33 deletions(-) diff --git a/apps/photos/src/components/PhotoViewer/FileInfo/RenderCaption.tsx b/apps/photos/src/components/PhotoViewer/FileInfo/RenderCaption.tsx index 0cd38c5b5..a0c9ba842 100644 --- a/apps/photos/src/components/PhotoViewer/FileInfo/RenderCaption.tsx +++ b/apps/photos/src/components/PhotoViewer/FileInfo/RenderCaption.tsx @@ -1,5 +1,4 @@ import React, { useState } from 'react'; -import { updateFilePublicMagicMetadata } from 'services/fileService'; import { EnteFile } from 'types/file'; import { changeCaption, updateExistingFilePubMetadata } from 'utils/file'; import { logError } from 'utils/sentry'; @@ -41,10 +40,7 @@ export function RenderCaption({ } setCaption(newCaption); - let updatedFile = await changeCaption(file, newCaption); - updatedFile = ( - await updateFilePublicMagicMetadata([updatedFile]) - )[0]; + const updatedFile = await changeCaption(file, newCaption); updateExistingFilePubMetadata(file, updatedFile); file.title = file.pubMagicMetadata.data.caption; refreshPhotoswipe(); diff --git a/apps/photos/src/components/PhotoViewer/FileInfo/RenderCreationTime.tsx b/apps/photos/src/components/PhotoViewer/FileInfo/RenderCreationTime.tsx index 5a0c6662b..47910988b 100644 --- a/apps/photos/src/components/PhotoViewer/FileInfo/RenderCreationTime.tsx +++ b/apps/photos/src/components/PhotoViewer/FileInfo/RenderCreationTime.tsx @@ -1,5 +1,4 @@ import React, { useState } from 'react'; -import { updateFilePublicMagicMetadata } from 'services/fileService'; import { EnteFile } from 'types/file'; import CalendarTodayIcon from '@mui/icons-material/CalendarToday'; import { @@ -37,13 +36,10 @@ export function RenderCreationTime({ closeEditMode(); return; } - let updatedFile = await changeFileCreationTime( + const updatedFile = await changeFileCreationTime( file, unixTimeInMicroSec ); - updatedFile = ( - await updateFilePublicMagicMetadata([updatedFile]) - )[0]; updateExistingFilePubMetadata(file, updatedFile); scheduleUpdate(); } diff --git a/apps/photos/src/components/PhotoViewer/FileInfo/RenderFileName.tsx b/apps/photos/src/components/PhotoViewer/FileInfo/RenderFileName.tsx index f0d9303e7..a7d58a524 100644 --- a/apps/photos/src/components/PhotoViewer/FileInfo/RenderFileName.tsx +++ b/apps/photos/src/components/PhotoViewer/FileInfo/RenderFileName.tsx @@ -1,5 +1,4 @@ import React, { useEffect, useState } from 'react'; -import { updateFilePublicMagicMetadata } from 'services/fileService'; import { EnteFile } from 'types/file'; import { changeFileName, @@ -82,10 +81,7 @@ export function RenderFileName({ } setFilename(newFilename); const newTitle = getFileTitle(newFilename, extension); - let updatedFile = await changeFileName(file, newTitle); - updatedFile = ( - await updateFilePublicMagicMetadata([updatedFile]) - )[0]; + const updatedFile = await changeFileName(file, newTitle); updateExistingFilePubMetadata(file, updatedFile); scheduleUpdate(); } diff --git a/apps/photos/src/utils/collection/index.ts b/apps/photos/src/utils/collection/index.ts index ec6375bcb..44840bd25 100644 --- a/apps/photos/src/utils/collection/index.ts +++ b/apps/photos/src/utils/collection/index.ts @@ -10,7 +10,7 @@ import { import { downloadFiles } from 'utils/file'; import { getLocalFiles, getLocalHiddenFiles } from 'services/fileService'; import { EnteFile } from 'types/file'; -import { CustomError, ServerErrorCodes } from 'utils/error'; +import { CustomError } from 'utils/error'; import { User } from 'types/user'; import { getData, LS_KEYS } from 'utils/storage/localStorage'; import { logError } from 'utils/sentry'; @@ -172,11 +172,7 @@ export const changeCollectionVisibility = async ( ); await updateCollectionMagicMetadata(collection, updatedMagicMetadata); } catch (e) { - logError(e, 'change file visibility failed'); - switch (e.status?.toString()) { - case ServerErrorCodes.FORBIDDEN: - throw Error(CustomError.NOT_FILE_OWNER); - } + logError(e, 'change collection visibility failed'); throw e; } }; @@ -185,16 +181,21 @@ export const changeCollectionSubType = async ( collection: Collection, subType: SUB_TYPE ) => { - const updatedMagicMetadataProps: CollectionMagicMetadataProps = { - subType: subType, - }; + try { + const updatedMagicMetadataProps: CollectionMagicMetadataProps = { + subType: subType, + }; - const updatedMagicMetadata = await updateMagicMetadata( - collection.magicMetadata ?? NEW_COLLECTION_MAGIC_METADATA, - collection.key, - updatedMagicMetadataProps - ); - await updateCollectionMagicMetadata(collection, updatedMagicMetadata); + const updatedMagicMetadata = await updateMagicMetadata( + collection.magicMetadata ?? NEW_COLLECTION_MAGIC_METADATA, + collection.key, + updatedMagicMetadataProps + ); + await updateCollectionMagicMetadata(collection, updatedMagicMetadata); + } catch (e) { + logError(e, 'change collection subType failed'); + throw e; + } }; export const getArchivedCollections = (collections: Collection[]) => { diff --git a/apps/photos/src/utils/file/index.ts b/apps/photos/src/utils/file/index.ts index 6fd02c227..d854772c7 100644 --- a/apps/photos/src/utils/file/index.ts +++ b/apps/photos/src/utils/file/index.ts @@ -359,7 +359,7 @@ export function isExactTypeHEIC(exactType: string) { export async function changeFilesVisibility( files: EnteFile[], visibility: VISIBILITY_STATE -) { +): Promise { const fileWithUpdatedMagicMetadataList: FileWithUpdatedMagicMetadata[] = []; for (const file of files) { const updatedMagicMetadataProps: FileMagicMetadataProps = { @@ -375,8 +375,7 @@ export async function changeFilesVisibility( ), }); } - await updateFileMagicMetadata(fileWithUpdatedMagicMetadataList); - return fileWithUpdatedMagicMetadataList; + return await updateFileMagicMetadata(fileWithUpdatedMagicMetadataList); } export async function changeFileCreationTime( From ef56487aa20879cc80891d70b6820629e8515c87 Mon Sep 17 00:00:00 2001 From: Abhinav Date: Tue, 30 May 2023 16:18:42 +0530 Subject: [PATCH 6/8] fix changeFileName returning undefined --- apps/photos/src/services/fileService.ts | 2 +- apps/photos/src/utils/file/index.ts | 15 +++++++++------ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/apps/photos/src/services/fileService.ts b/apps/photos/src/services/fileService.ts index c3d3a33eb..ab2b1259c 100644 --- a/apps/photos/src/services/fileService.ts +++ b/apps/photos/src/services/fileService.ts @@ -297,7 +297,7 @@ export const updateFileMagicMetadata = async ( export const updateFilePublicMagicMetadata = async ( fileWithUpdatedPublicMagicMetadataList: FileWithUpdatedPublicMagicMetadata[] -) => { +): Promise => { const token = getToken(); if (!token) { return; diff --git a/apps/photos/src/utils/file/index.ts b/apps/photos/src/utils/file/index.ts index d854772c7..ca7a5d9f7 100644 --- a/apps/photos/src/utils/file/index.ts +++ b/apps/photos/src/utils/file/index.ts @@ -391,9 +391,10 @@ export async function changeFileCreationTime( file.key, updatedPublicMagicMetadataProps ); - return await updateFilePublicMagicMetadata([ + const updateResult = await updateFilePublicMagicMetadata([ { file, updatedPublicMagicMetadata }, - ])[0]; + ]); + return updateResult[0]; } export async function changeFileName( @@ -410,9 +411,10 @@ export async function changeFileName( file.key, updatedPublicMagicMetadataProps ); - return await updateFilePublicMagicMetadata([ + const updateResult = await updateFilePublicMagicMetadata([ { file, updatedPublicMagicMetadata }, - ])[0]; + ]); + return updateResult[0]; } export async function changeCaption( @@ -429,9 +431,10 @@ export async function changeCaption( file.key, updatedPublicMagicMetadataProps ); - return await updateFilePublicMagicMetadata([ + const updateResult = await updateFilePublicMagicMetadata([ { file, updatedPublicMagicMetadata }, - ])[0]; + ]); + return updateResult[0]; } export function isSharedFile(user: User, file: EnteFile) { From d897fbdaf36744fc01957fef380037a656f8ccd8 Mon Sep 17 00:00:00 2001 From: Abhinav Date: Tue, 30 May 2023 16:49:29 +0530 Subject: [PATCH 7/8] fix updateFileMagicMetadata --- apps/photos/src/services/fileService.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/apps/photos/src/services/fileService.ts b/apps/photos/src/services/fileService.ts index ab2b1259c..d50ff6bb3 100644 --- a/apps/photos/src/services/fileService.ts +++ b/apps/photos/src/services/fileService.ts @@ -270,7 +270,10 @@ export const updateFileMagicMetadata = async ( updatedMagicMetadata, } of fileWithUpdatedMagicMetadataList) { const { file: encryptedMagicMetadata } = - await cryptoWorker.encryptMetadata(updatedMagicMetadata, file.key); + await cryptoWorker.encryptMetadata( + updatedMagicMetadata.data, + file.key + ); reqBody.metadataList.push({ id: file.id, magicMetadata: { From 2ffbf47018f0f4cf4cd0ee8c6247d2c6e8a35954 Mon Sep 17 00:00:00 2001 From: Abhinav Date: Tue, 30 May 2023 17:11:22 +0530 Subject: [PATCH 8/8] fix collection card preview image not updating when all files are remove --- .../src/components/Collections/CollectionListBar/index.tsx | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/apps/photos/src/components/Collections/CollectionListBar/index.tsx b/apps/photos/src/components/Collections/CollectionListBar/index.tsx index 1eb69b9ed..84f7c4016 100644 --- a/apps/photos/src/components/Collections/CollectionListBar/index.tsx +++ b/apps/photos/src/components/Collections/CollectionListBar/index.tsx @@ -75,6 +75,10 @@ const CollectionCardContainer = React.memo( areEqual ); +const getItemKey = (index: number, data: ItemData) => { + return `${data.collectionSummaries[index].id}-${data.collectionSummaries[index].latestFile?.id}`; +}; + const CollectionListBar = (props: IProps) => { const { activeCollection, @@ -153,6 +157,7 @@ const CollectionListBar = (props: IProps) => { layout="horizontal" width={width} height={110} + itemKey={getItemKey} itemCount={collectionSummaries.length} itemSize={CollectionListBarCardWidth} useIsScrolling>