From f5b6767253abebe65cbbfe34ddb5ab967fdec6ea Mon Sep 17 00:00:00 2001 From: Benjamin Bouvier Date: Wed, 19 Mar 2025 16:09:37 +0100 Subject: [PATCH] feat(timeline): add a timeline start virtual item --- bindings/matrix-sdk-ffi/src/timeline/mod.rs | 4 ++++ crates/matrix-sdk-ui/src/timeline/date_dividers.rs | 11 +++++++---- crates/matrix-sdk-ui/src/timeline/virtual_item.rs | 4 ++++ labs/multiverse/src/main.rs | 3 +++ 4 files changed, 18 insertions(+), 4 deletions(-) diff --git a/bindings/matrix-sdk-ffi/src/timeline/mod.rs b/bindings/matrix-sdk-ffi/src/timeline/mod.rs index 143d9c3ce..19c2eefe2 100644 --- a/bindings/matrix-sdk-ffi/src/timeline/mod.rs +++ b/bindings/matrix-sdk-ffi/src/timeline/mod.rs @@ -974,6 +974,7 @@ impl TimelineItem { match self.0.as_virtual()? { VItem::DateDivider(ts) => Some(VirtualTimelineItem::DateDivider { ts: (*ts).into() }), VItem::ReadMarker => Some(VirtualTimelineItem::ReadMarker), + VItem::TimelineStart => Some(VirtualTimelineItem::TimelineStart), } } @@ -1254,6 +1255,9 @@ pub enum VirtualTimelineItem { /// The user's own read marker. ReadMarker, + + /// The timeline start, that is, the *oldest* event in time for that room. + TimelineStart, } /// A [`TimelineItem`](super::TimelineItem) that doesn't correspond to an event. diff --git a/crates/matrix-sdk-ui/src/timeline/date_dividers.rs b/crates/matrix-sdk-ui/src/timeline/date_dividers.rs index b3ce04704..42082b99f 100644 --- a/crates/matrix-sdk-ui/src/timeline/date_dividers.rs +++ b/crates/matrix-sdk-ui/src/timeline/date_dividers.rs @@ -153,7 +153,8 @@ impl DateDividerAdjuster { latest_event_ts = Some(ts); } - TimelineItemKind::Virtual(VirtualTimelineItem::ReadMarker) => { + TimelineItemKind::Virtual(VirtualTimelineItem::ReadMarker) + | TimelineItemKind::Virtual(VirtualTimelineItem::TimelineStart) => { // Nothing to do. } } @@ -242,8 +243,9 @@ impl DateDividerAdjuster { return true; } - TimelineItemKind::Virtual(VirtualTimelineItem::ReadMarker) => { - // Nothing to do for read markers. + TimelineItemKind::Virtual(VirtualTimelineItem::ReadMarker) + | TimelineItemKind::Virtual(VirtualTimelineItem::TimelineStart) => { + // Nothing to do. } } @@ -304,7 +306,8 @@ impl DateDividerAdjuster { } } - TimelineItemKind::Virtual(VirtualTimelineItem::ReadMarker) => { + TimelineItemKind::Virtual(VirtualTimelineItem::ReadMarker) + | TimelineItemKind::Virtual(VirtualTimelineItem::TimelineStart) => { // Nothing to do. } } diff --git a/crates/matrix-sdk-ui/src/timeline/virtual_item.rs b/crates/matrix-sdk-ui/src/timeline/virtual_item.rs index 727a44c2f..68e4bcbc4 100644 --- a/crates/matrix-sdk-ui/src/timeline/virtual_item.rs +++ b/crates/matrix-sdk-ui/src/timeline/virtual_item.rs @@ -26,4 +26,8 @@ pub enum VirtualTimelineItem { /// The user's own read marker. ReadMarker, + + /// The timeline start, that is, an indication that we've seen all the + /// events for that timeline. + TimelineStart, } diff --git a/labs/multiverse/src/main.rs b/labs/multiverse/src/main.rs index 20bf9a60a..2000bd627 100644 --- a/labs/multiverse/src/main.rs +++ b/labs/multiverse/src/main.rs @@ -836,6 +836,9 @@ impl App { VirtualTimelineItem::ReadMarker => { content.push("Read marker".to_owned()); } + VirtualTimelineItem::TimelineStart => { + content.push("🥳 Timeline start! 🥳".to_owned()); + } }, } }