Peter Ombodi
f4e275a257
Merge remote-tracking branch 'origin/main' into feature/gallery_app
...
# Conflicts:
# mobile/lib/infrastructure/entities/merged_asset.drift.dart
# mobile/lib/presentation/widgets/asset_viewer/asset_page.widget.dart
# mobile/lib/presentation/widgets/asset_viewer/asset_viewer.page.dart
# mobile/lib/presentation/widgets/asset_viewer/video_viewer.widget.dart
# mobile/makefile
2026-05-13 18:07:26 +03:00
shenlong
0a4ed6fd71
refactor: migrate viewer config to metadata table ( #28396 )
...
* refactor: app metadata
* refactor to per row store
* cleanup
* more test
* review changes
* more refactor
* refactor
* migrate primary color
* migrate dynamic theme
* migrate colorfulInterface
* cleanup providers
* migrate cleanup
* migrate mapconfig
* remove unused keys
* migrate timeline config
* migrate image config
* migrate viewer config
---------
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com >
2026-05-13 09:36:19 -05:00
Alex
b6e2ce1f35
fix(mobile): revert drop deprecated deviceAssetId / deviceId from upload fields ( #28384 ) ( #28400 )
...
* Revert "chore(mobile): drop deprecated deviceAssetId / deviceId from upload fields (#28384 )"
This reverts commit 571e6a8560 .
* chore(mobile): add note on kept deprecated upload fields
---------
Co-authored-by: Santo Shakil <shakil.mezbah@gmail.com >
2026-05-13 09:36:16 -05:00
Alex
6ca54ee722
feat: display more info in asset viewer ( #24630 )
...
* feat(mobile): more info for asset viewer
* feat(mobile): more info for asset viewer
2026-05-13 02:07:23 +00:00
shenlong
79801595db
refactor: move image config to metadata table ( #28228 )
...
* migrate image config
---------
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com >
2026-05-13 03:20:35 +05:30
Yaros
3e1c8aacb1
feat(mobile): trash/restore all ( #28116 )
...
* feat(mobile): trash/restore all
* chore: remove themeData variable
* chore: filter query by user
* refactor
---------
Co-authored-by: Alex <alex.tran1502@gmail.com >
2026-05-12 14:56:19 -05:00
shenlong
91ac56cef2
refactor: move timeline config to metadata table ( #28227 )
...
* migrate timeline config
---------
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com >
2026-05-13 01:23:25 +05:30
Santo Shakil
f632d320f5
fix(mobile): clear linkedRemoteAlbumId in reset() so FK refs dont dangle ( #28382 )
...
* fix(mobile): clear linkedRemoteAlbumId in reset() so FK refs dont dangle
reset() runs with foreign_keys off before wiping remote_* tables, so the ON DELETE SET NULL cascade on linkedRemoteAlbumId doesnt fire. local rows keep pointing at deleted remote ids.
affects logout (clearLocalData calls reset()) and the server SyncResetV1 path (30 day idle, etc). after re-login, syncLinkedAlbum either silently warns or fires 400s (those are covered by #28299 ).
null the column manually inside the same transaction. cascade still works for normal SyncAlbumDeleteV1.
verified on pixel 9a with this branch built locally: logged out, deleted album from web, logged back in. without fix linkedRemoteAlbumId stayed dangling. with fix all three local rows have linkedRemoteAlbumId = NULL after the logout reset, and recovery is clean once manageLinkedAlbums runs again.
* fix(mobile): always re-enable foreign_keys in reset() + simplify the update
re-enable foreign_keys inside a try/finally so it always runs even if the transaction throws. without this, a failed reset would leave the connection with foreign_keys = OFF and silently disable cascades for everything after (per copilot review).
also drop the where filter on the linkedRemoteAlbumId update, unconditional update-all is simpler and we wipe everything in reset anyway (per ganka review).
2026-05-12 13:43:15 -05:00
shenlong
2ddaf6a611
fix: indexes on remote_asset_entity ( #28264 )
...
* fix: periodically execute pragma optimize
* fix: indexes on remote_asset_entity
* regen files
---------
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com >
Co-authored-by: Alex <alex.tran1502@gmail.com >
2026-05-12 16:43:24 +00:00
shenlong
1932c60e1c
fix: kekab icon colors in light mode ( #28366 )
...
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com >
2026-05-12 11:27:55 -05:00
Brandon Wees
dc6f8e746e
fix: deep link for assets when asset viewer already open ( #27971 )
2026-05-12 16:19:54 +00:00
Santo Shakil
571e6a8560
chore(mobile): drop deprecated deviceAssetId / deviceId from upload fields ( #28384 )
...
server removed both fields from AssetMediaCreateDto in #27818 . zod silently strips unknown fields so uploads still work, but we send dead weight on every request.
drop from foreground + background upload paths + share intent path. deviceAssetId stays as the internal background_downloader taskId, just not in the multipart form fields anymore.
2026-05-12 09:12:26 -04:00
shenlong
8f4b0fce49
fix: limit android background worker duration ( #23566 )
...
* fix: limit each android background run to 20 mins
# Conflicts:
# mobile/lib/domain/services/background_worker.service.dart
* review chages
---------
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com >
2026-05-11 23:08:17 -05:00
shenlong
4d6a50c2cb
refactor: move map config to metadata table ( #28226 )
...
* refactor: app metadata
* refactor to per row store
* cleanup
* more test
* review changes
* more refactor
* refactor
* migrate primary color
* migrate dynamic theme
* migrate colorfulInterface
* cleanup providers
* migrate cleanup
* migrate mapconfig
---------
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com >
2026-05-11 22:43:52 -05:00
Ben Beckford
e142e3aca7
feat: recently added assets page ( #28272 )
...
* feat(server): add ordering date option to time buckets
* feat(web): add recently added page
* feat(server): recently created assets in explore data
* feat(web): recently added in explore tab
* fix: recently added assets ordering
* fix(server): failing bucket test
* feat(web): improve recently added preview
* chore: update e2e explore/timeline tests
* chore: rename and refactor timeline ordering dates
* fix(web): invalid timeline option
* feat(mobile): recently added page
* fix(server): sync tests
* fix(mobile): resync assets to get uploadedAt column
* chore: rename assetorderby enum
* chore(mobile): formatting
* minor fixes
* stylings
---------
Co-authored-by: Alex <alex.tran1502@gmail.com >
2026-05-11 21:35:10 +00:00
shenlong
12f7b2a005
chore: add always_put_control_body_on_new_line lint ( #28352 )
...
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com >
2026-05-11 13:47:24 -04:00
Yaros
41f285aa3e
feat(mobile): increased tap area on video player overlay ( #27269 )
...
* fix(mobile): improved tap area on video player
* fix: back button padding
* chore: use sizedbox.square & button padding
* chore: fixed padding
2026-05-09 10:47:41 +07:00
Thorsten Winkler
d7f05d2510
fix(mobile): Deduplicate assets in person view timeline ( #26723 )
...
fix(mobile): deduplicate assets in person view timeline
Previously, assets with multiple face records for the same person (e.g.,
manual Digikam imports and Immich ML detections) appeared multiple times
in the person timeline. This was caused by an inner join on the
assetFaceEntity without proper deduplication.
This commit refactors the timeline queries to use a subquery approach
instead of joins and grouping. This ensures:
- _getPersonBucketAssets: Only unique assets are fetched, even if
multiple face records exist for a single asset.
- _watchPersonBucket: Asset counts in timeline headers are accurate
and represent unique assets.
- Performance: Database overhead is reduced by avoiding complex joins
and explicit groupBy operations on large result sets.
Signed-off-by: thowdev <12428285+thowdev@users.noreply.github.com >
2026-05-09 01:53:18 +00:00
stfn
3100bd5eed
fix(mobile): avoid duplicate assets in album view ( #28152 )
...
fix(mobile): avoid duplicate assets in remote album timeline
Co-authored-by: Stefan Friedli <stefan@stefanfriedli.ch >
2026-05-09 08:24:54 +07:00
Santo Shakil
7c6750941e
fix(mobile): mounted check before setState in album sync action ( #28300 )
...
_manualSyncAlbums fires a setState 1s after sync via Future.delayed
with no mounted check. if the widget is gone by then, setState throws
null check and the global error logger logs it severe.
2026-05-08 18:55:03 +00:00
Santo Shakil
238895cad9
fix(mobile): restore notification plugin init ( #28284 )
...
#27666 removed LocalNotificationService with the legacy stack, which
was the only place calling FlutterLocalNotificationsPlugin().initialize().
without it, ios never prompts for the notification perm on fresh
installs so background_downloader notifications get dropped silently.
restores the init in the same spot the deleted call used to live.
2026-05-08 10:45:52 +07:00
shenlong
21af184045
refactor: move cleanup config to metadata table ( #28225 )
...
* refactor: app metadata
* refactor to per row store
* cleanup
* more test
* review changes
* more refactor
* refactor
* migrate primary color
* migrate dynamic theme
* migrate colorfulInterface
* cleanup providers
* migrate cleanup
---------
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com >
2026-05-07 11:27:06 -05:00
TheBestX11
fe2bf0c6dd
fix(mobile): correct filter default and UI desync in similar photos search ( #27516 )
...
* fix(mobile): view similar defaults to images only
* fix(mobile): reset filter chips when pre-filter is applied
---------
Co-authored-by: shenlong <139912620+shenlong-tanwen@users.noreply.github.com >
2026-05-07 15:22:35 +00:00
shenlong
d4a97f2d25
refactor: move theme config to metadata table ( #28224 )
...
* refactor: app metadata
* refactor to per row store
* cleanup
* more test
* review changes
* more refactor
* refactor
* migrate primary color
* migrate dynamic theme
* migrate colorfulInterface
* cleanup providers
---------
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com >
2026-05-07 15:12:14 +00:00
shenlong
bd58db4fcc
fix: periodically execute pragma optimize ( #28241 )
...
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com >
2026-05-07 09:54:35 -05:00
Luis Nachtigall
7f43c6a3a3
fix(mobile): prevent asset loading issues when changing page or when closing memories ( #27596 )
2026-05-07 09:13:22 -04:00
Thomas
f09769a2f3
chore(mobile): add box shadow to asset details ( #27510 )
...
The details widget can blend with the image when they are similar
colours.
2026-05-06 19:43:55 +00:00
Ben Beckford
0058df798d
fix(mobile): show lens info without lens name ( #28234 )
...
* fix(mobile): always display lens subtitle
* fix(mobile): hide empty lens subtitles
2026-05-05 10:46:09 +07:00
shenlong
97100a4362
refactor: app metadata ( #28113 )
...
* refactor: app metadata
* refactor to per row store
* cleanup
* more test
* review changes
* more refactor
* refactor
---------
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com >
2026-05-05 10:45:51 +07:00
Mert
b554664791
chore!: duration in milliseconds ( #28003 )
...
* server changes
* openapi
* web changes
* mobile changes
* assume 3.0 client
* deprecate
* review feedback
* update medium tests
* linting
2026-04-30 09:44:27 -04:00
Peter Ombodi
b74cfd4424
fix(mobile): suppress asset stack UI in trash timeline ( #26536 )
...
* fix(mobile): suppress asset stack UI in trash timeline
* refactor(mobile): apply review suggestions
* fix(mobile): hide unstack action in the trash timeline
* fix(mobile): move stack indicator out of asset type icons
---------
Co-authored-by: Peter Ombodi <peter.ombodi@gmail.com >
2026-04-29 17:49:47 +07:00
Peter Ombodi
561fe231ac
docs(mobile): clarify view intent fallback asset TODO
2026-04-27 18:41:55 +03:00
Peter Ombodi
5a457d72c9
fix(mobile): delete assets on trash empty, Android ( #26070 )
...
* fix(mobile): improve trash sync flow
- trash local assets on remote delete events
- unify remote trash handling and support assetDelete cleanup by remote asset id
- update sync stream tests
* fix(mobile): revert pubspec.lock
* refactor(mobile): remove helper
remove unused columns from results
* refactor(mobile): use remoteIds in getAssetsFromBackupAlbums and remove getAssetsFromBackupAlbumsByRemoteIds
refactor tests
---------
Co-authored-by: Peter Ombodi <peter.ombodi@gmail.com >
2026-04-27 18:46:49 +05:30
Peter Ombodi
eee3d2ce61
fix(mobile): avoid double pop when canceling upload dialog
2026-04-27 16:02:19 +03:00
Peter Ombodi
e2f5308cba
refactor(mobile): decouple view intent asset resolver from providers
2026-04-27 13:28:53 +03:00
Peter Ombodi
d96cb8d386
Merge remote-tracking branch 'origin/main' into feature/gallery_app
2026-04-27 13:03:53 +03:00
Peter Ombodi
2c9639f18b
fix(mobile): wait for main timeline before deferred view intent handoff
2026-04-27 13:02:01 +03:00
Yaros
39cfad7136
feat(mobile): action bottom sheet on map timeline ( #27515 )
2026-04-24 09:30:10 -05:00
Peter Ombodi
880155916f
refactor(mobile): share AssetViewer pre-navigation state preparation
2026-04-23 17:15:19 +03:00
Peter Ombodi
84854a8575
fix(mobile): stabilize Android view intent asset resolution and fallback viewer
2026-04-23 16:10:17 +03:00
Alex
03b70cf029
fix: jump to timeline on new auto_router update ( #28022 )
2026-04-22 10:21:48 -05:00
Daniel Dietzler
4bfb8b36c2
chore!: migrate album owner to album_user ( #27467 )
...
Co-authored-by: mertalev <101130780+mertalev@users.noreply.github.com >
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com >
2026-04-22 16:52:23 +02:00
Peter Ombodi
fde0959579
style(mobile): reformat code #2
2026-04-22 14:42:35 +03:00
Peter Ombodi
ca203726dc
style(mobile): reformat code
2026-04-22 14:01:16 +03:00
Peter Ombodi
5d33870403
refactor(mobile): resolve merge conflicts
2026-04-22 13:51:19 +03:00
Peter Ombodi
0276e86895
Merge remote-tracking branch 'origin/main' into feature/gallery_app
...
# Conflicts:
# mobile/android/app/src/main/kotlin/app/alextran/immich/sync/Messages.g.kt
# mobile/ios/Runner/Sync/Messages.g.swift
# mobile/lib/infrastructure/entities/merged_asset.drift.dart
# mobile/lib/platform/native_sync_api.g.dart
2026-04-22 13:46:14 +03:00
Peter Ombodi
90d9d0075a
refactor(mobile): use remote asset ids for view intent handoff and simplify resolver
2026-04-22 13:37:42 +03:00
Luis Nachtigall
793a7054fb
fix(mobile): thumbnail transition to asset viewer ( #27850 )
2026-04-21 15:54:40 -05:00
Luis Nachtigall
3a874dd441
fix(mobile): enable autoplay for motion photos in video viewer ( #27961 )
2026-04-21 15:53:21 -05:00
Luis Nachtigall
3dc7dc93d8
fix(mobile): clear local data on forced logout ( #27957 )
2026-04-21 15:52:00 -05:00