diff --git a/labs/multiverse/src/widgets/room_view/details/read_receipts.rs b/labs/multiverse/src/widgets/room_view/details/read_receipts.rs index 412db00aa..704ace174 100644 --- a/labs/multiverse/src/widgets/room_view/details/read_receipts.rs +++ b/labs/multiverse/src/widgets/room_view/details/read_receipts.rs @@ -1,4 +1,4 @@ -use matrix_sdk::{ruma::EventId, Room}; +use matrix_sdk::Room; use matrix_sdk_base::read_receipts::RoomReadReceipts; use matrix_sdk_ui::timeline::TimelineItem; use ratatui::{ @@ -38,31 +38,16 @@ fn render_room_stats(room: &Room, area: Rect, buf: &mut Buffer) { .render(area, buf); } -fn find_selected_event(item: &TimelineItem, selected_event: &EventId) -> bool { - match item.as_event() { - Some(event) => event.event_id() == Some(selected_event), - None => false, - } -} - impl Widget for &mut ReadReceipts<'_> { fn render(self, area: Rect, buf: &mut Buffer) where Self: Sized, { - match self.state.selected_room { - Some(room) => match (self.state.timeline_items, self.state.selected_event.as_deref()) { - (None, None) | (None, Some(_)) | (Some(_), None) => { - render_room_stats(room, area, buf) - } - (Some(items), Some(selected_event)) => { - let item = - items.into_iter().find(|&item| find_selected_event(item, selected_event)); - - if let Some(item) = item.and_then(|i| format_timeline_item(i)) { - let second_item = ListItem::from(selected_event.to_string()); - - let list = List::new(vec![second_item, item]) + if let Some(room) = self.state.selected_room { + match self.state.selected_item.as_deref() { + Some(selected_event) => { + if let Some(item) = format_timeline_item(selected_event) { + let list = List::new(vec![item]) .highlight_spacing(HighlightSpacing::Always) .highlight_symbol(">") .highlight_style(SELECTED_STYLE_FG); @@ -74,11 +59,11 @@ impl Widget for &mut ReadReceipts<'_> { render_room_stats(room, area, buf); } } - }, - None => { - let content = "(room disappeared in the room list service)"; - Paragraph::new(content).fg(TEXT_COLOR).wrap(Wrap { trim: false }).render(area, buf); + None => render_room_stats(room, area, buf), } + } else { + let content = "(room disappeared in the room list service)"; + Paragraph::new(content).fg(TEXT_COLOR).wrap(Wrap { trim: false }).render(area, buf); } } } diff --git a/labs/multiverse/src/widgets/room_view/mod.rs b/labs/multiverse/src/widgets/room_view/mod.rs index ecca94f01..c227705a6 100644 --- a/labs/multiverse/src/widgets/room_view/mod.rs +++ b/labs/multiverse/src/widgets/room_view/mod.rs @@ -41,8 +41,7 @@ const DEFAULT_TILING_DIRECTION: Direction = Direction::Horizontal; pub struct DetailsState<'a> { selected_room: Option<&'a Room>, - timeline_items: Option<&'a Vector>>, - selected_event: Option, + selected_item: Option>, } enum Mode { @@ -579,16 +578,10 @@ impl RoomView { } } - fn get_selected_event_id(&self) -> Option { + fn get_selected_event(&self) -> Option> { let selected = self.timeline_list.selected()?; - let selected_room = self.room_id()?; - - let timelines = self.timelines.lock(); - let current_timeline = timelines.get(selected_room)?; - let items = current_timeline.items.lock(); - let item = items.get(selected)?; - - item.as_event()?.event_id().map(|e| e.to_owned()) + let items = self.get_selected_timeline_items()?; + items.get(selected).cloned() } fn update(&mut self) { @@ -642,13 +635,11 @@ impl Widget for &mut RoomView { .render(middle_area, buf); }; - let selected_event = self.get_selected_event_id(); - if let Some(room_id) = self.room_id() { let maybe_room = self.client.get_room(room_id); let mut maybe_room = maybe_room.as_ref(); - let items = self.get_selected_timeline_items(); + let selected_event = self.get_selected_event(); let timeline_area = match &mut self.mode { Mode::Normal { invited_room_view } => { @@ -670,23 +661,10 @@ impl Widget for &mut RoomView { let [timeline_area, details_area] = vertical.areas(middle_area); Clear.render(details_area, buf); - if let Some(items) = items { - let mut state = DetailsState { - selected_room: maybe_room, - timeline_items: Some(&items), - selected_event, - }; + let mut state = + DetailsState { selected_room: maybe_room, selected_item: selected_event }; - view.render(details_area, buf, &mut state); - } else { - let mut state = DetailsState { - selected_room: maybe_room, - timeline_items: None, - selected_event, - }; - - view.render(details_area, buf, &mut state); - } + view.render(details_area, buf, &mut state); Some(timeline_area) }