summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPiotr Wach <pwach@bloomberg.net>2024-01-14 00:14:06 +0000
committerPiotr Wach <pwach@bloomberg.net>2024-01-14 15:01:17 +0000
commit96ef242d3b00dfb46800b179595114fecb62fa35 (patch)
tree21cd9c5e3d29bc9c54ea4b81a4baee6dc62784e1 /src
parent969e64bbde872d0598b1ebf6278f5d55e152f7b1 (diff)
Fix traversal stats
Diffstat (limited to 'src')
-rw-r--r--src/interactive/app/eventloop.rs11
-rw-r--r--src/interactive/app/tree_view.rs14
-rw-r--r--src/interactive/widgets/footer.rs9
-rw-r--r--src/interactive/widgets/main.rs2
-rw-r--r--src/traverse.rs1
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,