1
0
mirror of https://github.com/immich-app/immich.git synced 2024-11-28 09:33:27 +02:00

fix: keyword parsing (#12164)

This commit is contained in:
Jason Rasmussen 2024-08-30 17:33:42 -04:00 committed by GitHub
parent 4cc11efd04
commit d18bc7007a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 14 additions and 4 deletions

View File

@ -408,6 +408,17 @@ describe(MetadataService.name, () => {
expect(tagMock.upsertValue).toHaveBeenCalledWith({ userId: 'user-id', value: 'Parent', parent: undefined }); expect(tagMock.upsertValue).toHaveBeenCalledWith({ userId: 'user-id', value: 'Parent', parent: undefined });
}); });
it('should extract tags from Keywords as a list with a number', async () => {
assetMock.getByIds.mockResolvedValue([assetStub.image]);
metadataMock.readTags.mockResolvedValue({ Keywords: ['Parent', 2024] as any[] });
tagMock.upsertValue.mockResolvedValue(tagStub.parent);
await sut.handleMetadataExtraction({ id: assetStub.image.id });
expect(tagMock.upsertValue).toHaveBeenCalledWith({ userId: 'user-id', value: 'Parent', parent: undefined });
expect(tagMock.upsertValue).toHaveBeenCalledWith({ userId: 'user-id', value: '2024', parent: undefined });
});
it('should extract hierarchal tags from Keywords', async () => { it('should extract hierarchal tags from Keywords', async () => {
assetMock.getByIds.mockResolvedValue([assetStub.image]); assetMock.getByIds.mockResolvedValue([assetStub.image]);
metadataMock.readTags.mockResolvedValue({ Keywords: 'Parent/Child' }); metadataMock.readTags.mockResolvedValue({ Keywords: 'Parent/Child' });

View File

@ -352,22 +352,21 @@ export class MetadataService {
} }
private async applyTagList(asset: AssetEntity, exifTags: ImmichTags) { private async applyTagList(asset: AssetEntity, exifTags: ImmichTags) {
const tags: string[] = []; const tags: unknown[] = [];
if (exifTags.TagsList) { if (exifTags.TagsList) {
tags.push(...exifTags.TagsList); tags.push(...exifTags.TagsList);
} }
if (exifTags.Keywords) { if (exifTags.Keywords) {
let keywords = exifTags.Keywords; let keywords = exifTags.Keywords;
if (typeof keywords === 'string') { if (!Array.isArray(keywords)) {
keywords = [keywords]; keywords = [keywords];
} }
tags.push(...keywords); tags.push(...keywords);
} }
if (tags.length > 0) { if (tags.length > 0) {
const results = await upsertTags(this.tagRepository, { userId: asset.ownerId, tags }); const results = await upsertTags(this.tagRepository, { userId: asset.ownerId, tags: tags.map(String) });
const tagIds = results.map((tag) => tag.id); const tagIds = results.map((tag) => tag.id);
await this.tagRepository.upsertAssetTags({ assetId: asset.id, tagIds }); await this.tagRepository.upsertAssetTags({ assetId: asset.id, tagIds });
} }