From 168ef19312e0f387023e1ff9604963c872b089b1 Mon Sep 17 00:00:00 2001 From: Abhinav Date: Mon, 24 Apr 2023 21:12:33 +0530 Subject: [PATCH 1/3] handle YYYYMMDD format exif dates --- src/services/upload/exifService.ts | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/src/services/upload/exifService.ts b/src/services/upload/exifService.ts index 2a0cb07fc..6cc140475 100644 --- a/src/services/upload/exifService.ts +++ b/src/services/upload/exifService.ts @@ -107,13 +107,29 @@ function parseExifData(exifData: RawEXIFData): ParsedEXIFData { return parsedExif; } -function parseEXIFDate(dataTimeString: string) { +function parseEXIFDate(dateTimeString: string) { try { - if (typeof dataTimeString !== 'string') { + if (typeof dateTimeString !== 'string') { throw Error(CustomError.NOT_A_DATE); } - const [year, month, day, hour, minute, second] = dataTimeString + // Check and parse date in the format YYYYMMDD + if (dateTimeString.length === 8) { + const year = parseInt(dateTimeString.slice(0, 4), 10); + const month = parseInt(dateTimeString.slice(4, 6), 10); + const day = parseInt(dateTimeString.slice(6, 8), 10); + if ( + !Number.isNaN(year) && + !Number.isNaN(month) && + !Number.isNaN(day) + ) { + const date = new Date(year, month - 1, day); + if (!Number.isNaN(+date)) { + return date; + } + } + } + const [year, month, day, hour, minute, second] = dateTimeString .match(/\d+/g) .map((component) => parseInt(component, 10)); @@ -136,7 +152,7 @@ function parseEXIFDate(dataTimeString: string) { return date; } catch (e) { logError(e, 'parseEXIFDate failed', { - dataTimeString, + dataTimeString: dateTimeString, }); return null; } From 70d8914ff3b4b00cea8bb65828aba7da66550a80 Mon Sep 17 00:00:00 2001 From: Abhinav Date: Mon, 24 Apr 2023 21:15:23 +0530 Subject: [PATCH 2/3] skip filtering and parsing if exif data is null --- src/services/upload/exifService.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/services/upload/exifService.ts b/src/services/upload/exifService.ts index 6cc140475..7f9ea716c 100644 --- a/src/services/upload/exifService.ts +++ b/src/services/upload/exifService.ts @@ -46,6 +46,9 @@ export async function getParsedExifData( jfif: true, ihdr: true, }); + if (!exifData) { + return null; + } const filteredExifData = tags ? Object.fromEntries( Object.entries(exifData).filter(([key]) => tags.includes(key)) From fce639ada5512988fc644675084073eb9fd275a5 Mon Sep 17 00:00:00 2001 From: Abhinav Date: Mon, 24 Apr 2023 21:23:35 +0530 Subject: [PATCH 3/3] refactor --- src/services/upload/exifService.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/upload/exifService.ts b/src/services/upload/exifService.ts index 7f9ea716c..de2a4aa10 100644 --- a/src/services/upload/exifService.ts +++ b/src/services/upload/exifService.ts @@ -155,7 +155,7 @@ function parseEXIFDate(dateTimeString: string) { return date; } catch (e) { logError(e, 'parseEXIFDate failed', { - dataTimeString: dateTimeString, + dateTimeString, }); return null; }