feat(ffi): Add LocalEventTimelineItemSendState + EventTimelineItem::local_send_state.

This commit is contained in:
Ivan Enderlin
2023-01-30 13:51:29 +01:00
parent 8ea2cef55d
commit c8d561d17d
2 changed files with 41 additions and 5 deletions

View File

@@ -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,
},
};
}

View File

@@ -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<matrix_sdk::room::timeline::LocalEventTimelineItemSendState>
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<LocalEventTimelineItemSendState> {
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)
}