Merge pull request #601 from ente-io/handle-file-permission-denied

better handle metadata extraction error
This commit is contained in:
Abhinav Kumar 2022-06-16 17:39:54 +05:30 committed by GitHub
commit 98e3965365
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -21,6 +21,7 @@ import { CustomError } from 'utils/error';
import { Collection } from 'types/collection'; import { Collection } from 'types/collection';
import { EnteFile } from 'types/file'; import { EnteFile } from 'types/file';
import { import {
ElectronFile,
FileWithCollection, FileWithCollection,
MetadataAndFileTypeInfo, MetadataAndFileTypeInfo,
MetadataAndFileTypeInfoMap, MetadataAndFileTypeInfoMap,
@ -227,50 +228,20 @@ class UploadManager {
logUploadInfo(`extractMetadataFromFiles executed`); logUploadInfo(`extractMetadataFromFiles executed`);
UIService.reset(mediaFiles.length); UIService.reset(mediaFiles.length);
for (const { file, localID, collectionID } of mediaFiles) { for (const { file, localID, collectionID } of mediaFiles) {
let fileTypeInfo = null;
let metadata = null;
try { try {
const { fileTypeInfo, metadata } = await (async () => { const result = await this.extractFileTypeAndMetadata(
if (file.size >= MAX_FILE_SIZE_SUPPORTED) {
logUploadInfo(
`${getFileNameSize(
file
)} rejected because of large size`
);
return { fileTypeInfo: null, metadata: null };
}
const fileTypeInfo = await UploadService.getFileType(
file
);
if (fileTypeInfo.fileType === FILE_TYPE.OTHERS) {
logUploadInfo(
`${getFileNameSize(
file
)} rejected because of unknown file format`
);
return { fileTypeInfo, metadata: null };
}
logUploadInfo(
` extracting ${getFileNameSize(file)} metadata`
);
const metadata =
(await UploadService.extractFileMetadata(
file, file,
collectionID, collectionID
fileTypeInfo );
)) || null; fileTypeInfo = result.fileTypeInfo;
return { fileTypeInfo, metadata }; metadata = result.metadata;
})();
logUploadInfo( logUploadInfo(
`metadata extraction successful${getFileNameSize( `metadata extraction successful${getFileNameSize(
file file
)} ` )} `
); );
this.metadataAndFileTypeInfoMap.set(localID, {
fileTypeInfo: fileTypeInfo && { ...fileTypeInfo },
metadata: metadata && { ...metadata },
});
UIService.increaseFileUploaded();
} catch (e) { } catch (e) {
logError(e, 'metadata extraction failed for a file'); logError(e, 'metadata extraction failed for a file');
logUploadInfo( logUploadInfo(
@ -279,6 +250,11 @@ class UploadManager {
)} error: ${e.message}` )} error: ${e.message}`
); );
} }
this.metadataAndFileTypeInfoMap.set(localID, {
fileTypeInfo: fileTypeInfo && { ...fileTypeInfo },
metadata: metadata && { ...metadata },
});
UIService.increaseFileUploaded();
} }
} catch (e) { } catch (e) {
logError(e, 'error extracting metadata'); logError(e, 'error extracting metadata');
@ -286,6 +262,36 @@ class UploadManager {
} }
} }
private async extractFileTypeAndMetadata(
file: File | ElectronFile,
collectionID: number
) {
if (file.size >= MAX_FILE_SIZE_SUPPORTED) {
logUploadInfo(
`${getFileNameSize(file)} rejected because of large size`
);
return { fileTypeInfo: null, metadata: null };
}
const fileTypeInfo = await UploadService.getFileType(file);
if (fileTypeInfo.fileType === FILE_TYPE.OTHERS) {
logUploadInfo(
`${getFileNameSize(
file
)} rejected because of unknown file format`
);
return { fileTypeInfo, metadata: null };
}
logUploadInfo(` extracting ${getFileNameSize(file)} metadata`);
const metadata =
(await UploadService.extractFileMetadata(
file,
collectionID,
fileTypeInfo
)) || null;
return { fileTypeInfo, metadata };
}
private async uploadMediaFiles(mediaFiles: FileWithCollection[]) { private async uploadMediaFiles(mediaFiles: FileWithCollection[]) {
logUploadInfo(`uploadMediaFiles called`); logUploadInfo(`uploadMediaFiles called`);
this.filesToBeUploaded.push(...mediaFiles); this.filesToBeUploaded.push(...mediaFiles);