summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPiotr Wach <pwach@bloomberg.net>2024-01-07 20:02:45 +0000
committerPiotr Wach <pwach@bloomberg.net>2024-01-07 20:02:45 +0000
commitbb511b538c7d75b02d598d495b307a83a11f53c0 (patch)
tree2b5d13445b35cc11cdf52f9582d5cb0c1b94811c /src
parent51b67ff9d009a56272448d1fee1951f30b1de678 (diff)
Update entries
Diffstat (limited to 'src')
-rw-r--r--src/interactive/app/app_state.rs6
-rw-r--r--src/interactive/app/eventloop.rs34
-rw-r--r--src/interactive/app/terminal_app.rs35
3 files changed, 34 insertions, 41 deletions
diff --git a/src/interactive/app/app_state.rs b/src/interactive/app/app_state.rs
index 8986f09..f4a8d20 100644
--- a/src/interactive/app/app_state.rs
+++ b/src/interactive/app/app_state.rs
@@ -1,4 +1,6 @@
-use dua::{WalkResult, traverse::{TreeIndex, Tree}, inodefilter::InodeFilter};
+use std::time::Duration;
+
+use dua::{WalkResult, traverse::{TreeIndex, Tree}, inodefilter::InodeFilter, Throttle};
use petgraph::Direction;
use super::{navigation::Navigation, EntryDataBundle, SortMode};
@@ -40,6 +42,7 @@ pub struct TraversalState {
pub current_directory_at_depth: EntryInfo,
pub previous_depth: usize,
pub inodes: InodeFilter,
+ pub throttle: Option<Throttle>
}
impl TraversalState {
@@ -51,6 +54,7 @@ impl TraversalState {
current_directory_at_depth: EntryInfo::default(),
previous_depth: 0,
inodes: InodeFilter::default(),
+ throttle: Some(Throttle::new(Duration::from_millis(250), None)),
}
}
}
diff --git a/src/interactive/app/eventloop.rs b/src/interactive/app/eventloop.rs
index 014ce36..0cc38e9 100644
--- a/src/interactive/app/eventloop.rs
+++ b/src/interactive/app/eventloop.rs
@@ -116,7 +116,7 @@ impl AppState {
// }))
}
- // TODO:
+ // TODO: do we need this?
// default(Duration::from_millis(250)) => {
// // No events or new entries received, but we still need
// // to keep updating the status message regularly.
@@ -239,12 +239,16 @@ impl AppState {
}
}
- // TODO:
- // if throttle.can_update() && update(&mut t, None)? {
- // return Ok(None);
- // }
+ if let Some(throttle) = &self.traversal_state.throttle {
+ if throttle.can_update() {
+ self.update_state(t);
+ }
+ }
},
TraversalEvent::Finished(io_errors) => {
+ t.io_errors += io_errors;
+
+ self.traversal_state.throttle = None;
self.traversal_state.directory_info_per_depth_level.push(self.traversal_state.current_directory_at_depth);
self.traversal_state.current_directory_at_depth = EntryInfo::default();
for _ in 0..self.traversal_state.previous_depth {
@@ -266,11 +270,29 @@ impl AppState {
);
t.total_bytes = Some(root_size);
t.elapsed = Some(t.start.elapsed());
- // Ok(Some(t))
+
+ self.update_state(t);
}
}
}
+ fn update_state<'a>(&mut self, traversal: &'a Traversal) {
+ let mut received_events = false;
+ if !received_events {
+ self.navigation_mut().view_root = traversal.root_index;
+ }
+ self.entries = sorted_entries(
+ &traversal.tree,
+ self.navigation().view_root,
+ self.sorting,
+ self.glob_root(),
+ );
+ if !received_events {
+ self.navigation_mut().selected = self.entries.first().map(|b| b.index);
+ }
+ self.reset_message(); // force "scanning" to appear
+ }
+
fn process_event<B>(&mut self,
window: &mut MainWindow,
traversal: &mut Traversal,
diff --git a/src/interactive/app/terminal_app.rs b/src/interactive/app/terminal_app.rs
index 01398df..21ee66f 100644
--- a/src/interactive/app/terminal_app.rs
+++ b/src/interactive/app/terminal_app.rs
@@ -125,40 +125,7 @@ impl TerminalApp {
// let mut received_events = false;
// let traversal =
// Traversal::from_walk(options, input_paths, |traversal, event| {
- // if !received_events {
- // state.navigation_mut().view_root = traversal.root_index;
- // }
- // state.entries = sorted_entries(
- // &traversal.tree,
- // state.navigation().view_root,
- // state.sorting,
- // state.glob_root(),
- // );
- // if !received_events {
- // state.navigation_mut().selected = state.entries.first().map(|b| b.index);
- // }
- // state.reset_message(); // force "scanning" to appear
-
- // let mut events = fetch_buffered_key_events(&keys_rx);
- // if let Some(event) = event {
- // // This update is triggered by a user event, insert it
- // // before any events fetched later.
- // events.insert(0, event);
- // }
- // received_events |= !events.is_empty();
-
- // let should_exit = match state.process_events(
- // &mut window,
- // traversal,
- // &mut display,
- // terminal,
- // events.into_iter(),
- // )? {
- // ProcessingResult::ExitRequested(_) => true,
- // ProcessingResult::Finished(_) => false,
- // };
-
- // Ok(should_exit)
+
// })?;
// let traversal = match traversal {