From 5611d8e3853c920fc157babf57e3a066b27b4d75 Mon Sep 17 00:00:00 2001 From: antifallobst Date: Sat, 8 Jul 2023 23:37:10 +0200 Subject: [PATCH] feature (ui - room info): added basic infos (name & encryption status) to the main ui's 'room info' panel --- src/app/status.rs | 6 ++++++ src/ui/mod.rs | 26 ++++++++++++++++++++------ 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/src/app/status.rs b/src/app/status.rs index c5ac502..6110cfd 100644 --- a/src/app/status.rs +++ b/src/app/status.rs @@ -19,6 +19,7 @@ pub enum State { pub struct Room { matrix_room: matrix_sdk::room::Joined, name: String, + encrypted: bool, timeline: Vec, timeline_end: Option, view_scroll: Option, @@ -39,6 +40,7 @@ impl Room { Self { matrix_room, name: "".to_string(), + encrypted: false, timeline: Vec::new(), timeline_end: None, view_scroll: None, @@ -101,6 +103,10 @@ impl Room { pub fn set_view_scroll(&mut self, scroll: Option) { self.view_scroll = scroll; } + + pub fn encrypted(&self) -> bool { + self.matrix_room.is_encrypted() + } } impl Status { diff --git a/src/ui/mod.rs b/src/ui/mod.rs index 5dbab21..18280f6 100644 --- a/src/ui/mod.rs +++ b/src/ui/mod.rs @@ -335,14 +335,26 @@ impl UI<'_> { .collect::>() }, None => { - vec![ListItem::new(Text::styled("No room selected!", Style::default().fg(Color::Magenta)))] + vec![ListItem::new(Text::styled("No room selected!", Style::default().fg(Color::Red)))] } }; let mut messages_state = ListState::default(); + let mut room_info_content = Text::default(); + if let Some(room) = status.room() { messages_state.select(room.view_scroll()); - }; + + room_info_content.extend(Text::styled(room.name(), Style::default().fg(Color::Cyan))); + if room.encrypted() { + room_info_content.extend(Text::styled("Encrypted", Style::default().fg(Color::Green))); + } else { + room_info_content.extend(Text::styled("Not Encrypted!", Style::default().fg(Color::Red))); + } + } else { + room_info_content.extend(Text::styled("No room selected!", Style::default().fg(Color::Red))); + } + // calculate to widgets colors, based of which widget is currently selected let colors = match self.input_position { @@ -394,10 +406,12 @@ impl UI<'_> { .highlight_symbol(">") .highlight_style(Style::default().fg(Color::LightMagenta).add_modifier(Modifier::BOLD)); - let room_info_panel = Block::default() - .title("Room Info") - .borders(Borders::ALL) - .style(Style::default().fg(colors[MainInputPosition::RoomInfo as usize])); + let room_info_panel = Paragraph::new(room_info_content) + .block(Block::default() + .title("Room Info") + .borders(Borders::ALL) + .style(Style::default().fg(colors[MainInputPosition::RoomInfo as usize]))) + .alignment(Alignment::Center); // render the widgets