Skip to content

Commit

Permalink
Moved traversal stats to separate type
Browse files Browse the repository at this point in the history
  • Loading branch information
piotrwach committed Jan 14, 2024
1 parent 226cbb8 commit 969e64b
Show file tree
Hide file tree
Showing 5 changed files with 94 additions and 61 deletions.
29 changes: 20 additions & 9 deletions src/interactive/app/eventloop.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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,
};
Expand All @@ -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,
Expand Down Expand Up @@ -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,
Expand All @@ -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);
Expand All @@ -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)?;
Expand Down Expand Up @@ -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 => {
Expand Down Expand Up @@ -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,
}));
}
}
Expand Down
4 changes: 3 additions & 1 deletion src/interactive/app/state.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use std::collections::HashSet;

use dua::traverse::BackgroundTraversal;
use dua::traverse::{BackgroundTraversal, TraversalStats};
use dua::WalkOptions;

use crate::interactive::widgets::Column;
Expand Down Expand Up @@ -33,6 +33,7 @@ pub struct AppState {
pub focussed: FocussedPane,
pub received_events: bool,
pub active_traversal: Option<BackgroundTraversal>,
pub stats: TraversalStats,
pub walk_options: WalkOptions,
}

Expand All @@ -48,6 +49,7 @@ impl AppState {
focussed: Default::default(),
received_events: false,
active_traversal: None,
stats: TraversalStats::default(),
walk_options,
}
}
Expand Down
22 changes: 6 additions & 16 deletions src/interactive/app/terminal.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use anyhow::Result;
use crossbeam::channel::Receiver;
use crosstermion::input::Event;
use dua::{
traverse::{EntryData, Traversal, Tree},
traverse::{EntryData, Traversal, Tree, TraversalStats},
ByteFormat, WalkOptions, WalkResult,
};
use tui::prelude::Backend;
Expand All @@ -17,6 +17,7 @@ use super::{sorted_entries, state::AppState, DisplayOptions};
/// State and methods representing the interactive disk usage analyser for the terminal
pub struct TerminalApp {
pub traversal: Traversal,
pub stats: TraversalStats,
pub display: DisplayOptions,
pub state: AppState,
pub window: MainWindow,
Expand All @@ -38,20 +39,8 @@ impl TerminalApp {
let window = MainWindow::default();

let mut state = AppState::new(walk_options);

let traversal = {
let mut tree = Tree::new();
let root_index = tree.add_node(EntryData::default());
Traversal {
tree,
root_index,
entries_traversed: 0,
start: std::time::Instant::now(),
elapsed: None,
io_errors: 0,
total_bytes: None,
}
};
let traversal = Traversal::new();
let stats = TraversalStats::default();

state.navigation_mut().view_root = traversal.root_index;
state.entries = sorted_entries(
Expand All @@ -66,6 +55,7 @@ impl TerminalApp {
state,
display,
traversal,
stats,
window,
};
Ok(app)
Expand Down Expand Up @@ -120,7 +110,7 @@ mod tests {
return Ok(res);
}
}
Ok(WalkResult { num_errors: self.traversal.io_errors })
Ok(WalkResult { num_errors: self.stats.io_errors })
}
}
}
12 changes: 7 additions & 5 deletions src/interactive/app/tree_view.rs
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,8 @@ impl TreeView<'_> {
continue;
}
self.tree_mut().remove_node(nx);
self.traversal.entries_traversed -= 1;
// TODO: don't need this right?
// self.traversal.entries_traversed -= 1;
entries_deleted += 1;
}
entries_deleted
Expand Down Expand Up @@ -96,10 +97,11 @@ impl TreeView<'_> {
Some(parent) => index = parent,
}
}
self.traversal.total_bytes = self
.tree()
.node_weight(self.traversal.root_index)
.map(|w| w.size);
// TODO: don't need this right?
// self.traversal.total_bytes = self
// .tree()
// .node_weight(self.traversal.root_index)
// .map(|w| w.size);
}
}

Expand Down
Loading

0 comments on commit 969e64b

Please sign in to comment.