diff --git a/bindings/matrix-sdk-ffi/src/lib.rs b/bindings/matrix-sdk-ffi/src/lib.rs index 2710a7038..4cb893531 100644 --- a/bindings/matrix-sdk-ffi/src/lib.rs +++ b/bindings/matrix-sdk-ffi/src/lib.rs @@ -91,11 +91,12 @@ mod uniffi_types { }, timeline::{ EmoteMessageContent, EncryptedMessage, EventTimelineItem, FileInfo, FileMessageContent, - FormattedBody, ImageInfo, ImageMessageContent, InsertAtData, MembershipChange, Message, - MessageFormat, MessageType, NoticeMessageContent, OtherState, Profile, Reaction, - TextMessageContent, ThumbnailInfo, TimelineChange, TimelineDiff, TimelineItem, - TimelineItemContent, TimelineItemContentKind, UpdateAtData, VideoInfo, - VideoMessageContent, VirtualTimelineItem, + FormattedBody, ImageInfo, ImageMessageContent, InsertAtData, + LocalEventTimelineItemSendState, MembershipChange, Message, MessageFormat, MessageType, + NoticeMessageContent, OtherState, Profile, Reaction, TextMessageContent, ThumbnailInfo, + TimelineChange, TimelineDiff, TimelineItem, TimelineItemContent, + TimelineItemContentKind, UpdateAtData, VideoInfo, VideoMessageContent, + VirtualTimelineItem, }, }; } diff --git a/bindings/matrix-sdk-ffi/src/timeline.rs b/bindings/matrix-sdk-ffi/src/timeline.rs index 2dc7c748b..ca2233ba4 100644 --- a/bindings/matrix-sdk-ffi/src/timeline.rs +++ b/bindings/matrix-sdk-ffi/src/timeline.rs @@ -170,6 +170,32 @@ impl TimelineItem { } } +/// This type represents the “send state” of a local event timeline item. +#[derive(Clone, uniffi::Enum)] +pub enum LocalEventTimelineItemSendState { + /// The local event has not been sent yet. + NotSendYet, + /// The local event has been sent to the server, but unsucessfully: The + /// sending has failed. + SendingFailed, + /// The local event has been sent successfully to the server. + Sent, +} + +impl From + for LocalEventTimelineItemSendState +{ + fn from(value: matrix_sdk::room::timeline::LocalEventTimelineItemSendState) -> Self { + use matrix_sdk::room::timeline::LocalEventTimelineItemSendState::*; + + match value { + NotSentYet => Self::NotSendYet, + SendingFailed => Self::SendingFailed, + Sent => Self::Sent, + } + } +} + #[derive(uniffi::Object)] pub struct EventTimelineItem(pub(crate) matrix_sdk::room::timeline::EventTimelineItem); @@ -234,6 +260,15 @@ impl EventTimelineItem { self.0.raw().map(|r| r.json().get().to_owned()) } + pub fn local_send_state(&self) -> Option { + use matrix_sdk::room::timeline::EventTimelineItem::*; + + match &self.0 { + Local(local_event) => Some(local_event.send_state.into()), + Remote(_) => None, + } + } + pub fn fmt_debug(&self) -> String { format!("{:#?}", self.0) }