From 2af6115f2a31a2c1338cf4c46a2299e41fd0f3aa Mon Sep 17 00:00:00 2001 From: grasdk <115414609+grasdk@users.noreply.github.com> Date: Thu, 7 Mar 2024 09:29:44 +0100 Subject: [PATCH] Unit test and bugfix for CreationDate (#8) --- .../model/fileaccess/MetadataLoader.ts | 39 +++++++----------- test/backend/assets/wild-1-small.jpg | Bin 0 -> 59564 bytes test/backend/assets/wild-1-small.json | 20 +++++++++ .../model/threading/MetaDataLoader.spec.ts | 5 +++ 4 files changed, 41 insertions(+), 23 deletions(-) create mode 100644 test/backend/assets/wild-1-small.jpg create mode 100644 test/backend/assets/wild-1-small.json diff --git a/src/backend/model/fileaccess/MetadataLoader.ts b/src/backend/model/fileaccess/MetadataLoader.ts index a858282b..02a0d949 100644 --- a/src/backend/model/fileaccess/MetadataLoader.ts +++ b/src/backend/model/fileaccess/MetadataLoader.ts @@ -362,34 +362,27 @@ export class MetadataLoader { //Filesystem is the absolute last resort, and it's hard to write tests for, since file system dates are changed on e.g. git clone. if (exif.exif.DateTimeOriginal) { //DateTimeOriginal is when the camera shutter closed - if (exif.exif.OffsetTimeOriginal) { //OffsetTimeOriginal is the corresponding offset - metadata.creationDate = timestampToMS(exif.exif.DateTimeOriginal, exif.exif.OffsetTimeOriginal); - metadata.creationDateOffset = exif.exif.OffsetTimeOriginal; - } else { - const alt_offset = exif.exif.OffsetTimeDigitized || exif.exif.OffsetTime || getTimeOffsetByGPSStamp(exif.exif.DateTimeOriginal, exif.exif.GPSTimeStamp, exif.gps); - metadata.creationDate = timestampToMS(exif.exif.DateTimeOriginal, alt_offset); - metadata.creationDateOffset = alt_offset; + let offset = exif.exif.OffsetTimeOriginal; //OffsetTimeOriginal is the corresponding offset + if (!offset) { //Find offset among other options if possible + offset = exif.exif.OffsetTimeDigitized || exif.exif.OffsetTime || getTimeOffsetByGPSStamp(exif.exif.DateTimeOriginal, exif.exif.GPSTimeStamp, exif.gps); } + metadata.creationDate = timestampToMS(exif.exif.DateTimeOriginal, offset); + metadata.creationDateOffset = offset; } else if (exif.exif.CreateDate) { //using else if here, because DateTimeOriginal has preceedence //Create is when the camera wrote the file (typically within the same ms as shutter close) - if (exif.exif.OffsetTimeDigitized) { //OffsetTimeDigitized is the corresponding offset - metadata.creationDate = timestampToMS(exif.exif.CreateDate, exif.exif.OffsetTimeDigitized); - metadata.creationDateOffset = exif.exif.OffsetTimeDigitized; - } else { - const alt_offset = exif.exif.OffsetTimeOriginal || exif.exif.OffsetTime || getTimeOffsetByGPSStamp(exif.exif.DateTimeOriginal, exif.exif.GPSTimeStamp, exif.gps); - metadata.creationDate = timestampToMS(exif.exif.DateTimeOriginal, alt_offset); - metadata.creationDateOffset = alt_offset; + let offset = exif.exif.OffsetTimeDigitized; //OffsetTimeDigitized is the corresponding offset + if (!offset) { //Find offset among other options if possible + offset = exif.exif.OffsetTimeOriginal || exif.exif.OffsetTime || getTimeOffsetByGPSStamp(exif.exif.DateTimeOriginal, exif.exif.GPSTimeStamp, exif.gps); } + metadata.creationDate = timestampToMS(exif.exif.CreateDate, offset); + metadata.creationDateOffset = offset; } else if (exif.ifd0?.ModifyDate) { //using else if here, because DateTimeOriginal and CreatDate have preceedence - if (exif.exif.OffsetTime) { - //exif.Offsettime is the offset corresponding to ifd0.ModifyDate - metadata.creationDate = timestampToMS(exif.ifd0.ModifyDate, exif.exif?.OffsetTime); - metadata.creationDateOffset = exif.exif?.OffsetTime - } else { - const alt_offset = exif.exif.DateTimeOriginal || exif.exif.OffsetTimeDigitized || getTimeOffsetByGPSStamp(exif.ifd0.ModifyDate, exif.exif.GPSTimeStamp, exif.gps); - metadata.creationDate = timestampToMS(exif.ifd0.ModifyDate, alt_offset); - metadata.creationDateOffset = alt_offset; - } + let offset = exif.exif.OffsetTime; //exif.Offsettime is the offset corresponding to ifd0.ModifyDate + if (!offset) { //Find offset among other options if possible + offset = exif.exif.DateTimeOriginal || exif.exif.OffsetTimeDigitized || getTimeOffsetByGPSStamp(exif.ifd0.ModifyDate, exif.exif.GPSTimeStamp, exif.gps); + } + metadata.creationDate = timestampToMS(exif.ifd0.ModifyDate, offset); + metadata.creationDateOffset = offset } else if (exif.ihdr && exif.ihdr["Creation Time"]) {// again else if (another fallback date if the good ones aren't there) { const any_offset = exif.exif.DateTimeOriginal || exif.exif.OffsetTimeDigitized || exif.exif.OffsetTime || getTimeOffsetByGPSStamp(exif.ifd0.ModifyDate, exif.exif.GPSTimeStamp, exif.gps); metadata.creationDate = timestampToMS(exif.ihdr["Creation Time"], any_offset); diff --git a/test/backend/assets/wild-1-small.jpg b/test/backend/assets/wild-1-small.jpg new file mode 100644 index 0000000000000000000000000000000000000000..201022039cd145e31a7e582be21820fcc9f036e0 GIT binary patch literal 59564 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 literal 0 HcmV?d00001 diff --git a/test/backend/assets/wild-1-small.json b/test/backend/assets/wild-1-small.json new file mode 100644 index 00000000..1c686195 --- /dev/null +++ b/test/backend/assets/wild-1-small.json @@ -0,0 +1,20 @@ +{ + "size": { + "width": 306, + "height": 204 + }, + "creationDate": 1435910683000, + "fileSize": 59564, + "positionData": { + "country": "United States", + "state": "Arizona", + "city": "Williams" + }, + "keywords": ["Akela the wolf", "Balu the bear", "Bearizona", "Hugin the raven", "USA", "USA Road trip"], + "cameraData": { + "make": "Canon", + "model": "Canon EOS 600D", + "lens": "EF-S15-85mm f/3.5-5.6 IS USM" + }, + "creationDateOffset": "+02:00" +} \ No newline at end of file diff --git a/test/backend/unit/model/threading/MetaDataLoader.spec.ts b/test/backend/unit/model/threading/MetaDataLoader.spec.ts index 5a0e7e49..30542f2b 100644 --- a/test/backend/unit/model/threading/MetaDataLoader.spec.ts +++ b/test/backend/unit/model/threading/MetaDataLoader.spec.ts @@ -112,6 +112,11 @@ describe('MetadataLoader', () => { expect(Utils.clone(data)).to.be.deep.equal(expected); }); }); + it('should load wild-1-small image with CreateDate from 2015, but no DateTimeOriginal', async () => { + const data = await MetadataLoader.loadPhotoMetadata(path.join(__dirname, '/../../../assets/wild-1-small.jpg')); + const expected = require(path.join(__dirname, '/../../../assets/wild-1-small.json')); + expect(Utils.clone(data)).to.be.deep.equal(expected); + }); describe('should load jpg with edge case exif data', () => { const root = path.join(__dirname, '/../../../assets/edge_case_exif_data');