diff --git a/src/main.rs b/src/main.rs index 82db5da..544c954 100644 --- a/src/main.rs +++ b/src/main.rs @@ -58,12 +58,12 @@ async fn main() -> error::Result<()> { Ok(result?) } -struct App { - state: JoecalState, +pub struct App { + pub state: JoecalState, rstate: RunningState, - screen: CurrentScreen, + pub screen: CurrentScreen, // addr to (alias, fingerprint) - peers: BTreeMap, + pub peers: BTreeMap, } #[derive(Debug, Clone, Copy, PartialEq, Eq)] diff --git a/src/ui/mod.rs b/src/ui/mod.rs index 7f42f29..5bb3995 100644 --- a/src/ui/mod.rs +++ b/src/ui/mod.rs @@ -1,4 +1,14 @@ -use ratatui::layout::{Constraint, Direction, Layout, Rect}; +use std::{collections::BTreeMap, net::SocketAddr}; + +use ratatui::{ + Frame, + layout::{Constraint, Direction, Layout, Rect}, + style::Stylize, + text::{Line, Span}, + widgets::{List, ListItem}, +}; + +use crate::App; // helper function to create a centered rect using up certain percentage of the // available rect `r` @@ -23,3 +33,18 @@ fn centered_rect(percent_x: u16, percent_y: u16, r: Rect) -> Rect { ]) .split(popup_layout[1])[1] // Return the middle chunk } + +impl App { + pub fn peers(&self, frame: &mut Frame) { + let mut items = Vec::with_capacity(self.peers.len()); + for (k, v) in self.peers.iter() { + let item = format!("{:?}: {}({})", k, v.0, v.1); + let s = Line::from(item.yellow()); + + let item = ListItem::new(s); + items.push(item); + } + let list = List::new(items); + frame.render_widget(list, frame.area()); + } +}