fix(server): use GPSLongitudeRef and GPSLatitudeRef EXIF fields #21445
+61
−26
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
Re-submission of #18403, which fixes EXIF parsing for GPS tags.
The solution for the issue requires updating
exiftool-vendored
and enabling thegeolocation
option. However, exiftool v13.22 seems to have introduced some issues with UTF-16LE file parsing (exiftool/exiftool#348), which is causing some e2e test assets to not work anymore.Given upgrading exiftool could break Immich support for existing library files, I'm implementing fallback logic in
metadata.repository.spec
to convert XMP files to UTF-8 if needed. I'm not sure if this is the best way to go, other suggestions are appreciated.Fixes #13053.
How Has This Been Tested?
e2e/src/api/specs/library.e2e-spec.ts
uses UTF-16LE test assets and shows that those XMP files continue to be supported.Followed the test plan in #18403 and confirmed the geolocation fix still worked. I can also upload test assets with affected geo tags and put them in an e2e test if needed.
Checklist:
src/services/
uses repositories implementations for database calls, filesystem operations, etc.src/repositories/
is pretty basic/simple and does not have any immich specific logic (that belongs insrc/services/
)