diff options
Diffstat (limited to 'src/interactive')
-rw-r--r-- | src/interactive/app/eventloop.rs | 41 | ||||
-rw-r--r-- | src/interactive/app/handlers.rs | 2 | ||||
-rw-r--r-- | src/interactive/app/terminal.rs | 2 | ||||
-rw-r--r-- | src/interactive/app/tree_view.rs | 5 |
4 files changed, 30 insertions, 20 deletions
diff --git a/src/interactive/app/eventloop.rs b/src/interactive/app/eventloop.rs index b370f78..5ce8cd6 100644 --- a/src/interactive/app/eventloop.rs +++ b/src/interactive/app/eventloop.rs @@ -66,7 +66,7 @@ impl AppState { pub fn traverse(&mut self, traversal: &Traversal, input: Vec<PathBuf>) -> Result<()> { let background_traversal = - BackgroundTraversal::start(traversal.root_index, &self.walk_options, input)?; + BackgroundTraversal::start(traversal.root_index, &self.walk_options, input, false)?; self.navigation_mut().view_root = traversal.root_index; self.active_traversal = Some(background_traversal); Ok(()) @@ -125,7 +125,7 @@ impl AppState { crossbeam::select! { recv(events) -> event => { let Ok(event) = event else { - return Ok(Some(WalkResult { num_errors: 0 })); + return Ok(Some(WalkResult { num_errors: traversal.io_errors })); }; let res = self.process_terminal_event( window, @@ -153,7 +153,7 @@ impl AppState { } } else { let Ok(event) = events.recv() else { - return Ok(Some(WalkResult { num_errors: 0 })); + return Ok(Some(WalkResult { num_errors: traversal.io_errors })); }; let result = self.process_terminal_event(window, traversal, display, terminal, event)?; @@ -309,23 +309,30 @@ impl AppState { } fn refresh(&mut self, tree: &mut TreeView<'_>, what: Refresh) -> anyhow::Result<()> { + // TODO: we should refresh parent_idx not selected index match what { Refresh::Selected => { - if let Some(selected) = self.navigation().selected { - let parent_idx = tree - .fs_parent_of(selected) - .expect("there is always a parent to a selection"); - let path = tree.path_of(selected); - tree.remove_entries(selected); - tree.recompute_sizes_recursively(parent_idx); - self.entries = tree.sorted_entries(parent_idx, self.sorting); - self.navigation_mut().selected = self.entries.first().map(|e| e.index); - self.active_traversal = Some(BackgroundTraversal::start( - parent_idx, - &self.walk_options, - vec![path], - )?); + let mut path = tree.path_of(self.navigation().view_root); + 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.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); + + self.active_traversal = Some(BackgroundTraversal::start( + self.navigation().view_root, + &self.walk_options, + vec![path], + true, + )?); + + self.received_events = false; } Refresh::AllInView => { log::info!("Not implemented") diff --git a/src/interactive/app/handlers.rs b/src/interactive/app/handlers.rs index 754fa51..32a63ab 100644 --- a/src/interactive/app/handlers.rs +++ b/src/interactive/app/handlers.rs @@ -312,7 +312,7 @@ impl AppState { let parent_idx = tree_view .fs_parent_of(index) .expect("us being unable to delete the root index"); - let entries_deleted = tree_view.remove_entries(index); + let entries_deleted = tree_view.remove_entries(index, true); if !tree_view.exists(self.navigation().view_root) { self.go_to_root(tree_view); diff --git a/src/interactive/app/terminal.rs b/src/interactive/app/terminal.rs index 64c68af..6672188 100644 --- a/src/interactive/app/terminal.rs +++ b/src/interactive/app/terminal.rs @@ -120,7 +120,7 @@ mod tests { return Ok(res); } } - Ok(WalkResult { num_errors: 0 }) + Ok(WalkResult { num_errors: self.traversal.io_errors }) } } } diff --git a/src/interactive/app/tree_view.rs b/src/interactive/app/tree_view.rs index 74ec4fa..2126206 100644 --- a/src/interactive/app/tree_view.rs +++ b/src/interactive/app/tree_view.rs @@ -59,11 +59,14 @@ impl TreeView<'_> { current_path(&self.traversal.tree, view_root, self.glob_tree_root) } - pub fn remove_entries(&mut self, index: TreeIndex) -> usize { + pub fn remove_entries(&mut self, index: TreeIndex, remove_index: bool) -> usize { let mut entries_deleted = 0; let mut bfs = Bfs::new(self.tree(), index); while let Some(nx) = bfs.next(&self.tree()) { + if nx == index && !remove_index { + continue; + } self.tree_mut().remove_node(nx); self.traversal.entries_traversed -= 1; entries_deleted += 1; |