* chore: add regression tests for search
* chore: add search filter and people rename tests
* chore: add search, explore, location and person tests
(cherry picked from commit 635f908c84d0f7b471d85f60aa4ead2cc8580316)
* feat(server): run FUTO Backups on the Immich database
Assisted-by: AI
* chore(server): ignore FUTO Backups tables in schema checks
Assisted-by: AI
* feat(web): finish maintenance once FUTO Backups restores the database
Assisted-by: AI
* chore: bump backups
* fix: restore is part of backups now
* feat(mobile): avif decoder
* decode avif in the core first on android, tone-map hdr like jxl and support premultiplied alpha
* decode avif with rav1d's safe api
* use rav1d's assembly
* thread avif decodes by their tile count
* convert colour-managed avif in bands
* use the codec dependencies' simd kernels
* free avif pictures before resizing
* map avif alpha through a table
* premultiply avif while writing alpha
* drop the avif container after decoding
* use core avif decoder on ios
* fall back to imageio on ios when the core can't decode an avif
---------
Co-authored-by: mertalev <101130780+mertalev@users.noreply.github.com>
* fix(mobile): delete leftover share files when the app starts
A share's downloaded file is deleted when the share sheet closes. If the
app is killed with the sheet still open, that never runs and the file
stays in the temp folder for good.
* clean up share downloads from the downloader's records
* build the share folder list with Future.wait
* feat(mobile): rename passkeys
* fix(mobile): refresh the passkey list from the store after a rename
* fix(mobile): skip the name dialog after creating a passkey
* feat(mobile): list passkeys
* fix(mobile): show the passkey list as the server's passkeys
* fix(mobile): reword and align the passkey list, refresh it from the store
* feat(mobile): login with passkey
* feat(mobile): use the server feature level on the login page
* refactor(mobile): share the steps after a login
* password, OAuth and passkey logins end with one finishLogin
* OAuth now also connects the websocket, like the password login
* fix(mobile): passkey login through the shared login steps
* fix(mobile): build the login response through its constructor
* feat(mobile): passkeys page with new passkey
* feat(mobile): passkeys entry under settings
* show it in settings when logged in and passkeys are on
* remove it from the profile menu
* feat(mobile): use the server feature level for passkeys
* hide passkeys below the passkeys feature level, without asking the server
* keep the server's feature level on ServerVersion
* fix(mobile): passkeys as a settings section through the store
* fix(mobile): filter the settings sections in SettingSection
* fix(mobile): remove the passkeys description and use the settings padding