Skip to content

Commit 07b6425

Browse files
jmartinespbnjbvr
authored andcommitted
ffi: Timeline::load_reply_details checks if the event exists locally
Before it would go fetch the event from the server using a network request.
1 parent d49cb54 commit 07b6425

File tree

2 files changed

+30
-21
lines changed
  • bindings/matrix-sdk-ffi/src/timeline
  • crates/matrix-sdk-ui/src/timeline/event_item/content

2 files changed

+30
-21
lines changed

bindings/matrix-sdk-ffi/src/timeline/mod.rs

Lines changed: 29 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,12 @@ use as_variant::as_variant;
1919
use content::{InReplyToDetails, RepliedToEventDetails};
2020
use eyeball_im::VectorDiff;
2121
use futures_util::{pin_mut, StreamExt as _};
22-
use matrix_sdk::attachment::{
23-
AttachmentConfig, AttachmentInfo, BaseAudioInfo, BaseFileInfo, BaseImageInfo,
24-
BaseThumbnailInfo, BaseVideoInfo, Thumbnail,
22+
use matrix_sdk::{
23+
attachment::{
24+
AttachmentConfig, AttachmentInfo, BaseAudioInfo, BaseFileInfo, BaseImageInfo,
25+
BaseThumbnailInfo, BaseVideoInfo, Thumbnail,
26+
},
27+
Error,
2528
};
2629
use matrix_sdk_ui::timeline::{
2730
EventItemOrigin, LiveBackPaginationStatus, Profile, RepliedToEvent, TimelineDetails,
@@ -636,23 +639,29 @@ impl Timeline {
636639
) -> Result<InReplyToDetails, ClientError> {
637640
let event_id = EventId::parse(&event_id_str)?;
638641

639-
match self.inner.room().event(&event_id).await {
640-
Ok(timeline_event) => {
641-
let replied_to = RepliedToEvent::try_from_timeline_event_for_room(
642-
timeline_event,
643-
self.inner.room(),
644-
)
645-
.await?;
646-
647-
Ok(InReplyToDetails::new(
648-
event_id_str,
649-
RepliedToEventDetails::Ready {
650-
content: Arc::new(TimelineItemContent(replied_to.content().clone())),
651-
sender: replied_to.sender().to_string(),
652-
sender_profile: replied_to.sender_profile().into(),
653-
},
654-
))
655-
}
642+
let replied_to: Result<RepliedToEvent, Error> =
643+
if let Some(event) = self.inner.item_by_event_id(&event_id).await {
644+
Ok(RepliedToEvent::from_timeline_item(&event))
645+
} else {
646+
match self.inner.room().event(&event_id).await {
647+
Ok(timeline_event) => Ok(RepliedToEvent::try_from_timeline_event_for_room(
648+
timeline_event,
649+
self.inner.room(),
650+
)
651+
.await?),
652+
Err(e) => Err(e),
653+
}
654+
};
655+
656+
match replied_to {
657+
Ok(replied_to) => Ok(InReplyToDetails::new(
658+
event_id_str,
659+
RepliedToEventDetails::Ready {
660+
content: Arc::new(TimelineItemContent(replied_to.content().clone())),
661+
sender: replied_to.sender().to_string(),
662+
sender_profile: replied_to.sender_profile().into(),
663+
},
664+
)),
656665

657666
Err(e) => Ok(InReplyToDetails::new(
658667
event_id_str,

crates/matrix-sdk-ui/src/timeline/event_item/content/message.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,7 @@ impl RepliedToEvent {
263263
&self.sender_profile
264264
}
265265

266-
pub(crate) fn from_timeline_item(timeline_item: &EventTimelineItem) -> Self {
266+
pub fn from_timeline_item(timeline_item: &EventTimelineItem) -> Self {
267267
Self {
268268
content: timeline_item.content.clone(),
269269
sender: timeline_item.sender.clone(),

0 commit comments

Comments
 (0)