Skip to content

Commit

Permalink
cargo fmt
Browse files Browse the repository at this point in the history
  • Loading branch information
piotrwach committed Jan 7, 2024
1 parent bb511b5 commit 0cd5ea9
Show file tree
Hide file tree
Showing 5 changed files with 107 additions and 52 deletions.
9 changes: 6 additions & 3 deletions src/interactive/app/app_state.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
use std::time::Duration;

use dua::{WalkResult, traverse::{TreeIndex, Tree}, inodefilter::InodeFilter, Throttle};
use dua::{
inodefilter::InodeFilter,
traverse::{Tree, TreeIndex},
Throttle, WalkResult,
};
use petgraph::Direction;

use super::{navigation::Navigation, EntryDataBundle, SortMode};
Expand Down Expand Up @@ -33,7 +37,6 @@ pub struct AppState {
pub traversal_state: TraversalState,
}


#[derive(Default)]
pub struct TraversalState {
pub previous_node_idx: TreeIndex,
Expand All @@ -42,7 +45,7 @@ pub struct TraversalState {
pub current_directory_at_depth: EntryInfo,
pub previous_depth: usize,
pub inodes: InodeFilter,
pub throttle: Option<Throttle>
pub throttle: Option<Throttle>,
}

impl TraversalState {
Expand Down
125 changes: 84 additions & 41 deletions src/interactive/app/eventloop.rs
Original file line number Diff line number Diff line change
@@ -1,24 +1,34 @@
use crate::{interactive::{
app::navigation::Navigation,
app_state::FocussedPane,
sorted_entries,
widgets::{glob_search, MainWindow, MainWindowProps},
ByteVisualization, CursorDirection, CursorMode, DisplayOptions, EntryDataBundle, MarkEntryMode,
SortMode,
}, crossdev};
use crate::{
crossdev,
interactive::{
app::navigation::Navigation,
app_state::FocussedPane,
sorted_entries,
widgets::{glob_search, MainWindow, MainWindowProps},
ByteVisualization, CursorDirection, CursorMode, DisplayOptions, EntryDataBundle,
MarkEntryMode, SortMode,
},
};
use anyhow::Result;
use crossbeam::channel::Receiver;
use crosstermion::crossterm::event::{KeyCode, KeyEvent, KeyEventKind, KeyModifiers};
use crosstermion::input::Event;
use dua::{
traverse::{EntryData, Traversal, Tree, size_on_disk},
traverse::{size_on_disk, EntryData, Traversal, Tree},
WalkOptions, WalkResult,
};
use std::{path::PathBuf, time::{SystemTime, UNIX_EPOCH}};
use std::{
path::PathBuf,
time::{SystemTime, UNIX_EPOCH},
};
use tui::backend::Backend;
use tui_react::Terminal;

use super::{tree_view::TreeView, terminal_app::TraversalEvent, app_state::{EntryInfo, set_entry_info_or_panic, pop_or_panic, parent_or_panic}};
use super::{
app_state::{parent_or_panic, pop_or_panic, set_entry_info_or_panic, EntryInfo},
terminal_app::TraversalEvent,
tree_view::TreeView,
};
use super::{
app_state::{AppState, Cursor, ProcessingResult},
input::input_channel,
Expand Down Expand Up @@ -125,9 +135,14 @@ impl AppState {
// }
// }
// }
// }
// }

fn process_traversal_event<'a>(&mut self, t: &'a mut Traversal, walk_options: &'a WalkOptions, event: TraversalEvent) {
fn process_traversal_event<'a>(
&mut self,
t: &'a mut Traversal,
walk_options: &'a WalkOptions,
event: TraversalEvent,
) {
match event {
TraversalEvent::Entry(entry, root_path, device_id) => {
t.entries_traversed += 1;
Expand All @@ -145,7 +160,8 @@ impl AppState {
match &entry.client_state {
Some(Ok(ref m)) => {
if !m.is_dir()
&& (walk_options.count_hard_links || self.traversal_state.inodes.add(m))
&& (walk_options.count_hard_links
|| self.traversal_state.inodes.add(m))
&& (walk_options.cross_filesystems
|| crossdev::is_same_device(device_id, m))
{
Expand Down Expand Up @@ -184,12 +200,15 @@ impl AppState {

match (entry.depth, self.traversal_state.previous_depth) {
(n, p) if n > p => {
self.traversal_state.directory_info_per_depth_level.push(self.traversal_state.current_directory_at_depth);
self.traversal_state
.directory_info_per_depth_level
.push(self.traversal_state.current_directory_at_depth);
self.traversal_state.current_directory_at_depth = EntryInfo {
size: file_size,
entries_count: Some(1),
};
self.traversal_state.parent_node_idx = self.traversal_state.previous_node_idx;
self.traversal_state.parent_node_idx =
self.traversal_state.previous_node_idx;
}
(n, p) if n < p => {
for _ in n..p {
Expand All @@ -198,16 +217,27 @@ impl AppState {
self.traversal_state.parent_node_idx,
self.traversal_state.current_directory_at_depth,
);
let dir_info =
pop_or_panic(&mut self.traversal_state.directory_info_per_depth_level);
let dir_info = pop_or_panic(
&mut self.traversal_state.directory_info_per_depth_level,
);

self.traversal_state.current_directory_at_depth.size += dir_info.size;
self.traversal_state.current_directory_at_depth.add_count(&dir_info);
self.traversal_state.current_directory_at_depth.size +=
dir_info.size;
self.traversal_state
.current_directory_at_depth
.add_count(&dir_info);

self.traversal_state.parent_node_idx = parent_or_panic(&mut t.tree, self.traversal_state.parent_node_idx);
self.traversal_state.parent_node_idx = parent_or_panic(
&mut t.tree,
self.traversal_state.parent_node_idx,
);
}
self.traversal_state.current_directory_at_depth.size += file_size;
*self.traversal_state.current_directory_at_depth.entries_count.get_or_insert(0) += 1;
*self
.traversal_state
.current_directory_at_depth
.entries_count
.get_or_insert(0) += 1;
set_entry_info_or_panic(
&mut t.tree,
self.traversal_state.parent_node_idx,
Expand All @@ -216,23 +246,29 @@ impl AppState {
}
_ => {
self.traversal_state.current_directory_at_depth.size += file_size;
*self.traversal_state.current_directory_at_depth.entries_count.get_or_insert(0) += 1;
*self
.traversal_state
.current_directory_at_depth
.entries_count
.get_or_insert(0) += 1;
}
};

data.mtime = mtime;
data.size = file_size;
let entry_index = t.tree.add_node(data);

t.tree.add_edge(self.traversal_state.parent_node_idx, entry_index, ());
t.tree
.add_edge(self.traversal_state.parent_node_idx, entry_index, ());
self.traversal_state.previous_node_idx = entry_index;
self.traversal_state.previous_depth = entry.depth;
}
Err(_) => {
if self.traversal_state.previous_depth == 0 {
data.name = (*root_path).clone();
let entry_index = t.tree.add_node(data);
t.tree.add_edge(self.traversal_state.parent_node_idx, entry_index, ());
t.tree
.add_edge(self.traversal_state.parent_node_idx, entry_index, ());
}

t.io_errors += 1
Expand All @@ -244,20 +280,30 @@ impl AppState {
self.update_state(t);
}
}
},
}
TraversalEvent::Finished(io_errors) => {
t.io_errors += io_errors;

self.traversal_state.throttle = None;
self.traversal_state.directory_info_per_depth_level.push(self.traversal_state.current_directory_at_depth);
self.traversal_state
.directory_info_per_depth_level
.push(self.traversal_state.current_directory_at_depth);
self.traversal_state.current_directory_at_depth = EntryInfo::default();
for _ in 0..self.traversal_state.previous_depth {
let dir_info = pop_or_panic(&mut self.traversal_state.directory_info_per_depth_level);
let dir_info =
pop_or_panic(&mut self.traversal_state.directory_info_per_depth_level);
self.traversal_state.current_directory_at_depth.size += dir_info.size;
self.traversal_state.current_directory_at_depth.add_count(&dir_info);

set_entry_info_or_panic(&mut t.tree, self.traversal_state.parent_node_idx, self.traversal_state.current_directory_at_depth);
self.traversal_state.parent_node_idx = parent_or_panic(&mut t.tree, self.traversal_state.parent_node_idx);
self.traversal_state
.current_directory_at_depth
.add_count(&dir_info);

set_entry_info_or_panic(
&mut t.tree,
self.traversal_state.parent_node_idx,
self.traversal_state.current_directory_at_depth,
);
self.traversal_state.parent_node_idx =
parent_or_panic(&mut t.tree, self.traversal_state.parent_node_idx);
}
let root_size = t.recompute_root_size();
set_entry_info_or_panic(
Expand All @@ -270,7 +316,7 @@ impl AppState {
);
t.total_bytes = Some(root_size);
t.elapsed = Some(t.start.elapsed());

self.update_state(t);
}
}
Expand All @@ -293,12 +339,13 @@ impl AppState {
self.reset_message(); // force "scanning" to appear
}

fn process_event<B>(&mut self,
fn process_event<B>(
&mut self,
window: &mut MainWindow,
traversal: &mut Traversal,
display: &mut DisplayOptions,
terminal: &mut Terminal<B>,
event: Event
event: Event,
) -> Result<Option<ProcessingResult>>
where
B: Backend,
Expand Down Expand Up @@ -347,9 +394,7 @@ impl AppState {

if !handled {
match self.focussed {
Mark => {
self.dispatch_to_mark_pane(key, window, &mut tree_view, *display, terminal)
}
Mark => self.dispatch_to_mark_pane(key, window, &mut tree_view, *display, terminal),
Help => {
window
.help_pane
Expand Down Expand Up @@ -378,9 +423,7 @@ impl AppState {
window,
&tree_view,
),
Char('a') => {
self.mark_all_entries(MarkEntryMode::Toggle, window, &tree_view)
}
Char('a') => self.mark_all_entries(MarkEntryMode::Toggle, window, &tree_view),
Char('o') | Char('l') | Enter | Right => {
self.enter_node_with_traversal(&tree_view)
}
Expand Down
17 changes: 13 additions & 4 deletions src/interactive/app/terminal_app.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ use dua::{
use tui::prelude::Backend;
use tui_react::Terminal;

use crate::{interactive::widgets::MainWindow, crossdev};
use crate::{crossdev, interactive::widgets::MainWindow};

use super::{
app_state::{AppState, ProcessingResult, TraversalState},
Expand All @@ -26,15 +26,20 @@ pub struct TerminalApp {
pub walk_options: WalkOptions,
}

pub type TraversalEntry = Result<jwalk::DirEntry<((), Option<Result<std::fs::Metadata, jwalk::Error>>)>, jwalk::Error>;
pub type TraversalEntry =
Result<jwalk::DirEntry<((), Option<Result<std::fs::Metadata, jwalk::Error>>)>, jwalk::Error>;

pub enum TraversalEvent {
Entry(TraversalEntry, Arc<PathBuf>, u64),
Finished(u64),
}

impl TerminalApp {
pub fn initialize<B>(terminal: &mut Terminal<B>, walk_options: WalkOptions, byte_format: ByteFormat) -> Result<TerminalApp>
pub fn initialize<B>(
terminal: &mut Terminal<B>,
walk_options: WalkOptions,
byte_format: ByteFormat,
) -> Result<TerminalApp>
where
B: Backend,
{
Expand Down Expand Up @@ -107,7 +112,11 @@ impl TerminalApp {
.into_iter()
{
if entry_tx
.send(TraversalEvent::Entry(entry, Arc::clone(&root_path), device_id))
.send(TraversalEvent::Entry(
entry,
Arc::clone(&root_path),
device_id,
))
.is_err()
{
// The channel is closed, this means the user has
Expand Down
7 changes: 4 additions & 3 deletions src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ fn main() -> Result<()> {
cross_filesystems: !opt.stay_on_filesystem,
ignore_dirs: canonicalize_ignore_dirs(&opt.ignore_dirs),
};

if walk_options.threads == 0 {
// avoid using the global rayon pool, as it will keep a lot of threads alive after we are done.
// Also means that we will spin up a bunch of threads per root path, instead of reusing them.
Expand All @@ -78,8 +78,9 @@ fn main() -> Result<()> {
let keys_rx = input_channel();
let mut app = TerminalApp::initialize(&mut terminal, walk_options, byte_format)?;

let traversal_rx = app.scan(extract_paths_maybe_set_cwd(input, !opt.stay_on_filesystem)?)?;

let traversal_rx =
app.scan(extract_paths_maybe_set_cwd(input, !opt.stay_on_filesystem)?)?;

let res = app.process_events(&mut terminal, keys_rx, traversal_rx);

let res = res.map(|r| {
Expand Down
1 change: 0 additions & 1 deletion src/traverse.rs
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,6 @@ impl Traversal {
// input: Vec<PathBuf>,
// mut update: impl FnMut(&mut Traversal, Option<T>) -> Result<bool>,
// ) -> Result<Option<Traversal>> {


// let mut t = {
// let mut tree = Tree::new();
Expand Down

0 comments on commit 0cd5ea9

Please sign in to comment.