diff options
-rw-r--r-- | src/interactive/app/eventloop.rs | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/interactive/app/eventloop.rs b/src/interactive/app/eventloop.rs index bdb278e..b370f78 100644 --- a/src/interactive/app/eventloop.rs +++ b/src/interactive/app/eventloop.rs @@ -270,6 +270,8 @@ impl AppState { Char('o') | Char('l') | Enter | Right => { self.enter_node_with_traversal(&tree_view) } + Char('R') => self.refresh(&mut tree_view, Refresh::AllInView)?, + Char('r') => self.refresh(&mut tree_view, Refresh::Selected)?, Char('H') | Home => self.change_entry_selection(CursorDirection::ToTop), Char('G') | End => self.change_entry_selection(CursorDirection::ToBottom), PageUp => self.change_entry_selection(CursorDirection::PageUp), @@ -306,6 +308,32 @@ impl AppState { Ok(None) } + fn refresh(&mut self, tree: &mut TreeView<'_>, what: Refresh) -> anyhow::Result<()> { + 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], + )?); + } + } + Refresh::AllInView => { + log::info!("Not implemented") + } + } + Ok(()) + } + fn tree_view<'a>(&mut self, traversal: &'a mut Traversal) -> TreeView<'a> { TreeView { traversal, @@ -397,6 +425,13 @@ impl AppState { } } +enum Refresh { + /// Refresh the directory currently in view + AllInView, + /// Refresh only the selected item + Selected, +} + pub fn draw_window<B>( window: &mut MainWindow, props: MainWindowProps<'_>, |