Skip to content

Commit fd9d3bd

Browse files
committed
timeline: refactor edit_info/replied_to_info
1 parent a2235d5 commit fd9d3bd

File tree

1 file changed

+41
-54
lines changed
  • crates/matrix-sdk-ui/src/timeline

1 file changed

+41
-54
lines changed

crates/matrix-sdk-ui/src/timeline/mod.rs

Lines changed: 41 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ use ruma::{
5151
redaction::RoomRedactionEventContent,
5252
},
5353
AnyMessageLikeEventContent, AnySyncMessageLikeEvent, AnySyncTimelineEvent,
54+
SyncMessageLikeEvent,
5455
},
5556
serde::Raw,
5657
uint, EventId, MilliSecondsSinceUnixEpoch, OwnedEventId, OwnedTransactionId, OwnedUserId,
@@ -411,39 +412,32 @@ impl Timeline {
411412
return timeline_item.replied_to_info();
412413
}
413414

414-
let event = match self.room().event(event_id).await {
415-
Ok(event) => event,
416-
Err(error) => {
417-
error!("Failed to fetch event with ID {event_id} with error: {error}");
418-
return Err(UnsupportedReplyItem::MISSING_EVENT);
419-
}
420-
};
415+
let event = self.room().event(event_id).await.map_err(|error| {
416+
error!("Failed to fetch event with ID {event_id} with error: {error}");
417+
UnsupportedReplyItem::MISSING_EVENT
418+
})?;
421419

422-
// We need to get the content and we can do that by casting
423-
// the event as a `AnySyncTimelineEvent` which is the same as a
424-
// `AnyTimelineEvent`, but without the `room_id` field.
425-
// The cast is valid because we are just losing track of such field.
420+
// We need to get the content and we can do that by casting the event as a
421+
// `AnySyncTimelineEvent` which is the same as a `AnyTimelineEvent`, but without
422+
// the `room_id` field. The cast is valid because we are just losing
423+
// track of such field.
426424
let raw_sync_event: Raw<AnySyncTimelineEvent> = event.event.cast();
427-
let sync_event = match raw_sync_event.deserialize() {
428-
Ok(event) => event,
429-
Err(error) => {
430-
error!("Failed to deserialize event with ID {event_id} with error: {error}");
431-
return Err(UnsupportedReplyItem::FAILED_TO_DESERIALIZE_EVENT);
432-
}
433-
};
425+
let sync_event = raw_sync_event.deserialize().map_err(|error| {
426+
error!("Failed to deserialize event with ID {event_id} with error: {error}");
427+
UnsupportedReplyItem::FAILED_TO_DESERIALIZE_EVENT
428+
})?;
434429

435430
let reply_content = match &sync_event {
436431
AnySyncTimelineEvent::MessageLike(message_like_event) => {
437-
if let AnySyncMessageLikeEvent::RoomMessage(message_event) = message_like_event {
438-
if let Some(original_message) = message_event.as_original() {
439-
ReplyContent::Message(Message::from_event(
440-
original_message.content.clone(),
441-
message_like_event.relations(),
442-
&self.items().await,
443-
))
444-
} else {
445-
ReplyContent::Raw(raw_sync_event)
446-
}
432+
if let AnySyncMessageLikeEvent::RoomMessage(SyncMessageLikeEvent::Original(
433+
original_message,
434+
)) = message_like_event
435+
{
436+
ReplyContent::Message(Message::from_event(
437+
original_message.content.clone(),
438+
message_like_event.relations(),
439+
&self.items().await,
440+
))
447441
} else {
448442
ReplyContent::Raw(raw_sync_event)
449443
}
@@ -518,46 +512,39 @@ impl Timeline {
518512
return timeline_item.edit_info();
519513
}
520514

521-
let event = match self.room().event(event_id).await {
522-
Ok(event) => event,
523-
Err(error) => {
524-
error!("Failed to fetch event with ID {event_id} with error: {error}");
525-
return Err(UnsupportedEditItem::MISSING_EVENT);
526-
}
527-
};
515+
let event = self.room().event(event_id).await.map_err(|error| {
516+
error!("Failed to fetch event with ID {event_id} with error: {error}");
517+
UnsupportedEditItem::MISSING_EVENT
518+
})?;
528519

529520
// We need to get the content and we can do that by casting
530521
// the event as a `AnySyncTimelineEvent` which is the same as a
531522
// `AnyTimelineEvent`, but without the `room_id` field.
532523
// The cast is valid because we are just losing track of such field.
533524
let raw_sync_event: Raw<AnySyncTimelineEvent> = event.event.cast();
534-
let event = match raw_sync_event.deserialize() {
535-
Ok(event) => event,
536-
Err(error) => {
537-
error!("Failed to deserialize event with ID {event_id} with error: {error}");
538-
return Err(UnsupportedEditItem::FAILED_TO_DESERIALIZE_EVENT);
539-
}
540-
};
525+
let event = raw_sync_event.deserialize().map_err(|error| {
526+
error!("Failed to deserialize event with ID {event_id} with error: {error}");
527+
UnsupportedEditItem::FAILED_TO_DESERIALIZE_EVENT
528+
})?;
541529

542530
if event.sender() != self.room().own_user_id() {
543531
return Err(UnsupportedEditItem::NOT_OWN_EVENT);
544532
};
545533

546534
if let AnySyncTimelineEvent::MessageLike(message_like_event) = &event {
547-
if let AnySyncMessageLikeEvent::RoomMessage(message_event) = message_like_event {
548-
if let Some(original_message) = message_event.as_original() {
549-
let message = Message::from_event(
550-
original_message.content.clone(),
551-
message_like_event.relations(),
552-
&self.items().await,
553-
);
554-
return Ok(EditInfo {
555-
event_id: event_id.to_owned(),
556-
original_message: message,
557-
});
558-
}
535+
if let AnySyncMessageLikeEvent::RoomMessage(SyncMessageLikeEvent::Original(
536+
original_message,
537+
)) = message_like_event
538+
{
539+
let message = Message::from_event(
540+
original_message.content.clone(),
541+
message_like_event.relations(),
542+
&self.items().await,
543+
);
544+
return Ok(EditInfo { event_id: event_id.to_owned(), original_message: message });
559545
}
560546
}
547+
561548
Err(UnsupportedEditItem::NOT_ROOM_MESSAGE)
562549
}
563550

0 commit comments

Comments
 (0)