refactor
This commit is contained in:
parent
97d9621dc7
commit
0842abf8a3
|
@ -1,7 +1,7 @@
|
||||||
import { FILE_TYPE } from 'constants/file';
|
import { FILE_TYPE } from 'constants/file';
|
||||||
import { LIVE_PHOTO_ASSET_SIZE_LIMIT } from 'constants/upload';
|
import { LIVE_PHOTO_ASSET_SIZE_LIMIT } from 'constants/upload';
|
||||||
import { encodeMotionPhoto } from 'services/motionPhotoService';
|
import { encodeMotionPhoto } from 'services/motionPhotoService';
|
||||||
import { NEW_FILE_MAGIC_METADATA } from 'types/magicMetadata';
|
import { FileMagicMetadata } from 'types/file';
|
||||||
import {
|
import {
|
||||||
ElectronFile,
|
ElectronFile,
|
||||||
FileTypeInfo,
|
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) {
|
export function getLivePhotoSize(livePhotoAssets: LivePhotoAssets) {
|
||||||
return livePhotoAssets.image.size + livePhotoAssets.video.size;
|
return livePhotoAssets.image.size + livePhotoAssets.video.size;
|
||||||
}
|
}
|
||||||
|
@ -190,18 +198,12 @@ export function clusterLivePhotoFiles(mediaFiles: FileWithCollection[]) {
|
||||||
imageAsset.metadata,
|
imageAsset.metadata,
|
||||||
videoAsset.metadata
|
videoAsset.metadata
|
||||||
);
|
);
|
||||||
|
const livePhotoMagicMetadata: FileMagicMetadata['data'] =
|
||||||
|
getLivePhotoMagicMetadata(firstMediaFile);
|
||||||
uploadService.setFileMetadataAndFileTypeInfo(livePhotoLocalID, {
|
uploadService.setFileMetadataAndFileTypeInfo(livePhotoLocalID, {
|
||||||
fileTypeInfo: { ...livePhotoFileTypeInfo },
|
fileTypeInfo: { ...livePhotoFileTypeInfo },
|
||||||
metadata: { ...livePhotoMetadata },
|
metadata: { ...livePhotoMetadata },
|
||||||
magicMetadata: {
|
magicMetadata: { ...livePhotoMagicMetadata },
|
||||||
...NEW_FILE_MAGIC_METADATA,
|
|
||||||
data: {
|
|
||||||
filePaths: [
|
|
||||||
(firstMediaFile.file as any).path as string,
|
|
||||||
(secondMediaFile.file as any).path as string,
|
|
||||||
],
|
|
||||||
},
|
|
||||||
},
|
|
||||||
});
|
});
|
||||||
index += 2;
|
index += 2;
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -6,6 +6,7 @@ import {
|
||||||
sortFiles,
|
sortFiles,
|
||||||
preservePhotoswipeProps,
|
preservePhotoswipeProps,
|
||||||
decryptFile,
|
decryptFile,
|
||||||
|
changeMagicMetadataFilePaths,
|
||||||
} from 'utils/file';
|
} from 'utils/file';
|
||||||
import { logError } from 'utils/sentry';
|
import { logError } from 'utils/sentry';
|
||||||
import { getMetadataJSONMapKey, parseMetadataJSON } from './metadataService';
|
import { getMetadataJSONMapKey, parseMetadataJSON } from './metadataService';
|
||||||
|
@ -40,7 +41,6 @@ import isElectron from 'is-electron';
|
||||||
import ImportService from 'services/importService';
|
import ImportService from 'services/importService';
|
||||||
import watchFolderService from 'services/watchFolder/watchFolderService';
|
import watchFolderService from 'services/watchFolder/watchFolderService';
|
||||||
import { ProgressUpdater } from 'types/upload/ui';
|
import { ProgressUpdater } from 'types/upload/ui';
|
||||||
import { NEW_FILE_MAGIC_METADATA } from 'types/magicMetadata';
|
|
||||||
|
|
||||||
const MAX_CONCURRENT_UPLOADS = 4;
|
const MAX_CONCURRENT_UPLOADS = 4;
|
||||||
const FILE_UPLOAD_COMPLETED = 100;
|
const FILE_UPLOAD_COMPLETED = 100;
|
||||||
|
@ -261,11 +261,8 @@ class UploadManager {
|
||||||
fileTypeInfo
|
fileTypeInfo
|
||||||
)) || null;
|
)) || null;
|
||||||
const magicMetadata = {
|
const magicMetadata = {
|
||||||
...NEW_FILE_MAGIC_METADATA,
|
|
||||||
data: {
|
|
||||||
filePaths: [(file as any).path as string],
|
filePaths: [(file as any).path as string],
|
||||||
},
|
} as FileMagicMetadata['data'];
|
||||||
} as FileMagicMetadata;
|
|
||||||
return { fileTypeInfo, metadata, magicMetadata };
|
return { fileTypeInfo, metadata, magicMetadata };
|
||||||
})();
|
})();
|
||||||
|
|
||||||
|
@ -344,6 +341,15 @@ class UploadManager {
|
||||||
this.existingFiles,
|
this.existingFiles,
|
||||||
fileWithCollection
|
fileWithCollection
|
||||||
);
|
);
|
||||||
|
const filePaths = UploadService.getFileMetadataAndFileTypeInfo(
|
||||||
|
fileWithCollection.localID
|
||||||
|
).magicMetadata.filePaths;
|
||||||
|
await changeMagicMetadataFilePaths(
|
||||||
|
fileUploadResult,
|
||||||
|
uploadedFile,
|
||||||
|
fileWithCollection.collection.key,
|
||||||
|
filePaths
|
||||||
|
);
|
||||||
UIService.moveFileToResultList(
|
UIService.moveFileToResultList(
|
||||||
fileWithCollection.localID,
|
fileWithCollection.localID,
|
||||||
fileUploadResult
|
fileUploadResult
|
||||||
|
|
|
@ -1,10 +1,9 @@
|
||||||
import { EnteFile, FileMagicMetadata } from 'types/file';
|
import { EnteFile } from 'types/file';
|
||||||
import { handleUploadError, CustomError } from 'utils/error';
|
import { handleUploadError, CustomError } from 'utils/error';
|
||||||
import { logError } from 'utils/sentry';
|
import { logError } from 'utils/sentry';
|
||||||
import {
|
import {
|
||||||
findSameFileInCollection,
|
findSameFileInCollection,
|
||||||
findSameFileInOtherCollection,
|
findSameFileInOtherCollection,
|
||||||
getMergedMagicMetadataFilePaths,
|
|
||||||
shouldDedupeAcrossCollection,
|
shouldDedupeAcrossCollection,
|
||||||
} from 'utils/upload';
|
} from 'utils/upload';
|
||||||
import UploadHttpClient from './uploadHttpClient';
|
import UploadHttpClient from './uploadHttpClient';
|
||||||
|
@ -17,10 +16,6 @@ import { logUploadInfo } from 'utils/upload';
|
||||||
import { convertBytesToHumanReadable } from 'utils/billing';
|
import { convertBytesToHumanReadable } from 'utils/billing';
|
||||||
import { sleep } from 'utils/common';
|
import { sleep } from 'utils/common';
|
||||||
import { addToCollection } from 'services/collectionService';
|
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 {
|
interface UploadResponse {
|
||||||
fileUploadResult: UPLOAD_RESULT;
|
fileUploadResult: UPLOAD_RESULT;
|
||||||
|
@ -28,25 +23,6 @@ interface UploadResponse {
|
||||||
skipDecryption?: boolean;
|
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(
|
export default async function uploader(
|
||||||
worker: any,
|
worker: any,
|
||||||
existingFilesInCollection: EnteFile[],
|
existingFilesInCollection: EnteFile[],
|
||||||
|
@ -61,7 +37,7 @@ export default async function uploader(
|
||||||
logUploadInfo(`uploader called for ${fileNameSize}`);
|
logUploadInfo(`uploader called for ${fileNameSize}`);
|
||||||
UIService.setFileProgress(localID, 0);
|
UIService.setFileProgress(localID, 0);
|
||||||
await sleep(0);
|
await sleep(0);
|
||||||
const { fileTypeInfo, metadata, magicMetadata } =
|
const { fileTypeInfo, metadata } =
|
||||||
UploadService.getFileMetadataAndFileTypeInfo(localID);
|
UploadService.getFileMetadataAndFileTypeInfo(localID);
|
||||||
try {
|
try {
|
||||||
const fileSize = UploadService.getAssetSize(uploadAsset);
|
const fileSize = UploadService.getAssetSize(uploadAsset);
|
||||||
|
@ -81,11 +57,6 @@ export default async function uploader(
|
||||||
);
|
);
|
||||||
if (sameFileInSameCollection) {
|
if (sameFileInSameCollection) {
|
||||||
logUploadInfo(`skipped upload for ${fileNameSize}`);
|
logUploadInfo(`skipped upload for ${fileNameSize}`);
|
||||||
await updateMagicMetadata(
|
|
||||||
sameFileInSameCollection,
|
|
||||||
magicMetadata,
|
|
||||||
fileWithCollection.collection.key
|
|
||||||
);
|
|
||||||
return {
|
return {
|
||||||
fileUploadResult: UPLOAD_RESULT.ALREADY_UPLOADED,
|
fileUploadResult: UPLOAD_RESULT.ALREADY_UPLOADED,
|
||||||
uploadedFile: sameFileInSameCollection,
|
uploadedFile: sameFileInSameCollection,
|
||||||
|
@ -104,11 +75,6 @@ export default async function uploader(
|
||||||
const resultFile = Object.assign({}, sameFileInOtherCollection);
|
const resultFile = Object.assign({}, sameFileInOtherCollection);
|
||||||
resultFile.collectionID = collection.id;
|
resultFile.collectionID = collection.id;
|
||||||
await addToCollection(collection, [resultFile]);
|
await addToCollection(collection, [resultFile]);
|
||||||
await updateMagicMetadata(
|
|
||||||
resultFile,
|
|
||||||
magicMetadata,
|
|
||||||
fileWithCollection.collection.key
|
|
||||||
);
|
|
||||||
return {
|
return {
|
||||||
fileUploadResult: UPLOAD_RESULT.UPLOADED,
|
fileUploadResult: UPLOAD_RESULT.UPLOADED,
|
||||||
uploadedFile: resultFile,
|
uploadedFile: resultFile,
|
||||||
|
@ -126,11 +92,6 @@ export default async function uploader(
|
||||||
metadata
|
metadata
|
||||||
);
|
);
|
||||||
if (sameFileInOtherCollection) {
|
if (sameFileInOtherCollection) {
|
||||||
await updateMagicMetadata(
|
|
||||||
sameFileInOtherCollection,
|
|
||||||
magicMetadata,
|
|
||||||
fileWithCollection.collection.key
|
|
||||||
);
|
|
||||||
return {
|
return {
|
||||||
fileUploadResult: UPLOAD_RESULT.ALREADY_UPLOADED,
|
fileUploadResult: UPLOAD_RESULT.ALREADY_UPLOADED,
|
||||||
uploadedFile: sameFileInOtherCollection,
|
uploadedFile: sameFileInOtherCollection,
|
||||||
|
@ -176,11 +137,6 @@ export default async function uploader(
|
||||||
UIService.increaseFileUploaded();
|
UIService.increaseFileUploaded();
|
||||||
logUploadInfo(`${fileNameSize} successfully uploaded`);
|
logUploadInfo(`${fileNameSize} successfully uploaded`);
|
||||||
|
|
||||||
await updateMagicMetadata(
|
|
||||||
uploadedFile,
|
|
||||||
magicMetadata,
|
|
||||||
fileWithCollection.collection.key
|
|
||||||
);
|
|
||||||
return {
|
return {
|
||||||
fileUploadResult: metadata.hasStaticThumbnail
|
fileUploadResult: metadata.hasStaticThumbnail
|
||||||
? UPLOAD_RESULT.UPLOADED_WITH_STATIC_THUMBNAIL
|
? UPLOAD_RESULT.UPLOADED_WITH_STATIC_THUMBNAIL
|
||||||
|
|
|
@ -92,7 +92,7 @@ export interface FileWithCollection extends UploadAsset {
|
||||||
export interface MetadataAndFileTypeInfo {
|
export interface MetadataAndFileTypeInfo {
|
||||||
metadata: Metadata;
|
metadata: Metadata;
|
||||||
fileTypeInfo: FileTypeInfo;
|
fileTypeInfo: FileTypeInfo;
|
||||||
magicMetadata: FileMagicMetadata;
|
magicMetadata: FileMagicMetadata['data'];
|
||||||
}
|
}
|
||||||
|
|
||||||
export type MetadataAndFileTypeInfoMap = Map<number, MetadataAndFileTypeInfo>;
|
export type MetadataAndFileTypeInfoMap = Map<number, MetadataAndFileTypeInfo>;
|
||||||
|
|
|
@ -26,6 +26,8 @@ import ffmpegService from 'services/ffmpeg/ffmpegService';
|
||||||
import { NEW_FILE_MAGIC_METADATA, VISIBILITY_STATE } from 'types/magicMetadata';
|
import { NEW_FILE_MAGIC_METADATA, VISIBILITY_STATE } from 'types/magicMetadata';
|
||||||
import { IsArchived, updateMagicMetadataProps } from 'utils/magicMetadata';
|
import { IsArchived, updateMagicMetadataProps } from 'utils/magicMetadata';
|
||||||
import { ARCHIVE_SECTION, TRASH_SECTION } from 'constants/collection';
|
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) {
|
export function downloadAsFile(filename: string, content: string) {
|
||||||
const file = new Blob([content], {
|
const file = new Blob([content], {
|
||||||
type: 'text/plain',
|
type: 'text/plain',
|
||||||
|
@ -452,6 +454,37 @@ export async function changeFileName(file: EnteFile, editedName: string) {
|
||||||
return file;
|
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) {
|
export function isSharedFile(file: EnteFile) {
|
||||||
const user: User = getData(LS_KEYS.USER);
|
const user: User = getData(LS_KEYS.USER);
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import { ElectronFile, FileWithCollection, Metadata } from 'types/upload';
|
import { ElectronFile, FileWithCollection, Metadata } from 'types/upload';
|
||||||
import { EnteFile, FileMagicMetadata } from 'types/file';
|
import { EnteFile } from 'types/file';
|
||||||
import { convertBytesToHumanReadable } from 'utils/billing';
|
import { convertBytesToHumanReadable } from 'utils/billing';
|
||||||
import { formatDateTime } from 'utils/file';
|
import { formatDateTime } from 'utils/file';
|
||||||
import { getLogs, saveLogLine } from 'utils/storage';
|
import { getLogs, saveLogLine } from 'utils/storage';
|
||||||
|
@ -141,19 +141,3 @@ export function areFileWithCollectionsSame(
|
||||||
): boolean {
|
): boolean {
|
||||||
return firstFile.localID === secondFile.localID;
|
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;
|
|
||||||
}
|
|
||||||
|
|
Loading…
Reference in a new issue