diff --git a/Cargo.toml b/Cargo.toml index ca4f837..f2c2b83 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,6 +20,7 @@ desktop = ["dep:notify-rust"] [dependencies] anyhow = "1.0.86" chrono = "0.4.38" +humantime = "2.1.0" libpt = { version = "0.6.0", features = ["cli"] } notify-rust = { version = "4.11.0", optional = true } ratatui = "0.27.0" diff --git a/src/clock.rs b/src/clock.rs index 7369ad6..42c9e59 100644 --- a/src/clock.rs +++ b/src/clock.rs @@ -3,6 +3,7 @@ use chrono::{DateTime, Local, SubsecRound, Timelike}; use clap::Parser; +use humantime; use libpt::cli::args::HELP_TEMPLATE; use libpt::cli::clap::ArgGroup; use libpt::cli::{args::VerbosityLevel, clap}; @@ -47,7 +48,7 @@ impl Default for TimeBarLength { /// Make your terminal into a big clock #[derive(Parser, Debug, Clone)] #[command(help_template = HELP_TEMPLATE, author, version)] -#[clap(group( ArgGroup::new("timebarlen") .args(&["minute","day", "hour", "custom", "count_up"]),))] +#[clap(group( ArgGroup::new("timebarlen") .args(&["minute","day", "hour", "custom", "countdown"]),))] #[allow(clippy::struct_excessive_bools)] // the struct is for cli parsing and we already use an // ArgGroup pub struct Clock { @@ -58,16 +59,23 @@ pub struct Clock { pub timer: bool, // timebar options + /// show a time bar that tracks progress of the minute #[clap(short, long)] pub minute: bool, + /// show a time bar that tracks progress of the day #[clap(short, long)] pub day: bool, + /// show a time bar that tracks progress of the hour #[clap(short = 'o', long)] pub hour: bool, - #[clap(short, long)] - pub custom: Option, - #[clap(short = 'u', long)] - pub count_up: Option, + /// show a time bar that tracks progress of a custom duration + #[clap(short, long, value_parser = humantime::parse_duration)] + pub custom: Option, + /// show a time bar that tracks progress of a custom duration without resetting + #[clap(short = 'u', long, value_parser = humantime::parse_duration)] + pub countdown: Option, + + // internal variables #[clap(skip)] pub(crate) last_reset: Option>, #[clap(skip)] @@ -134,11 +142,14 @@ impl Clock { Some(TimeBarLength::Day) } else if self.hour { Some(TimeBarLength::Hour) - } else if self.count_up.is_some() { - self.count_up.map(TimeBarLength::Countup) + } else if self.countdown.is_some() { + Some(TimeBarLength::Countup( + self.countdown.unwrap().as_secs() as i64 + )) } else { - // this feels weird but is the same - self.custom.map(TimeBarLength::Custom) + Some(TimeBarLength::Custom( + self.countdown.unwrap().as_secs() as i64 + )) } }