mirror of
https://github.com/nushell/nushell.git
synced 2024-12-27 09:29:14 +01:00
Ratelimit save command progress bar updates (#14075)
<!-- if this PR closes one or more issues, you can automatically link the PR with them by using one of the [*linking keywords*](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue#linking-a-pull-request-to-an-issue-using-a-keyword), e.g. - this PR should close #xxxx - fixes #xxxx you can also mention related issues, PRs or discussions! --> # Description <!-- Thank you for improving Nushell. Please, check our [contributing guide](../CONTRIBUTING.md) and talk to the core team before making major changes. Description of your pull request goes here. **Provide examples and/or screenshots** if your changes affect the user experience. --> Currently, the `save -p` command updates the progress animation each time any data is written. This PR rate limits the animation so it doesn't play as fast. Here's an asciinema of [current behavior](https://asciinema.org/a/8RWrWTozQSceqx6tYY7kzblqj) and [proposed behavior](https://asciinema.org/a/E1pi0gMwMwFcxVHOy9Fv1Kk6R). # User-Facing Changes * `save -p` progress bar has a smoother animation # Tests + Formatting - 🟢 `toolkit fmt` - 🟢 `toolkit clippy` - 🟢 `toolkit test` - 🟢 `toolkit test stdlib` # After Submitting N/A
This commit is contained in:
parent
bdbcf82967
commit
a11c9e9d70
@ -12,6 +12,7 @@ use std::{
|
||||
io::{self, BufRead, BufReader, Read, Write},
|
||||
path::{Path, PathBuf},
|
||||
thread,
|
||||
time::{Duration, Instant},
|
||||
};
|
||||
|
||||
#[derive(Clone)]
|
||||
@ -482,7 +483,7 @@ fn stream_to_file(
|
||||
|
||||
let mut bar = progress_bar::NuProgressBar::new(known_size);
|
||||
|
||||
// TODO: reduce the number of progress bar updates?
|
||||
let mut last_update = Instant::now();
|
||||
|
||||
let mut reader = BufReader::new(source);
|
||||
|
||||
@ -499,7 +500,10 @@ fn stream_to_file(
|
||||
let len = buf.len();
|
||||
reader.consume(len);
|
||||
bytes_processed += len as u64;
|
||||
bar.update_bar(bytes_processed);
|
||||
if last_update.elapsed() >= Duration::from_millis(75) {
|
||||
bar.update_bar(bytes_processed);
|
||||
last_update = Instant::now();
|
||||
}
|
||||
}
|
||||
Err(e) if e.kind() == io::ErrorKind::Interrupted => continue,
|
||||
Err(e) => break Err(e),
|
||||
|
Loading…
Reference in New Issue
Block a user