diff options
Diffstat (limited to 'src/interactive/app/eventloop.rs')
-rw-r--r-- | src/interactive/app/eventloop.rs | 29 |
1 files changed, 20 insertions, 9 deletions
diff --git a/src/interactive/app/eventloop.rs b/src/interactive/app/eventloop.rs index 5ce8cd6..561b8f7 100644 --- a/src/interactive/app/eventloop.rs +++ b/src/interactive/app/eventloop.rs @@ -10,7 +10,7 @@ use crossbeam::channel::Receiver; use crosstermion::crossterm::event::{KeyCode, KeyEvent, KeyEventKind, KeyModifiers}; use crosstermion::input::Event; use dua::{ - traverse::{BackgroundTraversal, EntryData, Traversal}, + traverse::{BackgroundTraversal, EntryData, Traversal, TreeIndex}, WalkResult, }; use std::path::PathBuf; @@ -43,10 +43,10 @@ impl AppState { { let props = MainWindowProps { current_path: tree_view.current_path(self.navigation().view_root), - entries_traversed: tree_view.traversal.entries_traversed, - total_bytes: tree_view.traversal.total_bytes, - start: tree_view.traversal.start, - elapsed: tree_view.traversal.elapsed, + entries_traversed: self.stats.entries_traversed, + total_bytes: self.stats.total_bytes, + start: self.stats.start, + elapsed: self.stats.elapsed, display, state: self, }; @@ -72,6 +72,15 @@ impl AppState { Ok(()) } + fn recompute_sizes_recursively( + &mut self, + traversal: &mut Traversal, + node_index: TreeIndex) + { + let mut tree_view = self.tree_view(traversal); + tree_view.recompute_sizes_recursively(node_index); + } + fn refresh_screen<B>( &mut self, window: &mut MainWindow, @@ -125,7 +134,7 @@ impl AppState { crossbeam::select! { recv(events) -> event => { let Ok(event) = event else { - return Ok(Some(WalkResult { num_errors: traversal.io_errors })); + return Ok(Some(WalkResult { num_errors: self.stats.io_errors })); }; let res = self.process_terminal_event( window, @@ -144,6 +153,8 @@ impl AppState { if let Some(is_finished) = active_traversal.integrate_traversal_event(traversal, event) { if is_finished { + let root_index = active_traversal.root_idx; + self.recompute_sizes_recursively(traversal, root_index); self.active_traversal = None; } self.update_state(traversal); @@ -153,7 +164,7 @@ impl AppState { } } else { let Ok(event) = events.recv() else { - return Ok(Some(WalkResult { num_errors: traversal.io_errors })); + return Ok(Some(WalkResult { num_errors: self.stats.io_errors })); }; let result = self.process_terminal_event(window, traversal, display, terminal, event)?; @@ -222,7 +233,7 @@ impl AppState { Char('?') if !glob_focussed => self.toggle_help_pane(window), Char('c') if key.modifiers.contains(KeyModifiers::CONTROL) && !glob_focussed => { return Ok(Some(WalkResult { - num_errors: tree_view.traversal.io_errors, + num_errors: self.stats.io_errors, })) } Char('q') if !glob_focussed => { @@ -402,7 +413,7 @@ impl AppState { self.handle_glob_quit(tree_view, window); } else { return Some(Ok(WalkResult { - num_errors: tree_view.traversal.io_errors, + num_errors: self.stats.io_errors, })); } } |