* feat(mobile): stack edited photos over the original on upload
* stack through the asset service and give the live photo still its task metadata
* add plain photo stacking tests and the 2x2 edit detection matrix
* chore(mobile): static Store to unify and streamline reactivity
* Add tests of caching and new stores
* Don't instantiate PeopleDbRepository
* Slight DB rename and fix throwing store methods
* chore(mobile): shared DataController for management of data sources
* chore(mobile): shared DataController for management of data sources
* Fix lint with removed dependency
* Re-order Store bootstrap
* Remove extra import
* chore(mobile): static Store to unify and streamline reactivity
* Add tests of caching and new stores
* Don't instantiate PeopleDbRepository
* Slight DB rename and fix throwing store methods
* fix(mobile): rewrite slideshow controller system
* Normalize playback status changes
* Improve preloading assets
* Added controller and widget tests
* Minor fixes from PR comments
* More minor fixes
* Move slideshow test after rename
* fix(mobile): keep the original filename when sharing downloaded assets
* use ordinal suffixes for duplicate share filenames
* rename display name maps to totals and duplicates seen
* drop the display name totals map and keep the first copy name clean
* fold the ordinal suffix into the share display name derivation
* resolve share names after download and test through the public flow
* use the renamed store repository in the share tests
* add docstrings to the share file helpers
* simplify the share name resolver to a single set
* note the share_plus cache folder behavior on the resolver
* drop the version pin from the resolver comment
* pin the share_plus version in the resolver comment
* undo the accidental reformat, keep the version pin
* explain the test harness and cut the teardown and wait noise
* say why the storage is stubbed, drop the platform override and busy wait for the share cleanup
* spy on the cleanup in the share tests instead of waiting for it
* fix(mobile): handle transient loading states for map timelines
* fix(mobile): handle transient loading states for map timelines
* Add support for new method
* Rewrote map options notifier to be more Riverpody
* feat(mobile): map asset number
* chore: use totalAssets from service
* refactor: separate widget
* fix: async dispose
* chore: i18n
* chore: add back old i18n key
* bring back reactivity
---------
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
* feat(mobile): show asset owner in asset details
* refactor(mobile): fetch asset owner from local DB instead of API
* cleanup
* review changes
---------
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
* fix: do not exit screen on back multiselect search
* chore: apply suggestion
Co-authored-by: Alex <alex.tran1502@gmail.com>
* refactor: fix in timeline widget
* chore(server): AssetOcrSyncReset.ts
* Revert "chore(server): AssetOcrSyncReset.ts"
This reverts commit c0647382cd63d046fee893ea0ee69503484d19f6.
* fix: test crash
* refactor: fix test instead of code workaround
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
* permanently delete local copies when moving to the locked folder
* simplify the delete path and move the stubs into the mock defaults
* drop the kept count from the partial message and log the mismatch instead
* chore: align icon and font size of bottom bar actions
* align base action font weight to immich ui weights
---------
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
* fix(mobile): dedupe stale remote_asset rows on sync
queue a pre-delete on the matching partial-index tuple before each
upsert in updateAssetsV1/V2 so the second insert does not crash on
SqliteException(2067) when the server re-issues a new id for the
same (ownerId, checksum). closes#22522#27186.
* run the dedupe deletes before the inserts and keep only the last duplicate per payload
* switch the asset upsert to insert or replace
* trim the dedupe tests to the essentials