diff options
author | andy.boot <bootandy@gmail.com> | 2023-01-21 15:53:34 +0000 |
---|---|---|
committer | andy.boot <bootandy@gmail.com> | 2023-01-22 09:56:47 +0000 |
commit | 9ff28b345679d9a52672941c6ec85bb70168be25 (patch) | |
tree | d85d820c1cf6a30eabf1c8c0e1a6af677d483fcd | |
parent | 4242363f401b15dc17d90d9d6e0ec9e923a22de9 (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.rs | 11 |
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(); }); |