summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Thiel <sebastian.thiel@icloud.com>2020-03-29 12:04:10 +0800
committerSebastian Thiel <sebastian.thiel@icloud.com>2020-03-29 12:04:10 +0800
commit733fac38e2095fdc819b584958092381b9e2bc46 (patch)
treef750e71ad3331e70bee002c2749ecd4e929323df
parent7f32fb9a70dd9b7078ae4db8e465d6762336048a (diff)
Another step towards isolating the event loop from needing to own the traversal tree…
…and I think I got it now.
-rw-r--r--src/interactive/app/handlers.rs32
1 files changed, 23 insertions, 9 deletions
diff --git a/src/interactive/app/handlers.rs b/src/interactive/app/handlers.rs
index a2aad73..9821239 100644
--- a/src/interactive/app/handlers.rs
+++ b/src/interactive/app/handlers.rs
@@ -1,10 +1,11 @@
-use crate::interactive::widgets::MarkMode;
use crate::interactive::{
app::{FocussedPane::*, TerminalApp},
path_of, sorted_entries,
+ widgets::MarkMode,
widgets::{HelpPane, MarkPane},
+ EntryDataBundle,
};
-use dua::traverse::TreeIndex;
+use dua::traverse::{Traversal, TreeIndex};
use itertools::Itertools;
use petgraph::{visit::Bfs, Direction};
use std::{fs, io, path::PathBuf};
@@ -73,23 +74,36 @@ impl TerminalApp {
self.state.message = None;
}
- pub fn open_that(&mut self) {
+ pub fn open_that(&self) {
+ self.open_that_with_traversal(&self.traversal)
+ }
+
+ pub fn open_that_with_traversal(&self, traversal: &Traversal) {
if let Some(ref idx) = self.state.selected {
- open::that(path_of(&self.traversal.tree, *idx)).ok();
+ open::that(path_of(&traversal.tree, *idx)).ok();
}
}
pub fn exit_node(&mut self) {
- match self
+ let entries = self
.traversal
.tree
.neighbors_directed(self.state.root, Direction::Incoming)
.next()
- {
- Some(parent_idx) => {
+ .map(|parent_idx| {
+ (
+ parent_idx,
+ sorted_entries(&self.traversal.tree, parent_idx, self.state.sorting),
+ )
+ });
+ self.exit_node_with_traversal(entries)
+ }
+
+ pub fn exit_node_with_traversal(&mut self, entries: Option<(TreeIndex, Vec<EntryDataBundle>)>) {
+ match entries {
+ Some((parent_idx, entries)) => {
self.state.root = parent_idx;
- self.state.entries =
- sorted_entries(&self.traversal.tree, parent_idx, self.state.sorting);
+ self.state.entries = entries;
self.state.selected = self
.state
.bookmarks