* feat(mobile): passkey bridge for ios
* fix(mobile): ios passkey bridge in one file
* merge Passkeys.swift into PasskeyHostApiImpl.swift
* set up the host api on the main engine only
* map the json with Codable structs, with base64url in the coder data strategies
* throw on a missing attestation object or an unexpected credential type
* need iOS 17.4, where a passkey registration can exclude the account's passkeys
* fix(mobile): ios passkeys from ios 16
Passkeys are on from iOS 16 again. The platform registration only takes
excludedCredentials from iOS 17.4, so that check keeps its own comment.
* refactor(mobile): move the native core decoders into a codecs crate
* make Format private
* rename the decode export and options for what they hold
* drop the unused ios and server groups and rename the target params
(cherry picked from commit 11bf875313782b8a9e10269bb6f85226b7bdcd72)
* fix(mobile): render random widget images at the widget's display resolution
* fix(mobile): cap widget image decode size for panoramas
(cherry picked from commit 3d07c061a38275f8b0d406e1ecc67446497be0e2)
feat: birthday memory on mobile (#32113)
* feat: birthday memory on mobile
* chore: remove yellow bg colors
* pr feedback
(cherry picked from commit 82cfc4b28b55c660d9c2da00c57437a20585a47b)
Co-authored-by: Alex <alex.tran1502@gmail.com>
* 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
* fix(mobile): decode remote thumbnails at displayed size
* use nullable decode size and reuse the tapped thumbnail in the viewer
* clean up decode size naming and guards
* fix(mobile): stop long images squishing on ios
* fix(mobile): bound the original to 16384 with fast resize
* refactor(mobile): reuse the shared request options for the original
* fix(mobile): fix squished long image previews on ios
* fix(mobile): retry with exact resize when fast resize overshoots the texture bound
* fix(mobile): clamp preview targets to a minimum of one pixel
* fix nullable cast flagged by the stricter lints
* fix(ios-widget): send date-only value for memories query param
Server v3.0.3 (immich-app#29907) validates the /memories `for` query
param with a date-only schema (YYYY-MM-DD). The iOS widget still sent a
full ISO 8601 datetime, so every request 400s and the widget shows
"Unable to connect to your Immich instance" on any server >= v3.0.3.
Build the value from the local calendar day, matching what the web
client (memory-manager.svelte.ts) and Android already send, instead of
a UTC datetime.
Also fix a related bug in the timeline provider: fetchMemory was
called with a bare try inside a Task, so a failure silently dropped
the error and never called completion, leaving the widget in a stale
state instead of showing an error card. Wrap it in a guard/try?, same
pattern already used in getSnapshot.
Fixes immich-app#30044
Signed-off-by: ajuijas <189517297+ajuijas@users.noreply.github.com>
* address review: drop unrelated widget change and comment
Signed-off-by: ajuijas <189517297+ajuijas@users.noreply.github.com>
---------
Signed-off-by: ajuijas <189517297+ajuijas@users.noreply.github.com>
Co-authored-by: ajuijas <189517297+ajuijas@users.noreply.github.com>
Co-authored-by: Santo Shakil <santoshakil@users.noreply.github.com>