From f344aa76698b8daf1e6bf5f0ceae7e0effde9161 Mon Sep 17 00:00:00 2001 From: Jonas Platte Date: Mon, 3 Jul 2023 17:49:18 +0200 Subject: [PATCH] sdk: Add EventTimelineItem::origin --- .../src/timeline/event_item/mod.rs | 25 +++++++++++++++++++ crates/matrix-sdk-ui/src/timeline/mod.rs | 6 ++--- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/crates/matrix-sdk-ui/src/timeline/event_item/mod.rs b/crates/matrix-sdk-ui/src/timeline/event_item/mod.rs index 85ddf41b9..1030cf0d1 100644 --- a/crates/matrix-sdk-ui/src/timeline/event_item/mod.rs +++ b/crates/matrix-sdk-ui/src/timeline/event_item/mod.rs @@ -259,6 +259,20 @@ impl EventTimelineItem { } } + /// Get the origin of the event, i.e. where it came from. + /// + /// May return `None` in some edge cases that are subject to change. + pub fn origin(&self) -> Option { + match &self.kind { + EventTimelineItemKind::Local(_) => Some(EventItemOrigin::Local), + EventTimelineItemKind::Remote(remote_event) => match remote_event.origin { + RemoteEventOrigin::Sync => Some(EventItemOrigin::Sync), + RemoteEventOrigin::Pagination => Some(EventItemOrigin::Pagination), + _ => None, + }, + } + } + pub(super) fn set_content(&mut self, content: TimelineItemContent) { self.content = content; } @@ -357,3 +371,14 @@ impl TimelineDetails { matches!(self, Self::Ready(v) if v == value) } } + +/// Where this event came. +#[derive(Clone, Copy, Debug)] +pub enum EventItemOrigin { + /// The event was created locally. + Local, + /// The event came from a sync response. + Sync, + /// The event came from pagination. + Pagination, +} diff --git a/crates/matrix-sdk-ui/src/timeline/mod.rs b/crates/matrix-sdk-ui/src/timeline/mod.rs index 3be158d73..7577c5218 100644 --- a/crates/matrix-sdk-ui/src/timeline/mod.rs +++ b/crates/matrix-sdk-ui/src/timeline/mod.rs @@ -70,9 +70,9 @@ pub(crate) use self::builder::TimelineBuilder; pub use self::sliding_sync_ext::SlidingSyncRoomExt; pub use self::{ event_item::{ - AnyOtherFullStateEventContent, BundledReactions, EncryptedMessage, EventSendState, - EventTimelineItem, InReplyToDetails, MemberProfileChange, MembershipChange, Message, - OtherState, Profile, ReactionGroup, RepliedToEvent, RoomMembershipChange, Sticker, + AnyOtherFullStateEventContent, BundledReactions, EncryptedMessage, EventItemOrigin, + EventSendState, EventTimelineItem, InReplyToDetails, MemberProfileChange, MembershipChange, + Message, OtherState, Profile, ReactionGroup, RepliedToEvent, RoomMembershipChange, Sticker, TimelineDetails, TimelineItemContent, }, futures::SendAttachment,