diff options
author | Piotr Wach <pwach@bloomberg.net> | 2024-01-14 00:14:06 +0000 |
---|---|---|
committer | Piotr Wach <pwach@bloomberg.net> | 2024-01-14 15:01:17 +0000 |
commit | 96ef242d3b00dfb46800b179595114fecb62fa35 (patch) | |
tree | 21cd9c5e3d29bc9c54ea4b81a4baee6dc62784e1 /src | |
parent | 969e64bbde872d0598b1ebf6278f5d55e152f7b1 (diff) |
Fix traversal stats
Diffstat (limited to 'src')
-rw-r--r-- | src/interactive/app/eventloop.rs | 11 | ||||
-rw-r--r-- | src/interactive/app/tree_view.rs | 14 | ||||
-rw-r--r-- | src/interactive/widgets/footer.rs | 9 | ||||
-rw-r--r-- | src/interactive/widgets/main.rs | 2 | ||||
-rw-r--r-- | src/traverse.rs | 1 |
5 files changed, 17 insertions, 20 deletions
diff --git a/src/interactive/app/eventloop.rs b/src/interactive/app/eventloop.rs index 561b8f7..dbc5754 100644 --- a/src/interactive/app/eventloop.rs +++ b/src/interactive/app/eventloop.rs @@ -44,7 +44,7 @@ impl AppState { let props = MainWindowProps { current_path: tree_view.current_path(self.navigation().view_root), entries_traversed: self.stats.entries_traversed, - total_bytes: self.stats.total_bytes, + total_bytes: tree_view.total_size(), start: self.stats.start, elapsed: self.stats.elapsed, display, @@ -152,6 +152,7 @@ impl AppState { }; if let Some(is_finished) = active_traversal.integrate_traversal_event(traversal, event) { + self.stats = active_traversal.stats; if is_finished { let root_index = active_traversal.root_idx; self.recompute_sizes_recursively(traversal, root_index); @@ -327,12 +328,9 @@ impl AppState { if path.to_str().unwrap() == "" { path = PathBuf::from("."); } - log::info!("Refreshing {:?}", path); - - let entries_deleted = tree.remove_entries(self.navigation().view_root, false); - log::info!("Deleted {entries_deleted} entries"); - + tree.remove_entries(self.navigation().view_root, false); tree.recompute_sizes_recursively(self.navigation().view_root); + self.entries = tree.sorted_entries(self.navigation().view_root, self.sorting); self.navigation_mut().selected = self.entries.first().map(|e| e.index); @@ -343,6 +341,7 @@ impl AppState { true, )?); + // TODO: fix self.received_events = false; } Refresh::AllInView => { diff --git a/src/interactive/app/tree_view.rs b/src/interactive/app/tree_view.rs index 558c022..9a85636 100644 --- a/src/interactive/app/tree_view.rs +++ b/src/interactive/app/tree_view.rs @@ -68,8 +68,6 @@ impl TreeView<'_> { continue; } self.tree_mut().remove_node(nx); - // TODO: don't need this right? - // self.traversal.entries_traversed -= 1; entries_deleted += 1; } entries_deleted @@ -79,6 +77,13 @@ impl TreeView<'_> { self.tree().node_weight(idx).is_some() } + pub fn total_size(&self) -> u128 { + self.tree() + .neighbors_directed(self.traversal.root_index, Direction::Outgoing) + .filter_map(|idx| self.tree().node_weight(idx).map(|w| w.size)) + .sum() + } + pub fn recompute_sizes_recursively(&mut self, mut index: TreeIndex) { loop { let size_of_children = self @@ -97,11 +102,6 @@ impl TreeView<'_> { Some(parent) => index = parent, } } - // TODO: don't need this right? - // self.traversal.total_bytes = self - // .tree() - // .node_weight(self.traversal.root_index) - // .map(|w| w.size); } } diff --git a/src/interactive/widgets/footer.rs b/src/interactive/widgets/footer.rs index a91fdb6..dc54826 100644 --- a/src/interactive/widgets/footer.rs +++ b/src/interactive/widgets/footer.rs @@ -14,7 +14,7 @@ use crate::interactive::SortMode; pub struct Footer; pub struct FooterProps { - pub total_bytes: Option<u128>, + pub total_bytes: u128, pub entries_traversed: u64, pub traversal_start: std::time::Instant, pub elapsed: Option<std::time::Duration>, @@ -37,7 +37,7 @@ impl Footer { let spans = vec![ Span::from(format!( - "Sort mode: {} Total disk usage: {} Items: {} {progress} ", + "Sort mode: {} Total disk usage: {} Processed {} items {progress} ", match sort_mode { SortMode::SizeAscending => "size ascending", SortMode::SizeDescending => "size descending", @@ -46,10 +46,7 @@ impl Footer { SortMode::CountAscending => "items ascending", SortMode::CountDescending => "items descending", }, - match total_bytes { - Some(b) => format!("{}", format.display(*b)), - None => "-".to_owned(), - }, + format!("{}", format.display(*total_bytes)), entries_traversed, progress = match elapsed { Some(elapsed) => format!("in {:.02}s", elapsed.as_secs_f32()), diff --git a/src/interactive/widgets/main.rs b/src/interactive/widgets/main.rs index 46f0883..c03c3be 100644 --- a/src/interactive/widgets/main.rs +++ b/src/interactive/widgets/main.rs @@ -20,7 +20,7 @@ use FocussedPane::*; pub struct MainWindowProps<'a> { pub current_path: String, pub entries_traversed: u64, - pub total_bytes: Option<u128>, + pub total_bytes: u128, pub start: std::time::Instant, pub elapsed: Option<std::time::Duration>, pub display: DisplayOptions, diff --git a/src/traverse.rs b/src/traverse.rs index e3a3cc7..94eb9d9 100644 --- a/src/traverse.rs +++ b/src/traverse.rs @@ -79,6 +79,7 @@ impl Traversal { } } +#[derive(Clone, Copy)] pub struct TraversalStats { /// Amount of files or directories we have seen during the filesystem traversal pub entries_traversed: u64, |