Merge pull request #896 from ente-io/improve-exif-error-logging

improve exif error logging
This commit is contained in:
Abhinav Kumar 2023-01-27 13:15:15 +05:30 committed by GitHub
commit a371c5ba30
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 29 additions and 9 deletions

View file

@ -454,7 +454,9 @@ function PhotoViewer(props: Iprops) {
} catch (e) {
setExif({ key: file.src, value: null });
const fileExtension = getFileExtension(file.metadata.title);
logError(e, 'exifr parsing failed', { extension: fileExtension });
logError(e, 'checkExifAvailable failed', {
extension: fileExtension,
});
}
};

View file

@ -7,7 +7,7 @@ import {
} from 'types/upload';
// list of format that were missed by type-detection for some files.
export const FORMAT_MISSED_BY_FILE_TYPE_LIB = [
export const FILE_TYPE_LIB_MISSED_FORMATS = [
{ fileType: FILE_TYPE.IMAGE, exactType: 'jpeg', mimeType: 'image/jpeg' },
{ fileType: FILE_TYPE.IMAGE, exactType: 'jpg', mimeType: 'image/jpeg' },
{ fileType: FILE_TYPE.VIDEO, exactType: 'webm', mimeType: 'video/webm' },
@ -15,6 +15,10 @@ export const FORMAT_MISSED_BY_FILE_TYPE_LIB = [
{ fileType: FILE_TYPE.VIDEO, exactType: 'mp4', mimeType: 'video/mp4' },
];
export const EXIFLESS_FORMATS = ['image/gif'];
export const EXIF_LIBRARY_UNSUPPORTED_FORMATS = ['image/webp'];
// this is the chunk size of the un-encrypted file which is read and encrypted before uploading it as a single part.
export const MULTIPART_PART_SIZE = 20 * 1024 * 1024;

View file

@ -1,6 +1,6 @@
import { FILE_TYPE } from 'constants/file';
import { ElectronFile, FileTypeInfo } from 'types/upload';
import { FORMAT_MISSED_BY_FILE_TYPE_LIB } from 'constants/upload';
import { FILE_TYPE_LIB_MISSED_FORMATS } from 'constants/upload';
import { CustomError } from 'utils/error';
import { getFileExtension } from 'utils/file';
import { logError } from 'utils/sentry';
@ -46,7 +46,7 @@ export async function getFileType(
};
} catch (e) {
const fileFormat = getFileExtension(receivedFile.name);
const formatMissedByTypeDetection = FORMAT_MISSED_BY_FILE_TYPE_LIB.find(
const formatMissedByTypeDetection = FILE_TYPE_LIB_MISSED_FORMATS.find(
(a) => a.exactType === fileFormat
);
if (formatMissedByTypeDetection) {

View file

@ -1,4 +1,9 @@
import { NULL_EXTRACTED_METADATA, NULL_LOCATION } from 'constants/upload';
import {
EXIFLESS_FORMATS,
EXIF_LIBRARY_UNSUPPORTED_FORMATS,
NULL_EXTRACTED_METADATA,
NULL_LOCATION,
} from 'constants/upload';
import { ElectronFile, Location } from 'types/upload';
import exifr from 'exifr';
import piexif from 'piexifjs';
@ -121,10 +126,19 @@ export async function getRawExif(
try {
exifData = await exifr.parse(receivedFile, EXIF_TAGS_NEEDED);
} catch (e) {
logError(e, 'file missing exif data ', {
if (!EXIFLESS_FORMATS.includes(fileTypeInfo.mimeType)) {
if (
EXIF_LIBRARY_UNSUPPORTED_FORMATS.includes(fileTypeInfo.mimeType)
) {
logError(e, 'exif library unsupported format', {
fileType: fileTypeInfo.exactType,
});
// ignore exif parsing errors
} else {
logError(e, 'get raw exif failed', {
fileType: fileTypeInfo.exactType,
});
}
}
}
return exifData;
}