diff options
Diffstat (limited to 'src/interactive/app/eventloop.rs')
-rw-r--r-- | src/interactive/app/eventloop.rs | 34 |
1 files changed, 28 insertions, 6 deletions
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, |