From 2d15e74b46a237d8703497be680681669fff7665 Mon Sep 17 00:00:00 2001 From: mmacedoeu Date: Wed, 5 Jun 2019 12:05:26 -0300 Subject: [PATCH 1/3] Add get position --- src/progress.rs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/progress.rs b/src/progress.rs index 67c4a937..ea1741a9 100644 --- a/src/progress.rs +++ b/src/progress.rs @@ -668,6 +668,10 @@ impl ProgressBar { fn draw(&self) -> io::Result<()> { draw_state(&self.state) } + + pub fn position(&self) -> u64 { + self.state.read().pos + } } fn draw_state(state: &Arc>) -> io::Result<()> { @@ -713,6 +717,15 @@ fn test_pbar_overflow() { pb.finish(); } +#[test] +fn test_get_position() { + let pb = ProgressBar::new(1); + pb.set_draw_target(ProgressDrawTarget::hidden()); + pb.inc(2); + let pos = pb.position(); + assert_eq!(pos, 2); +} + struct MultiObject { done: bool, draw_state: Option, From ab1266ee2d7d162b94eab2a3c90331895577b912 Mon Sep 17 00:00:00 2001 From: mmacedoeu Date: Mon, 10 Jun 2019 19:10:43 -0300 Subject: [PATCH 2/3] Add reset --- src/progress.rs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/progress.rs b/src/progress.rs index ea1741a9..6a1e3865 100644 --- a/src/progress.rs +++ b/src/progress.rs @@ -562,6 +562,16 @@ impl ProgressBar { }); } + pub fn reset(&self) { + self.reset_eta(); + self.reset_elapsed(); + self.update_and_draw(|state| { + state.pos = 0; + state.status = Status::InProgress; + }); + + } + /// Finishes the progress bar and leaves the current message. pub fn finish(&self) { self.update_and_draw(|state| { From aa03d1389cf2316bf758af6721c96c44f0e6a67b Mon Sep 17 00:00:00 2001 From: mmacedoeu Date: Wed, 24 Jul 2019 17:30:54 -0300 Subject: [PATCH 3/3] UPDATE redraw --- src/progress.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/progress.rs b/src/progress.rs index 6a1e3865..9e0011fe 100644 --- a/src/progress.rs +++ b/src/progress.rs @@ -509,6 +509,7 @@ impl ProgressBar { /// Sets the position of the progress bar. pub fn set_position(&self, pos: u64) { self.update_and_draw(|state| { + state.draw_next = pos; state.pos = pos; if state.steady_tick == 0 || state.tick == 0 { state.tick = state.tick.saturating_add(1); @@ -566,6 +567,7 @@ impl ProgressBar { self.reset_eta(); self.reset_elapsed(); self.update_and_draw(|state| { + state.draw_next = 0; state.pos = 0; state.status = Status::InProgress; });