diff options
author | andy.boot <bootandy@gmail.com> | 2023-01-21 16:40:43 +0000 |
---|---|---|
committer | andy.boot <bootandy@gmail.com> | 2023-01-22 09:56:47 +0000 |
commit | af9f0b51256640cbe54af3a6e280a90ac7ea4840 (patch) | |
tree | 766e49b71cdfb4d7c8bda1b75e27bf4b22000d29 | |
parent | 9ff28b345679d9a52672941c6ec85bb70168be25 (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.rs | 2 | ||||
-rw-r--r-- | src/progress.rs | 37 |
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; |