* save thumbnails in subdirectories
* migration job, migrate assets and face thumbnails
* fix tests
* directory depth of two instead of three
* cleanup empty dirs after migration
* clean up empty dirs after migration, migrate people without assetId
* add job card for new migration job
* fix removeEmptyDirs race condition because of missing await
* cleanup empty directories after asset deletion
* move ensurePath to storage core
* rename jobs
* remove unnecessary property of IEntityJob
* use updated person getById, minor refactoring
* ensure that directory cleanup doesn't interfere with migration
* better description for job in ui
* fix remove directories when migration is done
* cleanup empty folders at start of migration
* fix: actually persist concurrency setting
* add comment explaining regex
* chore: cleanup
---------
Co-authored-by: Jason Rasmussen <jrasm91@gmail.com>
* fix(server): Does not assign lat/lon if they are at 0,0 #2991
* Adds migration file to fix null island rows
* Removed down migration
* Leave empty down function
* feat(server): Google Pixel motion photos
Add support for motion photos taken on Pixel phones. They have the exif
property 'MotionPhoto' set to 1, and an embedded mp4 file appended to
the JPEG file.
The implementation works like this:
- on metadata extraction, if a live photo is detected, examine the
metadata to determine where in the file the embedded MP4 is.
- extract this MP4 and write it next to the JPEG.
- link it using the existing mechanism for live photos.
There is a "MotionPhotoPresentationTimestampUs" exif property, which we
don't do anything with - I imagine that it refers to the timepoint in
the video that the photo was taken at, but it probably warrants more
investigation.
* fix format
* fix test
---------
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>