76 lines
2 KiB
Rust
76 lines
2 KiB
Rust
use ratatui::{
|
|
buffer::Buffer,
|
|
layout::Rect,
|
|
style::Stylize,
|
|
text::Line,
|
|
widgets::{Block, Borders, List, ListItem, Padding, Widget},
|
|
};
|
|
|
|
use super::Peers;
|
|
|
|
#[derive(Debug, Clone)]
|
|
pub struct PeersWidget<'p> {
|
|
pub peers: &'p Peers,
|
|
}
|
|
|
|
impl<'p> Widget for PeersWidget<'p> {
|
|
fn render(self, area: Rect, buf: &mut Buffer)
|
|
where
|
|
Self: Sized,
|
|
{
|
|
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 title = Line::from(" Peers ".bold()).centered();
|
|
let block = Block::default()
|
|
.title(title)
|
|
.borders(Borders::all())
|
|
.padding(Padding::uniform(1));
|
|
let list = List::new(items).block(block);
|
|
list.render(area, buf);
|
|
}
|
|
}
|
|
|
|
#[derive(Debug, Clone)]
|
|
pub struct NetworkInfoWidget;
|
|
|
|
impl Widget for NetworkInfoWidget {
|
|
fn render(self, area: Rect, buf: &mut Buffer)
|
|
where
|
|
Self: Sized,
|
|
{
|
|
let udp: Line = format!("UDP socket:\t\t\t {:?}", joecalsend::LISTENING_SOCKET_ADDR)
|
|
.yellow()
|
|
.into();
|
|
let multicast: Line = format!(
|
|
"Multicast address:\t\t {:?}:{}",
|
|
joecalsend::MULTICAST_IP,
|
|
joecalsend::DEFAULT_PORT
|
|
)
|
|
.yellow()
|
|
.into();
|
|
let http: Line = format!(
|
|
"HTTP address:\t\t\t {:?}",
|
|
joecalsend::LISTENING_SOCKET_ADDR
|
|
)
|
|
.yellow()
|
|
.into();
|
|
let items = [
|
|
ListItem::new(udp),
|
|
ListItem::new(multicast),
|
|
ListItem::new(http),
|
|
];
|
|
let title = Line::from(" Listeners ".bold()).centered();
|
|
let block = Block::default()
|
|
.title(title)
|
|
.borders(Borders::all())
|
|
.padding(Padding::uniform(1));
|
|
let list = List::new(items).block(block);
|
|
list.render(area, buf);
|
|
}
|
|
}
|