summaryrefslogtreecommitdiffstats
path: root/src/interactive
diff options
context:
space:
mode:
Diffstat (limited to 'src/interactive')
-rw-r--r--src/interactive/app/eventloop.rs41
-rw-r--r--src/interactive/app/handlers.rs2
-rw-r--r--src/interactive/app/terminal.rs2
-rw-r--r--src/interactive/app/tree_view.rs5
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;