feature (ui - room info): added basic infos (name & encryption status) to the main ui's 'room info' panel

This commit is contained in:
antifallobst 2023-07-08 23:37:10 +02:00
parent 98f7e806de
commit 5611d8e385
2 changed files with 26 additions and 6 deletions

View File

@ -19,6 +19,7 @@ pub enum State {
pub struct Room { pub struct Room {
matrix_room: matrix_sdk::room::Joined, matrix_room: matrix_sdk::room::Joined,
name: String, name: String,
encrypted: bool,
timeline: Vec<AnyTimelineEvent>, timeline: Vec<AnyTimelineEvent>,
timeline_end: Option<String>, timeline_end: Option<String>,
view_scroll: Option<usize>, view_scroll: Option<usize>,
@ -39,6 +40,7 @@ impl Room {
Self { Self {
matrix_room, matrix_room,
name: "".to_string(), name: "".to_string(),
encrypted: false,
timeline: Vec::new(), timeline: Vec::new(),
timeline_end: None, timeline_end: None,
view_scroll: None, view_scroll: None,
@ -101,6 +103,10 @@ impl Room {
pub fn set_view_scroll(&mut self, scroll: Option<usize>) { pub fn set_view_scroll(&mut self, scroll: Option<usize>) {
self.view_scroll = scroll; self.view_scroll = scroll;
} }
pub fn encrypted(&self) -> bool {
self.matrix_room.is_encrypted()
}
} }
impl Status { impl Status {

View File

@ -335,14 +335,26 @@ impl UI<'_> {
.collect::<Vec<_>>() .collect::<Vec<_>>()
}, },
None => { 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 messages_state = ListState::default();
let mut room_info_content = Text::default();
if let Some(room) = status.room() { if let Some(room) = status.room() {
messages_state.select(room.view_scroll()); 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 // calculate to widgets colors, based of which widget is currently selected
let colors = match self.input_position { let colors = match self.input_position {
@ -394,10 +406,12 @@ impl UI<'_> {
.highlight_symbol(">") .highlight_symbol(">")
.highlight_style(Style::default().fg(Color::LightMagenta).add_modifier(Modifier::BOLD)); .highlight_style(Style::default().fg(Color::LightMagenta).add_modifier(Modifier::BOLD));
let room_info_panel = Block::default() let room_info_panel = Paragraph::new(room_info_content)
.block(Block::default()
.title("Room Info") .title("Room Info")
.borders(Borders::ALL) .borders(Borders::ALL)
.style(Style::default().fg(colors[MainInputPosition::RoomInfo as usize])); .style(Style::default().fg(colors[MainInputPosition::RoomInfo as usize])))
.alignment(Alignment::Center);
// render the widgets // render the widgets