diff options
author | Sebastian Thiel <sebastian.thiel@icloud.com> | 2024-01-22 08:49:10 +0100 |
---|---|---|
committer | Sebastian Thiel <sebastian.thiel@icloud.com> | 2024-01-22 08:49:10 +0100 |
commit | 7a4b27153c2cb47caca87e28c5e178921c3a3fd9 (patch) | |
tree | 41cef953fb52c383c4dfc1918daab83db9e7b4d7 | |
parent | 346b944a45d4cec12f7689718893ebdef0f46546 (diff) | |
parent | 67c5bdb74cfcf8cab647888afec26cd09ccf543a (diff) |
Merge branch 'fix-overhead'
-rw-r--r-- | src/interactive/app/common.rs | 3 | ||||
-rw-r--r-- | src/interactive/app/eventloop.rs | 27 | ||||
-rw-r--r-- | src/interactive/app/handlers.rs | 30 | ||||
-rw-r--r-- | src/interactive/app/terminal.rs | 1 | ||||
-rw-r--r-- | src/interactive/app/tree_view.rs | 8 |
5 files changed, 51 insertions, 18 deletions
diff --git a/src/interactive/app/common.rs b/src/interactive/app/common.rs index 99d0d6b..7c89a2f 100644 --- a/src/interactive/app/common.rs +++ b/src/interactive/app/common.rs @@ -63,6 +63,7 @@ pub fn sorted_entries( node_idx: TreeIndex, sorting: SortMode, glob_root: Option<TreeIndex>, + is_scanning: bool, ) -> Vec<EntryDataBundle> { use SortMode::*; fn cmp_count(l: &EntryDataBundle, r: &EntryDataBundle) -> Ordering { @@ -76,7 +77,7 @@ pub fn sorted_entries( let use_glob_path = glob_root.map_or(false, |glob_root| glob_root == node_idx); let (path, exists, is_dir) = { let path = path_of(tree, idx, glob_root); - if glob_root == Some(node_idx) { + if is_scanning || glob_root == Some(node_idx) { (path, true, entry.is_dir) } else { let meta = path.symlink_metadata(); diff --git a/src/interactive/app/eventloop.rs b/src/interactive/app/eventloop.rs index f03c55b..1053539 100644 --- a/src/interactive/app/eventloop.rs +++ b/src/interactive/app/eventloop.rs @@ -194,7 +194,11 @@ impl AppState { is_finished: bool, ) { let tree_view = self.tree_view(traversal); - self.entries = tree_view.sorted_entries(self.navigation().view_root, self.sorting); + self.entries = tree_view.sorted_entries( + self.navigation().view_root, + self.sorting, + self.scan.is_some(), + ); if !self.received_events { let previously_selected_entry = @@ -253,11 +257,7 @@ impl AppState { self.cycle_focus(window); } Char('/') if !glob_focussed => { - if self.scan.is_some() { - self.message = Some("glob search disabled during traversal".into()); - } else { - self.toggle_glob_search(window); - } + self.toggle_glob_search(window); } Char('?') if !glob_focussed => self.toggle_help_pane(window), Char('c') if key.modifiers.contains(KeyModifiers::CONTROL) && !glob_focussed => { @@ -440,7 +440,11 @@ impl AppState { tree.remove_entries(index, remove_root_node); tree.recompute_sizes_recursively(parent_index); - self.entries = tree.sorted_entries(self.navigation().view_root, self.sorting); + self.entries = tree.sorted_entries( + self.navigation().view_root, + self.sorting, + self.scan.is_some(), + ); self.navigation_mut().selected = self.entries.first().map(|e| e.index); self.scan = Some(FilesystemScan { @@ -493,7 +497,8 @@ impl AppState { traversal: tree_view.traversal, glob_tree_root: Some(tree_root), }; - let new_entries = glob_tree_view.sorted_entries(tree_root, self.sorting); + let new_entries = + glob_tree_view.sorted_entries(tree_root, self.sorting, self.scan.is_some()); let new_entries = self .navigation_mut() @@ -545,7 +550,11 @@ impl AppState { window.glob_pane = None; tree_view.glob_tree_root.take(); - self.entries = tree_view.sorted_entries(self.navigation().view_root, self.sorting); + self.entries = tree_view.sorted_entries( + self.navigation().view_root, + self.sorting, + self.scan.is_some(), + ); } } diff --git a/src/interactive/app/handlers.rs b/src/interactive/app/handlers.rs index c320c59..9639264 100644 --- a/src/interactive/app/handlers.rs +++ b/src/interactive/app/handlers.rs @@ -67,7 +67,7 @@ impl AppState { .map(|parent_idx| { ( parent_idx, - tree_view.sorted_entries(parent_idx, self.sorting), + tree_view.sorted_entries(parent_idx, self.sorting, self.scan.is_some()), ) }) } @@ -89,7 +89,7 @@ impl AppState { self.navigation().selected.map(|previously_selected| { ( previously_selected, - tree_view.sorted_entries(previously_selected, self.sorting), + tree_view.sorted_entries(previously_selected, self.sorting, self.scan.is_some()), ) }) } @@ -122,17 +122,29 @@ impl AppState { pub fn cycle_sorting(&mut self, tree_view: &TreeView<'_>) { self.sorting.toggle_size(); - self.entries = tree_view.sorted_entries(self.navigation().view_root, self.sorting); + self.entries = tree_view.sorted_entries( + self.navigation().view_root, + self.sorting, + self.scan.is_some(), + ); } pub fn cycle_mtime_sorting(&mut self, tree_view: &TreeView<'_>) { self.sorting.toggle_mtime(); - self.entries = tree_view.sorted_entries(self.navigation().view_root, self.sorting); + self.entries = tree_view.sorted_entries( + self.navigation().view_root, + self.sorting, + self.scan.is_some(), + ); } pub fn cycle_count_sorting(&mut self, tree_view: &TreeView<'_>) { self.sorting.toggle_count(); - self.entries = tree_view.sorted_entries(self.navigation().view_root, self.sorting); + self.entries = tree_view.sorted_entries( + self.navigation().view_root, + self.sorting, + self.scan.is_some(), + ); } pub fn toggle_mtime_column(&mut self) { @@ -318,7 +330,11 @@ impl AppState { if !tree_view.exists(self.navigation().view_root) { self.go_to_root(tree_view); } else { - self.entries = tree_view.sorted_entries(self.navigation().view_root, self.sorting); + self.entries = tree_view.sorted_entries( + self.navigation().view_root, + self.sorting, + self.scan.is_some(), + ); } if self @@ -337,7 +353,7 @@ impl AppState { pub fn go_to_root(&mut self, tree_view: &TreeView<'_>) { let root = self.navigation().tree_root; - let entries = tree_view.sorted_entries(root, self.sorting); + let entries = tree_view.sorted_entries(root, self.sorting, self.scan.is_some()); self.navigation_mut().exit_node(root, &entries); self.entries = entries; } diff --git a/src/interactive/app/terminal.rs b/src/interactive/app/terminal.rs index 2a8deb5..a949bbd 100644 --- a/src/interactive/app/terminal.rs +++ b/src/interactive/app/terminal.rs @@ -49,6 +49,7 @@ impl TerminalApp { state.navigation().view_root, state.sorting, state.glob_root(), + state.scan.is_some(), ); state.navigation_mut().selected = state.entries.first().map(|b| b.index); diff --git a/src/interactive/app/tree_view.rs b/src/interactive/app/tree_view.rs index 8a80cf0..2afc366 100644 --- a/src/interactive/app/tree_view.rs +++ b/src/interactive/app/tree_view.rs @@ -46,12 +46,18 @@ impl TreeView<'_> { path_of(&self.traversal.tree, node_idx, self.glob_tree_root) } - pub fn sorted_entries(&self, view_root: TreeIndex, sorting: SortMode) -> Vec<EntryDataBundle> { + pub fn sorted_entries( + &self, + view_root: TreeIndex, + sorting: SortMode, + is_scanning: bool, + ) -> Vec<EntryDataBundle> { sorted_entries( &self.traversal.tree, view_root, sorting, self.glob_tree_root, + is_scanning, ) } |