diff --git a/src/chart/types/preview_chart.rs b/src/chart/types/preview_chart.rs index 8bf88620..ccc886b8 100644 --- a/src/chart/types/preview_chart.rs +++ b/src/chart/types/preview_chart.rs @@ -54,7 +54,7 @@ pub fn update_charts_data(&mut self, packets: u128) { } pub fn view(&self) -> Element<'_, Message, StyleType> { - Column::new().push(ChartWidget::new(self)).into() + Column::new().height(50).push(ChartWidget::new(self)).into() } pub fn change_style(&mut self, style: StyleType) { @@ -120,7 +120,7 @@ fn build_chart( return; } - self.set_margins_and_label_areas(&mut chart_builder); + // self.set_margins_and_label_areas(&mut chart_builder); let x_axis_range = self.x_axis_range(); let x_axis_start = x_axis_range.start; diff --git a/src/gui/pages/initial_page.rs b/src/gui/pages/initial_page.rs index fff85ccb..04223862 100644 --- a/src/gui/pages/initial_page.rs +++ b/src/gui/pages/initial_page.rs @@ -4,6 +4,7 @@ use std::fmt::Write; +use crate::chart::types::preview_chart::PreviewChart; use crate::gui::components::button::button_open_file; use crate::gui::sniffer::Sniffer; use crate::gui::styles::button::ButtonType; @@ -232,6 +233,7 @@ fn get_col_adapter( } else { Some(Text::new(addrs).font(font)) }; + let preview_chart = sniffer.preview_charts.get(name); scroll_adapters.push( Button::new( Column::new() @@ -243,7 +245,8 @@ fn get_col_adapter( .size(FONT_SIZE_SUBTITLE), ) .push_maybe(subtitle.map(|sub| Text::new(sub).font(font))) - .push_maybe(addrs_text), + .push_maybe(addrs_text) + .push_maybe(preview_chart.map(PreviewChart::view)), ) .padding([20, 30]) .width(Length::Fill) diff --git a/src/gui/sniffer.rs b/src/gui/sniffer.rs index b1fe7d42..218f7ae8 100644 --- a/src/gui/sniffer.rs +++ b/src/gui/sniffer.rs @@ -18,6 +18,7 @@ use std::thread; use std::time::Duration; +use crate::chart::types::preview_chart::PreviewChart; use crate::gui::components::footer::footer; use crate::gui::components::header::header; use crate::gui::components::modal::{get_clear_all_overlay, get_exit_overlay, modal}; @@ -48,7 +49,7 @@ use crate::mmdb::types::mmdb_reader::{MmdbReader, MmdbReaders}; use crate::networking::parse_packets::BackendTrafficMessage; use crate::networking::parse_packets::parse_packets; -use crate::networking::traffic_preview::{TrafficPreviews, traffic_preview}; +use crate::networking::traffic_preview::traffic_preview; use crate::networking::types::capture_context::{ CaptureContext, CaptureSource, CaptureSourcePicklist, MyPcapImport, }; @@ -101,8 +102,10 @@ pub struct Sniffer { pub pcap_error: Option, /// Messages status pub dots_pulse: (String, u8), - /// Chart displayed + /// Traffic chart displayed in the Overview page pub traffic_chart: TrafficChart, + /// Traffic preview charts displayed in the initial page + pub preview_charts: HashMap, /// Currently displayed modal; None if no modal is displayed pub modal: Option, /// Currently displayed settings page; None if settings is closed @@ -131,8 +134,6 @@ pub struct Sniffer { pub freeze_tx: Option>, /// Sender to freeze the traffic preview pub freeze_preview_tx: Option>, - /// Traffic previews for charts - pub traffic_previews: TrafficPreviews, } impl Sniffer { @@ -160,6 +161,7 @@ pub fn new(conf: Conf) -> Self { pcap_error: None, dots_pulse: (".".to_string(), 0), traffic_chart: TrafficChart::new(style, language, data_repr), + preview_charts: HashMap::new(), modal: None, settings_page: None, running_page: None, @@ -177,7 +179,6 @@ pub fn new(conf: Conf) -> Self { frozen: false, freeze_tx: None, freeze_preview_tx: None, - traffic_previews: TrafficPreviews::default(), } } @@ -635,8 +636,19 @@ pub fn update(&mut self, message: Message) -> Task { let _ = tx.send(()); } } - Message::TrafficPreview(preview) => { - self.traffic_previews.refresh(preview); + Message::TrafficPreview(msg) => { + for (dev, packets) in msg.data { + self.preview_charts + .entry(dev) + .and_modify(|chart| { + chart.update_charts_data(packets); + }) + .or_insert({ + let mut chart = PreviewChart::new(self.conf.settings.style); + chart.update_charts_data(packets); + chart + }); + } } } Task::none() diff --git a/src/networking/traffic_preview.rs b/src/networking/traffic_preview.rs index 3cb47b21..4a8bf819 100644 --- a/src/networking/traffic_preview.rs +++ b/src/networking/traffic_preview.rs @@ -7,7 +7,7 @@ use crate::utils::error_logger::{ErrorLogger, Location}; use async_channel::Sender; use pcap::Device; -use std::collections::{HashMap, VecDeque}; +use std::collections::HashMap; use std::thread; use std::time::{Duration, Instant}; use tokio::sync::broadcast::Receiver; @@ -17,22 +17,6 @@ pub struct TrafficPreview { pub data: HashMap, } -#[derive(Default, Debug, Clone)] -pub struct TrafficPreviews { - pub data: HashMap>, -} - -impl TrafficPreviews { - pub fn refresh(&mut self, msg: TrafficPreview) { - for (dev, pkts) in msg.data { - self.data - .entry(dev) - .and_modify(|v| v.push_back(pkts)) - .or_insert(VecDeque::from([pkts])); - } - } -} - pub fn traffic_preview(tx: &Sender, freeze_rxs: (Receiver<()>, Receiver<()>)) { let (freeze_tx, mut freeze_rx) = tokio::sync::broadcast::channel(1_048_575); let (pcap_tx, pcap_rx) = std::sync::mpsc::sync_channel(10_000);