From 4c7b4fa24b35e0190a8ab4bd35191f0dddaeb3fd Mon Sep 17 00:00:00 2001 From: adrien gaultier Date: Fri, 27 Sep 2024 21:33:43 +0200 Subject: [PATCH] wip bis --- oryx-tui/src/app.rs | 57 ++++++++++---- oryx-tui/src/handler.rs | 105 +++++++++++++------------ oryx-tui/src/mode.rs | 168 ++++++++++++++++++++++------------------ 3 files changed, 187 insertions(+), 143 deletions(-) diff --git a/oryx-tui/src/app.rs b/oryx-tui/src/app.rs index 7b986a4..9eef4bd 100644 --- a/oryx-tui/src/app.rs +++ b/oryx-tui/src/app.rs @@ -67,10 +67,10 @@ impl StartMenuBlock { pub fn app_component(self, app: &mut App) -> Option<&mut TableState> { match self { StartMenuBlock::Interface => Some(&mut app.interface.state), - StartMenuBlock::TransportFilter => Some(&mut app.filter.transport.state), - StartMenuBlock::NetworkFilter => Some(&mut app.filter.network.state), - StartMenuBlock::LinkFilter => Some(&mut app.filter.link.state), - StartMenuBlock::TrafficDirection => Some(&mut app.filter.traffic_direction.state), + StartMenuBlock::TransportFilter => Some(&mut (*app).filter.transport.state), + StartMenuBlock::NetworkFilter => Some(&mut (*app).filter.network.state), + StartMenuBlock::LinkFilter => Some(&mut (*app).filter.link.state), + StartMenuBlock::TrafficDirection => Some(&mut (*app).filter.traffic_direction.state), StartMenuBlock::Start => None, } } @@ -103,23 +103,48 @@ impl StartMenuBlock { None => {} } } - pub fn scroll_up(self,app: &mut App){ + pub fn scroll_up(self, app: &mut App) { match self { StartMenuBlock::Interface => app.interface.scroll_up(), - StartMenuBlock::TransportFilter => (*app).filter.transport.scroll_up(), - StartMenuBlock::NetworkFilter => (*app).filter.network.scroll_up(), - StartMenuBlock::LinkFilter => (*app).filter.link.scroll_up(), - StartMenuBlock::TrafficDirection => (*app).filter.traffic_direction.state.select(Some(0)), - _ => {} + StartMenuBlock::TransportFilter => (*app).filter.transport.scroll_up(), + StartMenuBlock::NetworkFilter => (*app).filter.network.scroll_up(), + StartMenuBlock::LinkFilter => (*app).filter.link.scroll_up(), + StartMenuBlock::TrafficDirection => { + (*app).filter.traffic_direction.state.select(Some(0)) + } + _ => {} + } } - pub fn scroll_down(self,app: &mut App){ + + pub fn scroll_down(self, app: &mut App) { match self { StartMenuBlock::Interface => app.interface.scroll_down(), - StartMenuBlock::TransportFilter => (*app).filter.transport.scroll_down(), - StartMenuBlock::NetworkFilter => (*app).filter.network.scroll_down(), - StartMenuBlock::LinkFilter => (*app).filter.link.scroll_down(), - StartMenuBlock::TrafficDirection => (*app).filter.traffic_direction.state.select(Some(1)), - _ => {} + StartMenuBlock::TransportFilter => (*app).filter.transport.scroll_down(), + StartMenuBlock::NetworkFilter => (*app).filter.network.scroll_down(), + StartMenuBlock::LinkFilter => (*app).filter.link.scroll_down(), + StartMenuBlock::TrafficDirection => { + (*app).filter.traffic_direction.state.select(Some(1)) + } + _ => {} + } + } + pub fn handle_key_events(&mut self, key_event: KeyEvent, app: &mut App) { + match key_event.code { + KeyCode::Tab => { + self.next(app); + } + KeyCode::BackTab => { + self.previous(app); + } + KeyCode::Char('k') | KeyCode::Up => { + self.scroll_up(app); + } + KeyCode::Char('j') | KeyCode::Down => { + self.scroll_up(app); + } + + _ => {} + } } } #[derive(Debug, Copy, Clone, PartialEq)] diff --git a/oryx-tui/src/handler.rs b/oryx-tui/src/handler.rs index ad812c6..83a89c7 100644 --- a/oryx-tui/src/handler.rs +++ b/oryx-tui/src/handler.rs @@ -26,30 +26,19 @@ fn handle_key_events_help(key_event: KeyEvent, app: &mut App) { } } -fn handle_key_events_start(key_event: KeyEvent, app: &mut App, block: &mut StartMenuBlock) { - match key_event.code { - KeyCode::Tab => { - block.next(app); - } - KeyCode::BackTab => { - block.previous(app); - } - KeyCode::Char('k') | KeyCode::Up => { - block.scroll_up(app); - } - KeyCode::Char('j') | KeyCode::Down => { - block.scroll_up(app); - } - _ => {} - } -} +pub fn handle_key_events( + key_event: KeyEvent, + app: &mut App, + sender: kanal::Sender, +) -> AppResult<()> { -fn handle_global_keys(key_event: KeyEvent, app: &mut App) -> AppResult<()> { + // handle global key events if !app.is_editing { match key_event.code { KeyCode::Char('?') => { app.focused_block = FocusedBlock::Help; + return Ok(()) } KeyCode::Char('q') => { app.detach_interfaces(); @@ -62,35 +51,49 @@ fn handle_global_keys(key_event: KeyEvent, app: &mut App) -> AppResult<()> { app.quit(); } } + KeyCode::Char('r') => { + if key_event.modifiers == KeyModifiers::CONTROL { + app.detach_interfaces(); + sender.send(Event::Reset)?; + return Ok(()) + } + } _ => {} } } - return Ok(()); -} - -pub fn handle_key_events( - key_event: KeyEvent, - app: &mut App, - sender: kanal::Sender, -) -> AppResult<()> { - handle_global_keys(key_event, app); match app.focused_block { FocusedBlock::Help => handle_key_events_help(key_event, app), - FocusedBlock::StartMenuBlock(start_block) => { - handle_key_events_start(key_event, app, &mut start_block) - } - FocusedBlock::Main(mode_block) => mode_block.handle_key_events(key_event, app), + FocusedBlock::StartMenuBlock( &mut start_block) => start_block.handle_key_events(key_event, app), + FocusedBlock::Main( &mut mode_block) => mode_block.handle_key_events(key_event, app), } - // old + return Ok(()) +} + + + + + - if app.show_packet_infos_popup { - if key_event.code == KeyCode::Esc { - app.show_packet_infos_popup = false; - } - return Ok(()); - } + + + + +/////////////////////// +// old +pub fn old_handle_key_events( + key_event: KeyEvent, + app: &mut App, + sender: kanal::Sender, + ) -> AppResult<()> { + // if app.show_packet_infos_popup { + // if key_event.code == KeyCode::Esc { + // app.show_packet_infos_popup = false; + // } + + // return Ok(()); + // } // let fuzzy = app.fuzzy.clone(); // let mut fuzzy = fuzzy.lock().unwrap(); @@ -123,10 +126,10 @@ pub fn handle_key_events( if app.focused_block == FocusedBlock::Help { return Ok(()); } - if !fuzzy.is_paused() && !app.update_filters { - fuzzy - .filter - .handle_event(&crossterm::event::Event::Key(key_event)); + // if !fuzzy.is_paused() && !app.update_filters { + // fuzzy + // .filter + // .handle_event(&crossterm::event::Event::Key(key_event)); } else { match key_event.code { KeyCode::Char('/') => { @@ -402,15 +405,15 @@ pub fn handle_key_events( // app.show_packet_infos_popup = true; // } - KeyCode::Char('r') => { - if app.focused_block == FocusedBlock::Help || app.update_filters { - return Ok(()); - } - if key_event.modifiers == KeyModifiers::CONTROL { - app.detach_interfaces(); - sender.send(Event::Reset)?; - } - } + // KeyCode::Char('r') => { + // if app.focused_block == FocusedBlock::Help || app.update_filters { + // return Ok(()); + // } + // if key_event.modifiers == KeyModifiers::CONTROL { + // app.detach_interfaces(); + // sender.send(Event::Reset)?; + // } + // } KeyCode::Enter => { if app.focused_block == FocusedBlock::Start && !app.start_sniffing { diff --git a/oryx-tui/src/mode.rs b/oryx-tui/src/mode.rs index 75b5245..9150dcd 100644 --- a/oryx-tui/src/mode.rs +++ b/oryx-tui/src/mode.rs @@ -104,58 +104,89 @@ impl Mode { } _ => { - let fuzzy = app.fuzzy.clone(); - let mut fuzzy = fuzzy.lock().unwrap(); - if fuzzy.is_enabled() { - match key_event.code { - KeyCode::Esc => { - if fuzzy.is_paused() { - if app.manuall_scroll { - app.manuall_scroll = false; - } else { - fuzzy.disable(); + match self { + Mode::Packet => { + let fuzzy = app.fuzzy.clone(); + let mut fuzzy = fuzzy.lock().unwrap(); + if fuzzy.is_enabled() { + match key_event.code { + KeyCode::Esc => { + if fuzzy.is_paused() { + if app.manuall_scroll { + app.manuall_scroll = false; + } else { + fuzzy.disable(); + } + } else { + fuzzy.pause(); + } } - } else { - fuzzy.pause(); - } - } - _ => { - if !fuzzy.is_paused() && !app.update_filters { - fuzzy - .filter - .handle_event(&crossterm::event::Event::Key(key_event)); - } - } - } - } else { - match self { - Mode::Packet => match key_event.code { - KeyCode::Char('i') => { - if !app.packet_index.is_none() && !fuzzy.packets.is_empty() { - app.show_packet_infos_popup = true; + _ => { + if !fuzzy.is_paused() && !app.update_filters { + fuzzy + .filter + .handle_event(&crossterm::event::Event::Key(key_event)); + } } } - KeyCode::Char('/') => { - fuzzy.enable(); - fuzzy.unpause(); - } - KeyCode::Char('j') | KeyCode::Down => { - if !app.manuall_scroll { - app.manuall_scroll = true; - // Record the last position. Usefull for selecting the packets to display - fuzzy.packet_end_index = fuzzy.packets.len(); + } else { + match key_event.code { + KeyCode::Char('i') => { + if !app.packet_index.is_none() && !fuzzy.packets.is_empty() { + app.show_packet_infos_popup = true; + } + } + KeyCode::Char('/') => { + if fuzzy.is_enabled() { + } else { + fuzzy.enable(); + fuzzy.unpause(); + app.is_editing = true; + } + } + KeyCode::Char('j') | KeyCode::Down => { + if !app.manuall_scroll { + app.manuall_scroll = true; + // Record the last position. Usefull for selecting the packets to display + fuzzy.packet_end_index = fuzzy.packets.len(); + let i = match fuzzy.scroll_state.selected() { + Some(i) => { + if i < app.packet_window_size - 1 { + i + 1 + } else if i == app.packet_window_size - 1 + && fuzzy.packets.len() > fuzzy.packet_end_index + { + // shift the window by one + fuzzy.packet_end_index += 1; + i + 1 + } else { + i + } + } + None => fuzzy.packets.len(), + }; + + fuzzy.scroll_state.select(Some(i)); + } + } + KeyCode::Char('k') | KeyCode::Up => { + if !app.manuall_scroll { + app.manuall_scroll = true; + // Record the last position. Usefull for selecting the packets to display + fuzzy.packet_end_index = fuzzy.packets.len(); + } let i = match fuzzy.scroll_state.selected() { Some(i) => { - if i < app.packet_window_size - 1 { - i + 1 - } else if i == app.packet_window_size - 1 - && fuzzy.packets.len() > fuzzy.packet_end_index + if i > 1 { + i - 1 + } else if i == 0 + && fuzzy.packet_end_index > app.packet_window_size { - // shit the window by one - fuzzy.packet_end_index += 1; - i + 1 + // shift the window by one + fuzzy.packet_end_index -= 1; + 0 } else { - i + 0 } } None => fuzzy.packets.len(), @@ -163,41 +194,26 @@ impl Mode { fuzzy.scroll_state.select(Some(i)); } - } - KeyCode::Char('k') | KeyCode::Up => { - if !app.manuall_scroll { - app.manuall_scroll = true; - // Record the last position. Usefull for selecting the packets to display - fuzzy.packet_end_index = fuzzy.packets.len(); - } - let i = match fuzzy.scroll_state.selected() { - Some(i) => { - if i > 1 { - i - 1 - } else if i == 0 - && fuzzy.packet_end_index > app.packet_window_size - { - // shit the window by one - fuzzy.packet_end_index -= 1; - 0 - } else { - 0 - } + KeyCode::Esc => { + if app.show_packet_infos_popup { + app.show_packet_infos_popup = false; + } else if app.manuall_scroll { + app.manuall_scroll = false; + } else if !fuzzy.is_paused() { + fuzzy.pause(); + app.is_editing = false; } - None => fuzzy.packets.len(), - }; - - fuzzy.scroll_state.select(Some(i)); + } + _ => {} } + } + } - _ => {} - }, - Mode::Firewall => match key_event.code { - KeyCode::Char('n') => {} - _ => {} - }, + Mode::Firewall => match key_event.code { + KeyCode::Char('n') => app.is_editing = true, _ => {} - } + }, + _ => {} } } }