Commit Graph
279 Commits
Author SHA1 Message Date
Adam Gastineau dc813e2816 fix(mobile): handle transient loading states for map timelines (#29735)
* 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
2026-08-28 06:06:10 -07:00
Timon 8b3d6b320b feat(server): new search API (#30179) 2026-08-27 20:39:55 +02:00
Adam Gastineau c04c81a979 chore(mobile): remove Drift* prefixes from classes and variables (#31038)
* chore(mobile): remove Drift* prefixes from classes and variables

* Remove *Drift* from related mocks
2026-08-26 19:11:12 +00:00
Lauritz Tiesteandshenlong-tanwen 4ff7148f85 feat(mobile): show asset owner in asset details (#29302)
* 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>
2026-08-25 20:40:05 +00:00
351be95769 feat: memories view (#28675)
* wip web memories view

* paginate searchMemories

* improve memories ui

* feat(mobile): memories view

* improve memories web ui

* fix(web): avoid unnecessary memory refreshes

* refactor(web): move timline memory manager filter

* fix(web): memories infinitely loading on 0 results

* fix(web): memories resetting

* feat(web): animated memory previews

* feat(web): memory page dark styling

* chore(mobile): fix failing memory lane tests

* chore(mobile): remove old import

* chore(e2e): fix failing memory lane tests

* chore(server): revert searchMemories changes

* chore(server): lint

* chore(mobile): fix bad merge

* chore(e2e): fix memory ui tests

* chore(web): rename /memory to /memories

* chore(mobile): linting

* chore(web): linting

* fix(web): prevent duplicate memory page loading

* fix(web): lint

* fix(web): memories page improvements

* chore(mobile): lint

* fix(mobile): fix translations

* fix(mobile): build errors

* fix(web): prevent memories from infinitely loading

* chore(e2e)): fix failng memory viewer test

* chore(web): clean up types in memory manager

* chore(web): lint

* feat: update list and detail memory page layouts

* onlyFavorites through drift

* rename to get all

* mobile: use widgetWhen in memory list page

* remove redundant check

* fix: e2e

---------

Co-authored-by: Timon <mail@timonrieger.de>
Co-authored-by: Jason Rasmussen <jason@rasm.me>
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2026-08-24 19:16:33 -05:00
Adam Gastineau 8dcfd36fa5 chore(mobile): move Drift into mobile/data (#30966)
* chore(mobile): move Drift into mobile/data

* Move into more structured subdirectories

* Fix changed merge paths
2026-08-25 00:51:02 +05:30
Adam Gastineau 11cdfa9c5e chore(mobile): remove commited db.repository.steps.dart (#30910) 2026-08-22 07:37:47 +05:30
Santo Shakil a490cea1c4 fix(mobile): dedupe stale remote_asset rows on sync (#28445)
* 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
2026-08-21 11:13:48 +00:00
Santo Shakil a066b5f301 fix(mobile): order album/place/person timelines by local date (#29338)
* fix(mobile): order album/place/person timelines by local date

* fold the timeline date ordering into one helper and tighten the tests

* drop the redundant none guard from the place asset query

* format
2026-08-20 13:52:33 +06:00
Adam Gastineau 225ca9ab8d chore(mobile): use Drift @DriftAccessor() and collapse some providers (#30693)
* chore(mobile): use Drift @DriftAccessor() and collapse some providers

* Fix import order

* Required formatting
2026-08-17 14:43:32 -07:00
shenlongandshenlong-tanwen 652ef8a427 refactor: server capabilities (#30663)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2026-08-14 07:53:12 -05:00
shenlongandshenlong-tanwen 303a9f15b1 refactor: reactive driftGetAllPeopleProvider (#30660)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2026-08-12 21:12:12 +05:30
shenlongandshenlong-tanwen 52edcc0c74 refactor: unify person model (#30659)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2026-08-12 21:12:11 +05:30
Santo Shakil 9862e50aab fix(mobile): decode remote thumbnails at displayed size (#29965)
* 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
2026-08-10 21:14:23 +06:00
shenlongandshenlong-tanwen cafd6c7c0f refactor: cleanup actions & action tests (#30265)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2026-08-01 08:06:44 +05:30
Adam Gastineau 483b375c26 fix(mobile): resolve owned assets when partner owns identical asset (#30137)
* fix(mobile): resolve owned assets when partner owns identical asset

* Add limit to auth user expressions

* Change debug method semantics
2026-07-31 14:37:12 +00:00
shenlongandshenlong-tanwen fe5c8ed0fb refactor: base action (#29617)
* refactor: existing actions to new structure

# Conflicts:
#	mobile/lib/presentation/actions/action.widget.dart
#	mobile/lib/presentation/widgets/action_buttons/favorite_action_button.widget.dart
#	mobile/lib/presentation/widgets/action_buttons/unfavorite_action_button.widget.dart
#	mobile/test/unit/presentation/partner_page_test.dart

* rename to actionitem

* more cleanup

* review changes

* lint changes

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2026-07-30 17:02:14 -04:00
Adam Gastineau e7aace436d chore(mobile): Apply stricter linting rules for correctness (#30372)
* chore(mobile): Apply stricter linting rules for correctness

* Added discarded_futures rule
2026-07-30 19:39:24 +00:00
Adam Gastineau 858aeadce8 chore(mobile): Apply stricter linting rules for Flutter and known issues (#30373) 2026-07-30 15:15:35 -04:00
Adam Gastineau d864a90811 chore(mobile): Apply stricter linting rules for formatting (#30370)
* chore(mobile): Apply stricter linting rules for formatting

* Formatting fixes
2026-07-30 08:56:46 +00:00
Adam Gastineau 27a29b6fab chore(mobile): remove Drift generated code (#30297)
* chore(mobile): remove Drift generated code

* Remove Drift test generated files from tree

* Make static_analysis use the shared mobile:codegen action

* Remove static_analysis generated file diffing
2026-07-29 20:29:07 +00:00
shenlongandshenlong-tanwen 04a38ba91c refactor: asset update method (#30201)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2026-07-27 10:15:36 -04:00
Yarosandshenlong-tanwen 792d88961a feat(mobile): custom date range for map (#26205)
* feat(mobile): custom date range for map

* refactor: rename timerange & remove isvalid

* refactor: rename customtimerange variables

* refactor: add back setRelativeTime

* refactor: implement suggestions

* refactor: suggestions

* fix: ifPresent

* fix: context.locale

* chore: restrict selection

* refactor: move options to mapconfig

* refactor: move model to domain

* chore: locale toLanguageTag

* add map codec tests

* rebase

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2026-07-23 20:48:15 +05:30
shenlongandshenlong-tanwen 9403e71d23 refactor: add asset update method (#29384)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2026-07-22 19:51:06 +00:00
shenlongandshenlong-tanwen 3485dbffda refactor(mobile): extract CachedKeyValueRepository (#28789)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2026-07-21 20:23:50 +00:00
Peter OmbodiandPeter Ombodi a30ebab70c fix(mobile): refresh asset stack after deleting viewer item (#28164)
* fix(mobile): refresh asset stack after deleting viewer item

* fix(mobile): clamp stack index,
filter visible stack assets

* refactor(mobile): simplify stack asset refresh handling

* fix(mobile): revert changes in DeleteLocalActionButton

* style(mobile): reformat code

* fix(mobile): remove redundant setStack

---------

Co-authored-by: Peter Ombodi <peter.ombodi@gmail.com>
2026-07-22 01:48:47 +05:30
Timon ee4bd3f833 feat: add album asset event handling (#29008)
* feat: add album asset event handling

* fix medium tests

* patch medium test

* collapse in AlbumUpdate
2026-07-21 10:55:46 -05:00
Santo Shakil 4938fd4c89 fix(mobile): back up files moved into a watched folder on android (#29872) 2026-07-21 19:09:50 +05:30
Timon 6fa3f2feac chore: bump openapi-generator version to v7.24.0 (#30067)
* remove patch in favor of [OpenAPITools/openapi-generator#23930](https://github.com/OpenAPITools/openapi-generator/issues/23930)

partially revert "chore(mobile): make openapi requests abortable (#28692)"

* gen client

* bump openapi-generator version to v7.24.0

* gen client

* enum migration changes

* drop enum exhaustion switch check
2026-07-20 20:06:23 -04:00
shenlongandshenlong-tanwen 9cea3f2375 chore: pump drift (#29113)
* chore: pump drift

* run codegen

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2026-07-16 17:32:30 +00:00
ffafc144c6 refactor: use single bucket for none grouping (#29880)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
2026-07-13 15:01:59 -05:00
shenlongandshenlong-tanwen 4fe33289b8 fix: ignore log db corruptions (#29656)
* fix: ignore log db corruptions

* review suggestion

* log corruption recovery

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2026-07-09 11:36:04 -05:00
Adam GastineauandAlex a225c962de fix(mobile): properly handle live photos locally (#29462)
* fix(mobile): properly handle live photos locally

* Added basic motion photo data tests

* Cover mismatched platforms and motion photos

* Revert unnecessary storage.repository changes

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2026-07-07 12:25:43 -05:00
Ben BeckfordandAlex c7b4a798cb fix: incorrect grouping of recently added assets (#29666)
* fix: incorrect grouping of recently added assets

* chore(web): lint

* chore(web): refactor timeline utc to local dates

* chore(mobile): index remote asset upload dates

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2026-07-07 11:21:58 -05:00
shenlongandshenlong-tanwen 0ebb723b39 fix: wrap migrations in transaction (#29664)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2026-07-07 10:54:24 -05:00
Santo Shakilandmertalev 58b1c5e8fb fix(mobile): fix 10-bit heic and avif colors on android (#29631)
* fix(mobile): fix 10-bit heic and avif colors on android

* fix(mobile): share the decode pool across flutter engines

* vectorize conversion

---------

Co-authored-by: mertalev <101130780+mertalev@users.noreply.github.com>
2026-07-06 21:16:09 +00:00
Santo Shakil 12b7cd066b fix(mobile): show memories with no showAt/hideAt in the timeline lane (#29158) 2026-06-16 18:46:52 +00:00
shenlong 0f49bcbd27 chore: do not optimize on cleanup (#29118) 2026-06-16 12:42:12 -04:00
shenlongandshenlong-tanwen 296cd40da9 refactor: nullable settings key (#28988)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2026-06-11 18:05:50 -05:00
Santo Shakil e2954b6411 fix(mobile): show albums whose assets are all trashed (#28985) 2026-06-11 09:41:02 -05:00
Santo Shakil 9cb94343d1 fix(mobile): keep timezone when editing asset date time (#28978)
* fix(mobile): keep timezone when editing asset date time

* fix(mobile): negative utc offsets with minutes off by an hour
2026-06-10 21:31:31 -05:00
Santo Shakil 07813135b5 fix(mobile): deduplicate people in asset details panel (#28972) 2026-06-10 14:37:45 +00:00
Yaros 346b98ed4f feat(mobile): min face count per-user (#28805) 2026-06-05 13:16:07 -04:00
shenlongandshenlong-tanwen 60683bd91e fix: cross isolate drift watchers (#28862)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2026-06-05 12:15:41 -05:00
Yaros 733373c0ca feat(mobile): ocr support (#26523) 2026-06-05 04:29:03 +05:30
shenlongandshenlong-tanwen 58528cad08 refactor: replace drift_flutter with drift_sqlite_async (#28440)
replace drift_flutter with drift_sqlite_async

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2026-06-05 00:01:50 +05:30
99281de6ab refactor!: disallow star rating < 1 (#27896)
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
Co-authored-by: timonrieger <mail@timonrieger.de>
2026-06-04 17:06:28 +00:00
shenlongandshenlong-tanwen 6b0fd89cd2 refactor: partner-page (#28783)
* refactor: partner-page

* cleanup

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2026-06-04 09:05:45 -04:00
Santo Shakil 429e181c8f fix(mobile): run iOS bg task phases in parallel (#28293)
onIosUpload runs sync local, sync remote, hash and handle backup
sequentially. on the bg refresh task path that's a 20s budget from
iOS, and sync + hash usually eat all of it before backup gets a turn
to enqueue any candidates.

these phases don't actually depend on each other. local + remote sync
touch different tables. hash works off whatever's already in drift.
handle backup reads candidates and just enqueues to URLSession bg.
anything one phase produces in this fire shows up to the others on
the next fire, and server-side dedup catches the rare race where
backup enqueues something sync remote was about to mark as already
uploaded.

so this runs all four concurrently via Future.wait, with hash getting
the full maxSeconds-1 budget instead of a fixed 5s. outer budget
timeout still caps everything before iOS expires.

second small change: getAssetsToHash orders by createdAt DESC instead
of id ASC to match getCandidates. when hash runs inside a refresh
fire it processes recent photos first.
2026-06-03 20:13:52 -05:00
Mert 963862b1b9 fix(mobile): proper background task cleanup (#28694)
* event-based cancellation

wire hash cancellation

await cleanup

remove forced kill

add regression tests

abort sync requests

fix cleanup ordering in teardown

exit isolate

test background sync

test sigabrt crash

cleanup

* abort local sync
2026-06-03 08:16:19 -04:00