summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPiotr Wach <pwach@bloomberg.net>2024-01-07 20:15:55 +0000
committerPiotr Wach <pwach@bloomberg.net>2024-01-07 20:15:55 +0000
commitb52f66e4cd48bc670b1b98a4a713e280b63d9432 (patch)
treed5ea87470cbc9a9280b3affefb548b33234c339c /src
parent0cd5ea9612005ff724226ba502c2bea8ff4f0486 (diff)
first working version
Diffstat (limited to 'src')
-rw-r--r--src/interactive/app/app_state.rs2
-rw-r--r--src/interactive/app/eventloop.rs31
-rw-r--r--src/interactive/app/terminal_app.rs16
3 files changed, 28 insertions, 21 deletions
diff --git a/src/interactive/app/app_state.rs b/src/interactive/app/app_state.rs
index 74989fe..4578438 100644
--- a/src/interactive/app/app_state.rs
+++ b/src/interactive/app/app_state.rs
@@ -46,6 +46,7 @@ pub struct TraversalState {
pub previous_depth: usize,
pub inodes: InodeFilter,
pub throttle: Option<Throttle>,
+ pub received_event: bool,
}
impl TraversalState {
@@ -58,6 +59,7 @@ impl TraversalState {
previous_depth: 0,
inodes: InodeFilter::default(),
throttle: Some(Throttle::new(Duration::from_millis(250), None)),
+ received_event: false,
}
}
}
diff --git a/src/interactive/app/eventloop.rs b/src/interactive/app/eventloop.rs
index 70df427..0291813 100644
--- a/src/interactive/app/eventloop.rs
+++ b/src/interactive/app/eventloop.rs
@@ -116,7 +116,18 @@ impl AppState {
let Ok(event) = event else {
continue;
};
- self.process_traversal_event(traversal, walk_options, event);
+ if self.process_traversal_event(traversal, walk_options, event) {
+ self.update_state(traversal);
+ let result = self.process_event(
+ window,
+ traversal,
+ display,
+ terminal,
+ Event::Key(refresh_key()))?;
+ if let Some(processing_result) = result {
+ return Ok(processing_result);
+ }
+ }
}
}
}
@@ -142,7 +153,7 @@ impl AppState {
t: &'a mut Traversal,
walk_options: &'a WalkOptions,
event: TraversalEvent,
- ) {
+ ) -> bool {
match event {
TraversalEvent::Entry(entry, root_path, device_id) => {
t.entries_traversed += 1;
@@ -277,7 +288,7 @@ impl AppState {
if let Some(throttle) = &self.traversal_state.throttle {
if throttle.can_update() {
- self.update_state(t);
+ return true;
}
}
}
@@ -317,13 +328,16 @@ impl AppState {
t.total_bytes = Some(root_size);
t.elapsed = Some(t.start.elapsed());
- self.update_state(t);
+ self.is_scanning = false;
+
+ return true;
}
}
+ return false;
}
fn update_state<'a>(&mut self, traversal: &'a Traversal) {
- let mut received_events = false;
+ let received_events = self.traversal_state.received_event;
if !received_events {
self.navigation_mut().view_root = traversal.root_index;
}
@@ -354,7 +368,12 @@ impl AppState {
use FocussedPane::*;
let key = match event {
- Event::Key(key) if key.kind != KeyEventKind::Release => key,
+ Event::Key(key) if key.kind != KeyEventKind::Release => {
+ if key.code != KeyCode::Char('\r') {
+ self.traversal_state.received_event = true;
+ }
+ key
+ },
Event::Resize(_, _) => refresh_key(),
_ => return Ok(None),
};
diff --git a/src/interactive/app/terminal_app.rs b/src/interactive/app/terminal_app.rs
index ce1d5c6..f3e3369 100644
--- a/src/interactive/app/terminal_app.rs
+++ b/src/interactive/app/terminal_app.rs
@@ -89,6 +89,7 @@ impl TerminalApp {
pub fn scan<'a>(&mut self, input: Vec<PathBuf>) -> Result<Receiver<TraversalEvent>> {
self.state.traversal_state = TraversalState::new(self.traversal.root_index);
+ self.state.is_scanning = true;
let (entry_tx, entry_rx) = crossbeam::channel::bounded(100);
std::thread::Builder::new()
@@ -131,21 +132,6 @@ impl TerminalApp {
}
})?;
- // let mut received_events = false;
- // let traversal =
- // Traversal::from_walk(options, input_paths, |traversal, event| {
-
- // })?;
-
- // let traversal = match traversal {
- // Some(t) => t,
- // None => return Ok(None),
- // };
-
- // state.is_scanning = false;
- // if !received_events {
- // }
-
Ok(entry_rx)
}