diff --git a/src/config/progress_options.rs b/src/config/progress_options.rs index 7b325bb84..2f4fcd4a6 100644 --- a/src/config/progress_options.rs +++ b/src/config/progress_options.rs @@ -46,7 +46,7 @@ impl ProgressOptions { /// Create a hidden progress bar pub fn no_progress() -> RusticProgress { - RusticProgress(ProgressBar::hidden()) + RusticProgress(ProgressBar::hidden(), ProgressType::Hidden) } } @@ -64,7 +64,7 @@ impl ProgressBars for ProgressOptions { ); p.set_prefix(prefix); p.enable_steady_tick(self.progress_interval()); - RusticProgress(p) + RusticProgress(p, ProgressType::Spinner) } fn progress_counter(&self, prefix: impl Into>) -> RusticProgress { @@ -73,12 +73,12 @@ impl ProgressBars for ProgressOptions { } let p = ProgressBar::new(0).with_style( ProgressStyle::default_bar() - .template("[{elapsed_precise}] {prefix:30} {bar:40.cyan/blue} {pos:>10}/{len:10}") + .template("[{elapsed_precise}] {prefix:30} {bar:40.cyan/blue} {pos:>10}") .unwrap(), ); p.set_prefix(prefix); p.enable_steady_tick(self.progress_interval()); - RusticProgress(p) + RusticProgress(p, ProgressType::Counter) } fn progress_hidden(&self) -> RusticProgress { @@ -91,23 +91,26 @@ impl ProgressBars for ProgressOptions { } let p = ProgressBar::new(0).with_style( ProgressStyle::default_bar() - .with_key("my_eta", |s: &ProgressState, w: &mut dyn Write| - match (s.pos(), s.len()){ - (pos,Some(len)) if pos != 0 => write!(w,"{:#}", HumanDuration(Duration::from_secs(s.elapsed().as_secs() * (len-pos)/pos))), - (_, _) => write!(w,"-"), - }.unwrap()) - .template("[{elapsed_precise}] {prefix:30} {bar:40.cyan/blue} {bytes:>10}/{total_bytes:10} {bytes_per_sec:12} (ETA {my_eta})") + .template("[{elapsed_precise}] {prefix:30} {bar:40.cyan/blue} {bytes:>10} {bytes_per_sec:12}") .unwrap() ); p.set_prefix(prefix); p.enable_steady_tick(self.progress_interval()); - RusticProgress(p) + RusticProgress(p, ProgressType::Bytes) } } +#[derive(Debug, Clone)] +enum ProgressType { + Hidden, + Spinner, + Counter, + Bytes, +} + /// A default progress bar #[derive(Debug, Clone)] -pub struct RusticProgress(ProgressBar); +pub struct RusticProgress(ProgressBar, ProgressType); impl Progress for RusticProgress { fn is_hidden(&self) -> bool { @@ -115,6 +118,30 @@ impl Progress for RusticProgress { } fn set_length(&self, len: u64) { + match self.1 { + ProgressType::Counter => { + self.0.set_style( + ProgressStyle::default_bar() + .template( + "[{elapsed_precise}] {prefix:30} {bar:40.cyan/blue} {pos:>10}/{len:10}", + ) + .unwrap(), + ); + } + ProgressType::Bytes => { + self.0.set_style( + ProgressStyle::default_bar() + .with_key("my_eta", |s: &ProgressState, w: &mut dyn Write| + match (s.pos(), s.len()){ + (pos,Some(len)) if pos != 0 => write!(w,"{:#}", HumanDuration(Duration::from_secs(s.elapsed().as_secs() * (len-pos)/pos))), + (_, _) => write!(w,"-"), + }.unwrap()) + .template("[{elapsed_precise}] {prefix:30} {bar:40.cyan/blue} {bytes:>10}/{total_bytes:10} {bytes_per_sec:12} (ETA {my_eta})") + .unwrap() + ); + } + _ => {} + } self.0.set_length(len); }