feat(core,fuse,gui): "On this day" strip above the photos timeline

Add a PhotosOnThisDay control request, served from the stored timeline:
photos whose local capture date matches today's in earlier years, one
row per group. The GUI shows a card per year ("3 years ago") with the
year's newest photo as its cover; clicking a card scrolls the timeline
to that day. The strip is revealed only at the top of the whole,
unfiltered timeline, so it gives the grid its room back once you
scroll or filter.
This commit is contained in:
nvrl committed 2026-09-28 02:12:59 +02:00
1 parent c3ec82392a
commit 7dbf818d83
17 files changed
+2017 -1551

No files matched your search

+32
View File
@@ -253,6 +253,38 @@ fn favorites_are_remembered_across_refreshes_and_filter_a_page() {
assert!(db.photos_by_uid(&["p2".into()]).unwrap()[0].favorite);
}
/// The strip shows the same calendar day in earlier years only: not today's
/// own photos, not the day before, and one tile per RAW+JPEG shot.
#[test]
fn on_this_day_finds_the_same_date_in_earlier_years() {
const DAY: i64 = 86_400;
// Noon UTC, so the local date is the same in every common time zone.
let today = 1_781_524_800; // 2026-06-15 12:00 UTC
let year_ago = today - 365 * DAY; // 2025-06-15
let three_years_ago = today - (365 * 3 + 1) * DAY; // 2023-06-15, past a 29 February
let db = Db::open_in_memory().unwrap();
db.photos_replace(&[
TimelineRow::new("today", today),
TimelineRow {
name: Some("IMG_1.JPG".into()),
..TimelineRow::new("jpeg", year_ago)
},
TimelineRow {
name: Some("IMG_1.CR2".into()),
..TimelineRow::new("raw", year_ago)
},
TimelineRow::new("day-before", year_ago - DAY),
TimelineRow::new("older", three_years_ago),
])
.unwrap();
let found = db.photos_on_this_day(today, 10).unwrap();
assert_eq!(
found.iter().map(|p| p.uid.as_str()).collect::<Vec<_>>(),
["jpeg", "older"]
);
}
#[test]
fn not_in_album_hides_photos_any_album_holds() {
let db = Db::open_in_memory().unwrap();