* add immich_model
* graph per shape
* decouple ocr from ort
* prepared graphs
* use f16 for accelerators
* preload all shapes
* warm-up pass after preload
* keep precision for fp32 graphs
* ensure padding for text recognition
* optimize postprocessing for fp16 outputs
* handle raw ctc logits
* use f16 output for rknn
* mmap token embedding
* read device metadata
* ask before deleting local only photos on android 10 and below
* move the delete consent prompt into _cleanupLocalAssets
* ask on android 11 as well before deleting local photos
* ask before deleting only where android shows no prompt
* split the local delete prompt into its own helper
* pick the local delete dialog in one flat branch and rename notBackedUp to isLocalOnly
* run the first resume after a background launch with a full local sync
* keep the untouched lines of the swift file as they were
* check the background launch at the first resume even after a pause
* play the server copy when the local video file cannot be read
* flatten the video source choice and add tests for it
* drop the platform override from the video viewer test
* fix(mobile): retry the background backup when connectivity is restored
* return the backup result from the zone and drop the unrelated upload test
* flip the background worker bool to needsRetry
* decide the background retry from the upload callbacks
* run the background worker offline again and retry on reconnect with a separate connected gated request
* retry the background backup when any upload fails and keep one worker at a time
* always hand the retry to the connected worker and release the worker lock if startWork throws
* respect the charging only setting on the connected retry worker
* fix(server): compare integrity paths independently of unicode normalization
The untracked-file check compared on-disk paths against the database
byte for byte. macOS writes decomposed (NFD) filenames while an upload
stores the composed (NFC) form, so every asset with a non-ASCII name
came back from getAssetPathsByPaths under a different byte sequence,
was never removed from the candidate set, and was reported as an
untracked file. One reporter saw 14k false positives on a 55k library.
Look the batch up under both normal forms and key the comparison on
NFC, so a path that differs only in normalization is recognised as
tracked.
* test(server): cover normalized integrity lookup
Add documentation for how Locked Folder access applies to the current session, including the temporary unlock period and visibility of locked assets elsewhere in Immich while the session is elevated.
Refs #30724, #29690, #26185.
* add clear file cache handling and snackbar
* create function to count deleted cache size
* clean up code and test
* ensure stable behaviour on non ios device
* refactor(mobile): simplify clear file cache feedback
* fix(mobile): clamp out of range datetimes so timeline queries cannot crash
* replace the per column converters with a clamping custom type
* heal each table in one statement, rename the clamp type, read dates as stored
* one medium test for the clamp, drop the dart side bounds, private clamp type