diff --git a/src/handlers/substitute_status.rs b/src/handlers/substitute_status.rs index e5f48cf..4d0b62f 100644 --- a/src/handlers/substitute_status.rs +++ b/src/handlers/substitute_status.rs @@ -14,7 +14,7 @@ use crate::{ static DOWNLOAD_CHAR: LazyLock = LazyLock::new(|| "-".blue().bold().to_string()); static DONE_CHAR: LazyLock = LazyLock::new(|| "#".green().bold().to_string()); -const INFO_WIDTH: usize = 13; +static INPROGRESS_CHAR: LazyLock = LazyLock::new(|| "-".purple().bold().to_string()); pub struct CopyPathsHandler; @@ -86,6 +86,12 @@ impl SubstitutionStatusHandler { .map(|&[_, expected, ..]| expected) .sum() } + fn get_running_copy(&self) -> u64 { + self.state_copy + .values() + .map(|&[_, expected, ..]| expected) + .sum() + } fn get_unpacked(&self) -> u64 { self.state_copy.values().map(|&[done, ..]| done).sum() @@ -97,13 +103,17 @@ impl SubstitutionStatusHandler { } let dl_percent = ((self.get_done() as f64 / self.max_transfer as f64) * 100.0) as u64; let ex_percent = ((self.get_unpacked() as f64 / self.max_copy as f64) * 100.0) as u64; - let expected = ((self.get_running() as f64 / self.get_done() as f64) * 100.0) as u64; + let expected = (((self.get_running() + self.get_running_copy()) as f64 + / (self.max_transfer + self.max_copy) as f64) + * 100.0) as u64; let min = dl_percent.min(ex_percent); let dl = dl_percent.saturating_sub(min); + let exp = expected.saturating_sub(min + dl); let mbar = MultiBar([ BarSegment::Dynamic(&DONE_CHAR, min), BarSegment::Dynamic(&DOWNLOAD_CHAR, dl), - BarSegment::Dynamic(" ", 100 - min - dl), + BarSegment::Dynamic(&INPROGRESS_CHAR, exp), + BarSegment::Dynamic(" ", 100 - min - dl - exp), ]); let work_per_sec = if self.get_done() < self.max_transfer { @@ -127,8 +137,8 @@ impl SubstitutionStatusHandler { StyledString::new(Cow::Owned("Downloading".to_string()), Style::new()), StyledString::new( Cow::Owned(format!( - "{}/{} {}", - self.state_self[0], self.state_self[1], expected + "{}/{} {min} {dl} {expected}", + self.state_self[0], self.state_self[1] )), Style::new().purple(), ),