Dates: serve the display wall clock (wall_clock) to clients
Every payload a client renders a capture time from now carries `wall_clock`, a naive ISO-8601 string computed by the existing `date_view::row_display_wall`: the camera's wall clock (true instant + camera offset; the owner's display zone without an offset), with the per-source fallback for unconverted rows. Clients render it verbatim and do no zone math, which is the FileViewer-React #33 / Apollo #37 flip with the rule kept server-side: the drain's permanent `date_utc IS NULL` floor (#120: edited/exported files) would otherwise force every client to carry the per-source legacy conventions forever, and insight prompts already use the same function, so prompt and UI agree by construction. - `/image/metadata` (+ the GPS / date / date-clear mutation responses): `file_wall_clock` — the row's wall, else the filename-class date, else the earliest fs time in the display zone (unindexed files). - `/memories` items and `/photos/gps-summary` photos: `row_wall_clock`. - `get_all_with_gps` returns full rows instead of a 7-tuple that dropped `date_taken_source`, which unconverted rows need. - `date_view::owner_display_zone` resolves prefs -> app default per request. Legacy fields are untouched, so current clients see byte-identical responses (additive; safe to deploy ahead of the client flip, per #120). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
e0c6c696f2
commit
e2f33684c8
8 files changed
+257
-93
No files matched your search
@@ -467,6 +467,18 @@ are SMS-derived and unaffected. Progress: Prometheus
|
||||
`date_backfill_remaining` per library on `GET /libraries` (live count of
|
||||
`date_utc IS NULL`).
|
||||
|
||||
**Displaying a capture time: `wall_clock`.** Every payload a client renders a
|
||||
capture time from (`/image/metadata` + the date/GPS mutation responses,
|
||||
`/memories` items, `/photos/gps-summary`) carries `wall_clock`, a naive
|
||||
ISO-8601 string (`2018-09-29T14:00:00`) computed by
|
||||
`date_view::row_display_wall` — the camera's wall clock (instant + camera
|
||||
offset; the owner's display zone when there's no offset), with the per-source
|
||||
fallback for rows the drain can't convert (its permanent floor).
|
||||
`file_wall_clock` covers files with no row yet (filename date, then fs time).
|
||||
Clients render it verbatim and do no zone math (ADR-0001; FileViewer-React #33,
|
||||
Apollo #37). Insight prompts use the same function, so prompt and UI agree.
|
||||
`dev/e2e/e2e.sh check` verifies it for every fixture on all three endpoints.
|
||||
|
||||
`/memories` is a single SQL query against this column
|
||||
(`get_memories_in_window` in `src/database/mod.rs`), using
|
||||
`strftime('%m-%d' | '%W' | '%m', date_taken, 'unixepoch', tz)` for
|
||||
|
||||
Reference in new issue
Block a user