diff --git a/Cargo.lock b/Cargo.lock index db20599..925ae63 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -384,7 +384,7 @@ dependencies = [ [[package]] name = "time-track" -version = "2.1.2" +version = "2.1.3" dependencies = [ "anyhow", "chrono", diff --git a/Cargo.toml b/Cargo.toml index 76bb2be..e318688 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "time-track" -version = "2.1.2" +version = "2.1.3" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/src/main.rs b/src/main.rs index 4ea78a7..19dc159 100644 --- a/src/main.rs +++ b/src/main.rs @@ -39,6 +39,7 @@ fn main() -> Result<()> { let mut total_minutes: i64 = 0; let mut first: Option> = None; + let mut last: Option> = None; for time in times { match first { None => { @@ -46,7 +47,8 @@ fn main() -> Result<()> { }, Some(prev) => { total_minutes += (time - prev).num_minutes(); - first = None + first = None; + last = Some(time); } } } @@ -58,6 +60,6 @@ fn main() -> Result<()> { total_minutes += (now - remaining).num_minutes(); } - println!("{}", time::get_charaterized_time_remaining(total_minutes, target_minutes)); + println!("{}", time::get_charaterized_time_remaining(total_minutes, target_minutes, last.unwrap_or_else(|| Local::now()))); Ok(()) } diff --git a/src/time.rs b/src/time.rs index 6d49767..eb0e0cf 100644 --- a/src/time.rs +++ b/src/time.rs @@ -54,7 +54,11 @@ pub fn to_hrs_minutes(total_minutes: i64) -> (i64, i64) { (hours, minutes) } -pub fn get_charaterized_time_remaining(total_minutes: i64, target_minutes: i64) -> String { +pub fn get_charaterized_time_remaining( + total_minutes: i64, + target_minutes: i64, + ended_at: DateTime, +) -> String { if total_minutes == target_minutes { return "Exactly done".to_string(); } @@ -66,8 +70,17 @@ pub fn get_charaterized_time_remaining(total_minutes: i64, target_minutes: i64) } else { let diff = target_minutes - total_minutes; let (hours, minutes) = to_hrs_minutes(diff); - let end_at = (Local::now() + Duration::minutes(diff)).time(); + let end_at = (ended_at + Duration::minutes(diff)).time(); let end_str = end_at.format("%-I:%M %p"); - return format!("You have {} remaining (end at {} starting now)", show_time(hours, minutes), end_str) + return if ended_at > Local::now() { + format!( + "You have {} remaining (end at {} starting from {})", + show_time(hours, minutes), + end_str, + ended_at.format("%-I:%M %p"), + ) + } else { + format!("You have {} remaining (end at {} starting now)", show_time(hours, minutes), end_str) + } } }