From 3e73cfb71a97751b344a7e202206f25dd3b5bb81 Mon Sep 17 00:00:00 2001 From: Jason Rasmussen Date: Fri, 29 Sep 2023 11:42:33 -0400 Subject: [PATCH] fix(server): handle number lists in metadata extraction (#4273) --- server/src/domain/metadata/metadata.service.spec.ts | 10 ++++++++++ server/src/domain/metadata/metadata.service.ts | 5 +++++ 2 files changed, 15 insertions(+) diff --git a/server/src/domain/metadata/metadata.service.spec.ts b/server/src/domain/metadata/metadata.service.spec.ts index 2b6c633a10..96a1c91c03 100644 --- a/server/src/domain/metadata/metadata.service.spec.ts +++ b/server/src/domain/metadata/metadata.service.spec.ts @@ -122,4 +122,14 @@ describe(MetadataService.name, () => { }); }); }); + + describe('handleMetadataExtraction', () => { + it('should handle lists of numbers', async () => { + assetMock.getByIds.mockResolvedValue([assetStub.image1]); + storageMock.stat.mockResolvedValue({ size: 123456 } as any); + metadataMock.getExifTags.mockResolvedValue({ ISO: [160] as any }); + await sut.handleMetadataExtraction({ id: assetStub.image1.id }); + expect(assetMock.upsertExif).toHaveBeenCalledWith(expect.objectContaining({ iso: 160 })); + }); + }); }); diff --git a/server/src/domain/metadata/metadata.service.ts b/server/src/domain/metadata/metadata.service.ts index 09100267cc..297af82ea8 100644 --- a/server/src/domain/metadata/metadata.service.ts +++ b/server/src/domain/metadata/metadata.service.ts @@ -32,6 +32,11 @@ type ExifEntityWithoutGeocodeAndTypeOrm = Omit< const exifDate = (dt: ExifDateTime | string | undefined) => (dt instanceof ExifDateTime ? dt?.toDate() : null); const validate = (value: T): NonNullable | null => { + // handle lists of numbers + if (Array.isArray(value)) { + value = value[0]; + } + if (typeof value === 'string') { // string means a failure to parse a number, throw out result return null;