diff --git a/oryx-tui/src/app.rs b/oryx-tui/src/app.rs index 201dea8..3780201 100644 --- a/oryx-tui/src/app.rs +++ b/oryx-tui/src/app.rs @@ -1,12 +1,7 @@ use oryx_common::RawPacket; use ratatui::{ - layout::{Alignment, Constraint, Direction, Flex, Layout, Margin, Rect}, - style::{Style, Stylize}, - text::{Line, Span}, - widgets::{ - Block, BorderType, Borders, Cell, Clear, HighlightSpacing, Padding, Paragraph, Row, - Scrollbar, ScrollbarOrientation, ScrollbarState, Table, TableState, - }, + layout::{Constraint, Direction, Layout, Rect}, + widgets::TableState, Frame, }; use std::{ @@ -15,26 +10,16 @@ use std::{ thread, time::Duration, }; -use tui_big_text::{BigText, PixelSize}; use crate::filters::{ - direction::{TrafficDirection, TrafficDirectionFilter}, - filter::Filter, - fuzzy::{self, Fuzzy}, - link::LinkFilter, - network::NetworkFilter, - start_menu::StartMenuBlock, - transport::TransportFilter, - update_menu::UpdateFilterMenuBLock, + direction::TrafficDirection, filter::Filter, fuzzy::Fuzzy, start_menu::StartMenuBlock, + update_menu::UpdateFilterMenuBlock, }; use crate::help::Help; use crate::interface::Interface; use crate::notification::Notification; -use crate::packets::{ - network::{IpPacket, IpProto}, - packet::AppPacket, -}; +use crate::packets::packet::AppPacket; use crate::stats::Stats; use crate::{alerts::alert::Alert, firewall::Firewall}; @@ -43,10 +28,10 @@ pub type AppResult = std::result::Result>; pub const TICK_RATE: u64 = 40; -#[derive(Debug, Copy, Clone, PartialEq)] +#[derive(Debug, Clone, PartialEq)] pub enum FocusedBlock { StartMenuBlock(StartMenuBlock), - UpdateFilterMenuBlock(UpdateFilterMenuBLock), + UpdateFilterMenuBlock(UpdateFilterMenuBlock), Help, Main(Mode), } @@ -140,13 +125,13 @@ impl App { pub fn render(&mut self, frame: &mut Frame) { // Setup - match self.focused_block { - FocusedBlock::StartMenuBlock(b) => b.render(frame, &mut self), - FocusedBlock::Main(mode) => self.render_main_section(frame, mode), + match self.focused_block.clone() { + FocusedBlock::StartMenuBlock(b) => b.render(frame, self), + FocusedBlock::Main(mode) => self.render_main_section(frame, &mode), _ => { - match self.previous_focused_block { - FocusedBlock::StartMenuBlock(b) => b.render(frame, &mut self), - FocusedBlock::Main(mode) => self.render_main_section(frame, mode), + match self.previous_focused_block.clone() { + FocusedBlock::StartMenuBlock(b) => b.render(frame, self), + FocusedBlock::Main(mode) => self.render_main_section(frame, &mode), _ => {} } match self.focused_block { @@ -158,7 +143,7 @@ impl App { } } - fn render_main_section(&mut self, frame: &mut Frame, mode: Mode) { + fn render_main_section(&mut self, frame: &mut Frame, mode: &Mode) { // Build layout let (settings_block, mode_block) = { let chunks: std::rc::Rc<[Rect]> = Layout::default() diff --git a/oryx-tui/src/filters/direction.rs b/oryx-tui/src/filters/direction.rs index 9107a40..55c3e1d 100644 --- a/oryx-tui/src/filters/direction.rs +++ b/oryx-tui/src/filters/direction.rs @@ -15,6 +15,8 @@ use ratatui::{ use crate::app::FocusedBlock; +use super::{start_menu::StartMenuBlock, update_menu::UpdateFilterMenuBlock}; + #[derive(Debug)] pub struct TrafficDirectionFilter { pub state: TableState, @@ -130,10 +132,12 @@ impl TrafficDirectionFilter { .title_style(Style::default().bold().fg(Color::Green)) .title_alignment(Alignment::Center) .borders(Borders::LEFT) - .border_type(if *focused_block == FocusedBlock::TrafficDirection { - BorderType::Thick - } else { - BorderType::default() + .border_type(match *focused_block { + FocusedBlock::StartMenuBlock(StartMenuBlock::TrafficDirection) + | FocusedBlock::UpdateFilterMenuBlock( + UpdateFilterMenuBlock::TrafficDirection, + ) => BorderType::Thick, + _ => BorderType::default(), }) .border_style(Style::default().fg(Color::Green)), area, diff --git a/oryx-tui/src/filters/filter.rs b/oryx-tui/src/filters/filter.rs index 05c16cd..c63f1f3 100644 --- a/oryx-tui/src/filters/filter.rs +++ b/oryx-tui/src/filters/filter.rs @@ -5,10 +5,9 @@ use ratatui::{ layout::{Alignment, Constraint, Direction, Flex, Layout, Rect}, style::{Style, Stylize}, text::{Line, Span}, - widgets::{Block, BorderType, Borders, Clear, Padding, Row, Table}, + widgets::{Block, BorderType, Borders, Padding, Row, Table}, Frame, }; -use tui_big_text::{BigText, PixelSize}; use crate::app::FocusedBlock; diff --git a/oryx-tui/src/filters/link.rs b/oryx-tui/src/filters/link.rs index 2623ac3..d76bc8e 100644 --- a/oryx-tui/src/filters/link.rs +++ b/oryx-tui/src/filters/link.rs @@ -8,6 +8,8 @@ use ratatui::{ use crate::app::FocusedBlock; +use super::{start_menu::StartMenuBlock, update_menu::UpdateFilterMenuBlock}; + #[derive(Debug)] pub struct LinkFilter { pub state: TableState, @@ -112,10 +114,12 @@ impl LinkFilter { .title_style(Style::default().bold().fg(Color::Green)) .title_alignment(Alignment::Center) .borders(Borders::LEFT) - .border_type(if *focused_block == FocusedBlock::LinkFilter { - BorderType::Thick - } else { - BorderType::default() + .border_type(match *focused_block { + FocusedBlock::StartMenuBlock(StartMenuBlock::LinkFilter) + | FocusedBlock::UpdateFilterMenuBlock(UpdateFilterMenuBlock::LinkFilter) => { + BorderType::Thick + } + _ => BorderType::default(), }) .border_style(Style::default().fg(Color::Green)), area, diff --git a/oryx-tui/src/filters/network.rs b/oryx-tui/src/filters/network.rs index 5f13a81..fc4f5f0 100644 --- a/oryx-tui/src/filters/network.rs +++ b/oryx-tui/src/filters/network.rs @@ -8,6 +8,8 @@ use ratatui::{ use crate::app::FocusedBlock; +use super::{start_menu::StartMenuBlock, update_menu::UpdateFilterMenuBlock}; + #[derive(Debug)] pub struct NetworkFilter { pub state: TableState, @@ -144,13 +146,13 @@ impl NetworkFilter { .title_style(Style::default().bold().fg(Color::Green)) .title_alignment(Alignment::Center) .borders(Borders::LEFT) - .border_type( - if *focused_block == FocusedBlock::StartMenuBlock(NetworkFilter) { + .border_type(match *focused_block { + FocusedBlock::StartMenuBlock(StartMenuBlock::NetworkFilter) + | FocusedBlock::UpdateFilterMenuBlock(UpdateFilterMenuBlock::NetworkFilter) => { BorderType::Thick - } else { - BorderType::default() - }, - ) + } + _ => BorderType::default(), + }) .border_style(Style::default().fg(Color::Green)), area, ); diff --git a/oryx-tui/src/filters/start_menu.rs b/oryx-tui/src/filters/start_menu.rs index b8cc3c6..e18b098 100644 --- a/oryx-tui/src/filters/start_menu.rs +++ b/oryx-tui/src/filters/start_menu.rs @@ -1,4 +1,13 @@ use crate::app::App; +use crossterm::event::{KeyCode, KeyEvent}; +use ratatui::prelude::Stylize; +use ratatui::{ + layout::{Constraint, Direction, Flex, Layout}, + style::Style, + widgets::TableState, + Frame, +}; +use tui_big_text::{BigText, PixelSize}; #[derive(Debug, Copy, Clone, PartialEq)] pub enum StartMenuBlock { @@ -104,7 +113,7 @@ impl StartMenuBlock { _ => {} } } - pub fn render(&mut self, frame: &mut Frame, app: &mut App) { + pub fn render(&self, frame: &mut Frame, app: &mut App) { let (interface_block, filter_block, start_block) = { let chunks = Layout::default() .direction(Direction::Vertical) @@ -120,15 +129,17 @@ impl StartMenuBlock { }; // interfaces - app.interface.render_on_setup(frame, interface_block, &self); + app.interface + .render_on_setup(frame, interface_block, &app.focused_block); // Filters - app.filter.render_on_setup(frame, filter_block, &self); + app.filter + .render_on_setup(frame, filter_block, &app.focused_block); // Start Button let start = BigText::builder() .pixel_size(PixelSize::Sextant) - .style(if self.focused_block == FocusedBlock::Start { + .style(if *self == StartMenuBlock::Start { Style::default().white().bold() } else { Style::default().dark_gray() diff --git a/oryx-tui/src/filters/transport.rs b/oryx-tui/src/filters/transport.rs index 1a0da9c..6dbe267 100644 --- a/oryx-tui/src/filters/transport.rs +++ b/oryx-tui/src/filters/transport.rs @@ -8,6 +8,8 @@ use ratatui::{ use crate::app::FocusedBlock; +use super::{start_menu::StartMenuBlock, update_menu::UpdateFilterMenuBlock}; + #[derive(Debug)] pub struct TransportFilter { pub state: TableState, @@ -129,10 +131,12 @@ impl TransportFilter { .title_style(Style::default().bold().fg(Color::Green)) .title_alignment(Alignment::Center) .borders(Borders::LEFT) - .border_type(if *focused_block == FocusedBlock::TransportFilter { - BorderType::Thick - } else { - BorderType::default() + .border_type(match *focused_block { + FocusedBlock::StartMenuBlock(StartMenuBlock::TransportFilter) + | FocusedBlock::UpdateFilterMenuBlock(UpdateFilterMenuBlock::TransportFilter) => { + BorderType::Thick + } + _ => BorderType::default(), }) .border_style(Style::default().fg(Color::Green)), area, diff --git a/oryx-tui/src/filters/update_menu.rs b/oryx-tui/src/filters/update_menu.rs index c5e7f23..6ed59f6 100644 --- a/oryx-tui/src/filters/update_menu.rs +++ b/oryx-tui/src/filters/update_menu.rs @@ -1,7 +1,17 @@ +use crossterm::event::{KeyCode, KeyEvent}; +use ratatui::prelude::Stylize; +use ratatui::{ + layout::{Constraint, Direction, Flex, Layout}, + style::Style, + widgets::{Block, BorderType, Borders, Clear, TableState}, + Frame, +}; +use tui_big_text::{BigText, PixelSize}; + use crate::app::App; #[derive(Debug, Copy, Clone, PartialEq)] -pub enum UpdateFilterMenuBLock { +pub enum UpdateFilterMenuBlock { TransportFilter, NetworkFilter, LinkFilter, @@ -9,42 +19,42 @@ pub enum UpdateFilterMenuBLock { Start, } -impl UpdateFilterMenuBLock { +impl UpdateFilterMenuBlock { pub fn next(&mut self, app: &mut App) { self.unselect(app); *self = match self { - UpdateFilterMenuBLock::TransportFilter => UpdateFilterMenuBLock::NetworkFilter, - UpdateFilterMenuBLock::NetworkFilter => UpdateFilterMenuBLock::LinkFilter, - UpdateFilterMenuBLock::LinkFilter => UpdateFilterMenuBLock::TrafficDirection, - UpdateFilterMenuBLock::TrafficDirection => UpdateFilterMenuBLock::Start, - UpdateFilterMenuBLock::Start => UpdateFilterMenuBLock::TransportFilter, + UpdateFilterMenuBlock::TransportFilter => UpdateFilterMenuBlock::NetworkFilter, + UpdateFilterMenuBlock::NetworkFilter => UpdateFilterMenuBlock::LinkFilter, + UpdateFilterMenuBlock::LinkFilter => UpdateFilterMenuBlock::TrafficDirection, + UpdateFilterMenuBlock::TrafficDirection => UpdateFilterMenuBlock::Start, + UpdateFilterMenuBlock::Start => UpdateFilterMenuBlock::TransportFilter, }; self.select(app); } pub fn app_component(self, app: &mut App) -> Option<&mut TableState> { match self { - UpdateFilterMenuBLock::TransportFilter => Some(&mut (*app).filter.transport.state), - UpdateFilterMenuBLock::NetworkFilter => Some(&mut (*app).filter.network.state), - UpdateFilterMenuBLock::LinkFilter => Some(&mut (*app).filter.link.state), - UpdateFilterMenuBLock::TrafficDirection => { + UpdateFilterMenuBlock::TransportFilter => Some(&mut (*app).filter.transport.state), + UpdateFilterMenuBlock::NetworkFilter => Some(&mut (*app).filter.network.state), + UpdateFilterMenuBlock::LinkFilter => Some(&mut (*app).filter.link.state), + UpdateFilterMenuBlock::TrafficDirection => { Some(&mut (*app).filter.traffic_direction.state) } - UpdateFilterMenuBLock::Start => None, + UpdateFilterMenuBlock::Start => None, } } pub fn previous(&mut self, app: &mut App) { self.unselect(app); *self = match self { - UpdateFilterMenuBLock::TransportFilter => UpdateFilterMenuBLock::Start, - UpdateFilterMenuBLock::NetworkFilter => UpdateFilterMenuBLock::TransportFilter, - UpdateFilterMenuBLock::LinkFilter => UpdateFilterMenuBLock::NetworkFilter, - UpdateFilterMenuBLock::TrafficDirection => UpdateFilterMenuBLock::LinkFilter, - UpdateFilterMenuBLock::Start => UpdateFilterMenuBLock::TrafficDirection, + UpdateFilterMenuBlock::TransportFilter => UpdateFilterMenuBlock::Start, + UpdateFilterMenuBlock::NetworkFilter => UpdateFilterMenuBlock::TransportFilter, + UpdateFilterMenuBlock::LinkFilter => UpdateFilterMenuBlock::NetworkFilter, + UpdateFilterMenuBlock::TrafficDirection => UpdateFilterMenuBlock::LinkFilter, + UpdateFilterMenuBlock::Start => UpdateFilterMenuBlock::TrafficDirection, }; self.select(app); } - fn select(self, app: &mut App) { + pub fn select(self, app: &mut App) { match self.app_component(app) { Some(p) => { p.select(Some(0)); @@ -62,10 +72,10 @@ impl UpdateFilterMenuBLock { } pub fn scroll_up(self, app: &mut App) { match self { - UpdateFilterMenuBLock::TransportFilter => (*app).filter.transport.scroll_up(), - UpdateFilterMenuBLock::NetworkFilter => (*app).filter.network.scroll_up(), - UpdateFilterMenuBLock::LinkFilter => (*app).filter.link.scroll_up(), - UpdateFilterMenuBLock::TrafficDirection => { + UpdateFilterMenuBlock::TransportFilter => (*app).filter.transport.scroll_up(), + UpdateFilterMenuBlock::NetworkFilter => (*app).filter.network.scroll_up(), + UpdateFilterMenuBlock::LinkFilter => (*app).filter.link.scroll_up(), + UpdateFilterMenuBlock::TrafficDirection => { (*app).filter.traffic_direction.state.select(Some(0)) } _ => {} @@ -74,10 +84,10 @@ impl UpdateFilterMenuBLock { pub fn scroll_down(self, app: &mut App) { match self { - UpdateFilterMenuBLock::TransportFilter => (*app).filter.transport.scroll_down(), - UpdateFilterMenuBLock::NetworkFilter => (*app).filter.network.scroll_down(), - UpdateFilterMenuBLock::LinkFilter => (*app).filter.link.scroll_down(), - UpdateFilterMenuBLock::TrafficDirection => { + UpdateFilterMenuBlock::TransportFilter => (*app).filter.transport.scroll_down(), + UpdateFilterMenuBlock::NetworkFilter => (*app).filter.network.scroll_down(), + UpdateFilterMenuBlock::LinkFilter => (*app).filter.link.scroll_down(), + UpdateFilterMenuBlock::TrafficDirection => { (*app).filter.traffic_direction.state.select(Some(1)) } _ => {} @@ -99,13 +109,13 @@ impl UpdateFilterMenuBLock { } KeyCode::Esc => { - app.focused_block = app.previous_focused_block; + app.focused_block = app.previous_focused_block.clone(); app.update_filters = false; } _ => {} } } - pub fn render(&mut self, frame: &mut Frame, app: App) { + pub fn render(&self, frame: &mut Frame, app: &mut App) { let layout = Layout::default() .direction(Direction::Vertical) .constraints([ @@ -136,9 +146,9 @@ impl UpdateFilterMenuBLock { let chunks = Layout::default() .direction(Direction::Vertical) .constraints([ - Constraint::Length(NB_TRANSPORT_PROTOCOL + 4), - Constraint::Length(NB_NETWORK_PROTOCOL + 4), - Constraint::Length(NB_LINK_PROTOCOL + 4), + Constraint::Length(oryx_common::protocols::NB_TRANSPORT_PROTOCOL + 4), + Constraint::Length(oryx_common::protocols::NB_NETWORK_PROTOCOL + 4), + Constraint::Length(oryx_common::protocols::NB_LINK_PROTOCOL + 4), Constraint::Length(6), Constraint::Length(4), ]) @@ -159,19 +169,23 @@ impl UpdateFilterMenuBLock { app.filter .transport - .render(frame, transport_filter_block, self); + .render(frame, transport_filter_block, &app.focused_block); - app.filter.network.render(frame, network_filter_block, self); + app.filter + .network + .render(frame, network_filter_block, &app.focused_block); - app.filter.link.render(frame, link_filter_block, self); + app.filter + .link + .render(frame, link_filter_block, &app.focused_block); app.filter .traffic_direction - .render(frame, traffic_direction_block, self); + .render(frame, traffic_direction_block, &app.focused_block); let apply = BigText::builder() .pixel_size(PixelSize::Sextant) - .style(if *self == UpdateFilterMenuBLock::Start { + .style(if *self == UpdateFilterMenuBlock::Start { Style::default().white().bold() } else { Style::default().dark_gray() diff --git a/oryx-tui/src/firewall.rs b/oryx-tui/src/firewall.rs index 9494a1a..5d6d578 100644 --- a/oryx-tui/src/firewall.rs +++ b/oryx-tui/src/firewall.rs @@ -1,10 +1,10 @@ use std::net::IpAddr; use ratatui::{ - layout::{Alignment, Constraint, Direction, Flex, Layout, Margin, Rect}, - style::{Color, Style, Stylize}, - text::{Line, Span, Text}, - widgets::{Block, BorderType, Borders, Padding, Row, Table}, + layout::{Alignment, Constraint, Flex, Rect}, + style::{Style, Stylize}, + text::Line, + widgets::{Block, Borders, Padding, Row, Table}, Frame, }; diff --git a/oryx-tui/src/handler.rs b/oryx-tui/src/handler.rs index f6f899b..712a473 100644 --- a/oryx-tui/src/handler.rs +++ b/oryx-tui/src/handler.rs @@ -1,27 +1,12 @@ -use oryx_common::protocols::{LinkProtocol, NetworkProtocol, Protocol, TransportProtocol}; -use std::{thread, time::Duration}; -use tui_input::backend::crossterm::EventHandler; - use crate::{ - app::{App, AppResult, FocusedBlock, StartMenuBlock}, - ebpf::Ebpf, + app::{App, AppResult, FocusedBlock}, event::Event, - export::export, - filters::direction::TrafficDirection, - mode::Mode, - notification::{Notification, NotificationLevel}, -}; -use ratatui::{ - crossterm::{ - self, - event::{KeyCode, KeyEvent, KeyModifiers}, - }, - widgets::TableState, }; +use ratatui::crossterm::event::{KeyCode, KeyEvent, KeyModifiers}; fn handle_key_events_help(key_event: KeyEvent, app: &mut App) { match key_event.code { - KeyCode::Esc => app.focused_block = app.previous_focused_block, + KeyCode::Esc => app.focused_block = app.previous_focused_block.clone(), _ => {} } } @@ -60,15 +45,15 @@ pub fn handle_key_events( _ => {} } } - match app.focused_block { + match app.focused_block.clone() { FocusedBlock::Help => handle_key_events_help(key_event, app), - FocusedBlock::StartMenuBlock(&mut start_block) => { + FocusedBlock::StartMenuBlock(mut start_block) => { start_block.handle_key_events(key_event, app) } - FocusedBlock::UpdateFilterMenuBlock(&mut update_block) => { + FocusedBlock::UpdateFilterMenuBlock(mut update_block) => { update_block.handle_key_events(key_event, app) } - FocusedBlock::Main(&mut mode_block) => mode_block.handle_key_events(key_event, app), + FocusedBlock::Main(mut mode_block) => mode_block.handle_key_events(key_event, app), } return Ok(()); } diff --git a/oryx-tui/src/interface.rs b/oryx-tui/src/interface.rs index a61efc3..729269a 100644 --- a/oryx-tui/src/interface.rs +++ b/oryx-tui/src/interface.rs @@ -14,7 +14,7 @@ use std::{ path::PathBuf, }; -use crate::app::FocusedBlock; +use crate::{app::FocusedBlock, filters::start_menu::StartMenuBlock}; #[derive(Debug, Clone)] pub struct NetworkInterface { @@ -226,7 +226,7 @@ impl Interface { .title_alignment(Alignment::Center) .borders(Borders::LEFT) .border_type( - if *focused_block == FocusedBlock::StartMenuBlock(Interface) { + if *focused_block == FocusedBlock::StartMenuBlock(StartMenuBlock::Interface) { BorderType::Thick } else { BorderType::default() diff --git a/oryx-tui/src/mode.rs b/oryx-tui/src/mode.rs index edef0f1..d7a5716 100644 --- a/oryx-tui/src/mode.rs +++ b/oryx-tui/src/mode.rs @@ -1,13 +1,24 @@ -use crossterm::event::{KeyCode, KeyEvent, KeyModifiers}; +use crate::{ + app::{App, FocusedBlock}, + filters::{fuzzy, update_menu::UpdateFilterMenuBlock}, + packets::{ + network::{IpPacket, IpProto}, + packet::AppPacket, + }, +}; +use crossterm::event::{KeyCode, KeyEvent}; use ratatui::{ - layout::{Alignment, Rect}, + layout::{Alignment, Constraint, Direction, Flex, Layout, Margin, Rect}, style::{Color, Style, Stylize}, text::{Line, Span}, - widgets::{Block, BorderType, Borders, Padding}, + widgets::{ + Block, BorderType, Borders, Cell, Clear, HighlightSpacing, Padding, Paragraph, Row, + Scrollbar, ScrollbarOrientation, ScrollbarState, Table, + }, Frame, }; +use tui_input::backend::crossterm::EventHandler; -use crate::app::App; #[derive(Debug, Clone, PartialEq)] pub enum Mode { Packet, @@ -136,8 +147,10 @@ impl Mode { } KeyCode::Char('f') => { app.update_filters = true; - app.focused_block = UpdateFilterMenuBLock::TransportFilter; - app.focused_block.select(); + app.focused_block = FocusedBlock::UpdateFilterMenuBlock( + UpdateFilterMenuBlock::TransportFilter, + ); + UpdateFilterMenuBlock::TransportFilter.select(app); app.filter.network.selected_protocols = app.filter.network.applied_protocols.clone(); @@ -176,13 +189,19 @@ impl Mode { } } - pub fn render(&self, frame: &mut Frame, area: Rect, &app: App) { - self.render_header(frame, area, app.alert.title_span(mode == Mode::Alerts)); + pub fn render(&self, frame: &mut Frame, area: Rect, app: &mut App) { + self.render_header(frame, area, app.alert.title_span(*self == Mode::Alerts)); match self { - Mode::Packet => self.render_packets_mode(frame, mode_block, app), - Mode::Stats => self.render_stats_mode(frame, mode_block, app), - Mode::Alerts => app.alert.render(frame, mode_block), - Mode::Firewall => app.firewall.render(frame, mode_block), + Mode::Packet => { + self.render_packets_mode(frame, area, app); + // show packet info popup if needed + if app.show_packet_infos_popup { + self.render_packet_infos_popup(frame, app); + } + } + Mode::Stats => self.render_stats_mode(frame, area, app), + Mode::Alerts => app.alert.render(frame, area), + Mode::Firewall => app.firewall.render(frame, area), } } @@ -246,7 +265,7 @@ impl Mode { area, ); } - fn render_stats_mode(self, frame: &mut Frame, block: Rect, &app: App) { + fn render_stats_mode(&self, frame: &mut Frame, block: Rect, app: &App) { let stats = app.stats.lock().unwrap(); let (bandwidth_block, stats_block) = { @@ -267,7 +286,7 @@ impl Mode { ); } - fn render_packets_mode(self, frame: &mut Frame, area: Rect, app: &mut App) { + fn render_packets_mode(&self, frame: &mut Frame, area: Rect, app: &mut App) { let app_packets = app.packets.lock().unwrap(); let mut fuzzy = app.fuzzy.lock().unwrap(); let fuzzy_packets = fuzzy.clone().packets.clone(); @@ -647,13 +666,9 @@ impl Mode { frame.render_widget(fuzzy, fuzzy_block); } - // show packet info popup if needed - if app.show_packet_infos_popup { - self.render_packet_infos_popup(frame, app); - } } - fn render_packet_infos_popup(self, frame: &mut Frame, &app: App) { + fn render_packet_infos_popup(&self, frame: &mut Frame, app: &mut App) { let layout = Layout::default() .direction(Direction::Vertical) .constraints([