This commit is contained in:
Rushikesh Tote 2022-06-23 19:10:19 +05:30
parent 97d9621dc7
commit 0842abf8a3
6 changed files with 61 additions and 80 deletions

View file

@ -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 {

View file

@ -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

View file

@ -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

View file

@ -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<number, MetadataAndFileTypeInfo>;

View file

@ -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);

View file

@ -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;
}