summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorandy.boot <bootandy@gmail.com>2023-01-21 16:40:43 +0000
committerandy.boot <bootandy@gmail.com>2023-01-22 09:56:47 +0000
commitaf9f0b51256640cbe54af3a6e280a90ac7ea4840 (patch)
tree766e49b71cdfb4d7c8bda1b75e27bf4b22000d29
parent9ff28b345679d9a52672941c6ec85bb70168be25 (diff)
refactor: progress bar
Pull out display code into different functions Experimented with printing the actual directory currently being parsed but this resulted into too many flickering hard to follow prints. It's cleaner to just print the target directory rather than the directory currently being examined by the dir_walker.
-rw-r--r--src/dir_walker.rs2
-rw-r--r--src/progress.rs37
2 files changed, 18 insertions, 21 deletions
diff --git a/src/dir_walker.rs b/src/dir_walker.rs
index 717d432..2863751 100644
--- a/src/dir_walker.rs
+++ b/src/dir_walker.rs
@@ -40,6 +40,7 @@ pub fn walk_it(dirs: HashSet<PathBuf>, walk_data: WalkData) -> Vec<Node> {
let node = walk(d, &walk_data, 0)?;
prog_data.state.store(Operation::PREPARING, ORDERING);
+
clean_inodes(node, &mut inodes, walk_data.use_apparent_size)
})
.collect();
@@ -125,7 +126,6 @@ fn ignore_file(entry: &DirEntry, walk_data: &WalkData) -> bool {
fn walk(dir: PathBuf, walk_data: &WalkData, depth: usize) -> Option<Node> {
let prog_data = &walk_data.progress_data;
-
let mut children = vec![];
if let Ok(entries) = fs::read_dir(&dir) {
diff --git a/src/progress.rs b/src/progress.rs
index 54866f0..530ce8f 100644
--- a/src/progress.rs
+++ b/src/progress.rs
@@ -69,13 +69,19 @@ impl PAtomicInfo {
}
/* -------------------------------------------------------------------------- */
-fn format_indicator_str(data: &PAtomicInfo, progress_char_i: usize, status: &str) -> String {
- format!(
- "\r{} \"{}\"... {}",
- status,
- data.current_path.get(),
- PROGRESS_CHARS[progress_char_i],
- )
+
+fn format_preparing_str(prog_char: char, data: &PAtomicInfo, is_iso: bool) -> String {
+ let path_in = data.current_path.get();
+ let size = human_readable_number(data.total_file_size.load(ORDERING), is_iso);
+ format!("Preparing: {} {} ... {}", path_in, size, prog_char)
+}
+
+fn format_indexing_str(prog_char: char, data: &PAtomicInfo, is_iso: bool) -> String {
+ let path_in = data.current_path.get();
+ let file_count = data.num_files.load(ORDERING);
+ let size = human_readable_number(data.total_file_size.load(ORDERING), is_iso);
+ let file_str = format!("{} files, {}", file_count, size);
+ format!("Indexing: {} {} ... {}", path_in, file_str, prog_char)
}
pub struct PIndicator {
@@ -109,24 +115,15 @@ impl PIndicator {
{
// Clear the text written by 'write!'& Return at the start of line
print!("\r{:width$}", " ", width = msg.len());
+ let prog_char = PROGRESS_CHARS[progress_char_i];
msg = match data.state.load(ORDERING) {
- Operation::INDEXING => {
- let base = format_indicator_str(&data, progress_char_i, "Indexing");
-
- let file_count = data.num_files.load(ORDERING);
- let size =
- human_readable_number(data.total_file_size.load(ORDERING), is_iso);
- let file_str = format!("{} {} files", file_count, size);
- format!("{} - {}", base, file_str)
- }
- Operation::PREPARING => {
- format_indicator_str(&data, progress_char_i, "Preparing")
- }
+ Operation::INDEXING => format_indexing_str(prog_char, &data, is_iso),
+ Operation::PREPARING => format_preparing_str(prog_char, &data, is_iso),
_ => panic!("Unknown State"),
};
- write!(stdout, "{}", msg).unwrap();
+ write!(stdout, "\r{}", msg).unwrap();
stdout.flush().unwrap();
progress_char_i += 1;