adguardian/widgets/
status.rs1use tui::{
2 style::{Color, Style, Modifier},
3 text::{Span, Spans},
4 widgets::{Paragraph, Wrap, Borders, Block},
5};
6
7use crate::fetch::fetch_status::StatusResponse;
8use crate::fetch::fetch_stats::StatsResponse;
9
10pub fn render_status_paragraph<'a>(status: &'a StatusResponse, stats: &'a StatsResponse) -> Paragraph<'a> {
11
12 let block = Block::default()
13 .borders(Borders::ALL)
14 .title(Span::styled(
15 "Status",
16 Style::default().add_modifier(Modifier::BOLD),
17 ));
18
19 let get_color = |enabled: bool| {
20 if enabled { Color::Green } else { Color::Red }
21 };
22
23 let value_style = Style::default().fg(Color::Blue).add_modifier(Modifier::BOLD);
24
25 let coloured = |color: Color| {
26 Style::default().fg(color).add_modifier(Modifier::BOLD)
27 };
28
29
30 let text = vec![
31 Spans::from(vec![
32 Span::styled("Running: ", Style::default()),
33 Span::styled(
34 format!("{}", status.running),
35 Style::default().fg(get_color(status.running)).add_modifier(Modifier::BOLD)
36 ),
37 ]),
38 Spans::from(vec![
39 Span::styled("Protection Enabled: ", Style::default()),
40 Span::styled(
41 format!("{}", status.protection_enabled),
42 Style::default().fg(get_color(status.protection_enabled)).add_modifier(Modifier::BOLD)
43 ),
44 ]),
45 Spans::from(vec![
46 Span::styled("DHCP Available: ", Style::default()),
47 Span::styled(
48 format!("{}", status.dhcp_available),
49 Style::default().fg(get_color(status.dhcp_available)).add_modifier(Modifier::BOLD)
50 ),
51 ]),
52 Spans::from(vec![
53 Span::styled("Avg Processing Time: ", Style::default()),
54 Span::styled(format!("{}ms", (stats.avg_processing_time * 1000.0) as i16), value_style),
55 ]),
56 Spans::from(vec![
57 Span::styled("Version: ", Style::default()),
58 Span::styled(status.version.to_string(), value_style),
59 ]),
60 Spans::from(vec![
61 Span::styled("Ports: ", Style::default()),
62 Span::styled(format!(":{} (DNS), :{} (HTTP)", status.dns_port, status.http_port), value_style),
63 ]),
64 Spans::from(vec![
65 Span::styled("Total Queries: ", Style::default()),
66 Span::styled(stats.num_dns_queries.to_string(), coloured(Color::Green)),
67 ]),
68 Spans::from(vec![
69 Span::styled("Filtered: ", Style::default()),
70 Span::styled(stats.num_blocked_filtering.to_string(), coloured(Color::Yellow)),
71 ]),
72 Spans::from(vec![
73 Span::styled("Malware Blocked: ", Style::default()),
74 Span::styled(stats.num_replaced_safebrowsing.to_string(), coloured(Color::Red)),
75 ]),
76 Spans::from(vec![
77 Span::styled("Parental Controls: ", Style::default()),
78 Span::styled(stats.num_replaced_parental.to_string(), coloured(Color::Magenta)),
79 ]),
80 Spans::from(vec![
81 Span::styled("Safe Search: ", Style::default()),
82 Span::styled(stats.num_replaced_safesearch.to_string(), coloured(Color::Cyan)),
83 ]),
84 ];
85 Paragraph::new(text)
86 .wrap(Wrap { trim: true })
87 .block(block)
88}