summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorandy.boot <bootandy@gmail.com>2023-01-21 15:53:34 +0000
committerandy.boot <bootandy@gmail.com>2023-01-22 09:56:47 +0000
commit9ff28b345679d9a52672941c6ec85bb70168be25 (patch)
treed85d820c1cf6a30eabf1c8c0e1a6af677d483fcd
parent4242363f401b15dc17d90d9d6e0ec9e923a22de9 (diff)
refactor: progress bar
code to clear line should be just before next write. Otherwise a buffer flush may occur that wipes out the line before it can be read by the user.
-rw-r--r--src/progress.rs11
1 files changed, 5 insertions, 6 deletions
diff --git a/src/progress.rs b/src/progress.rs
index 201559a..54866f0 100644
--- a/src/progress.rs
+++ b/src/progress.rs
@@ -100,13 +100,17 @@ impl PIndicator {
let time_info_thread = std::thread::spawn(move || {
let mut progress_char_i: usize = 0;
let mut stdout = std::io::stdout();
+ let mut msg = "".to_string();
// While the timeout triggers we go round the loop
// If we disconnect or the sender sends its message we exit the while loop
while let Err(RecvTimeoutError::Timeout) =
receiver.recv_timeout(Duration::from_millis(SPINNER_SLEEP_TIME))
{
- let msg = match data.state.load(ORDERING) {
+ // Clear the text written by 'write!'& Return at the start of line
+ print!("\r{:width$}", " ", width = msg.len());
+
+ msg = match data.state.load(ORDERING) {
Operation::INDEXING => {
let base = format_indicator_str(&data, progress_char_i, "Indexing");
@@ -127,12 +131,7 @@ impl PIndicator {
progress_char_i += 1;
progress_char_i %= PROGRESS_CHARS_LEN;
-
- // Clear the text written by 'write!'
- print!("\r{:width$}", " ", width = msg.len());
}
-
- // Return at the start of the line so the output can be printed correctly
print!("\r");
stdout.flush().unwrap();
});