use anyhow::Result;
use clap_version_flag::colorful_version;
use dtime::{Config, DateTimeInfo};
use std::thread;
use std::time::Duration;
fn main() -> Result<()> {
let args: Vec<String> = std::env::args().collect();
if args.len() == 2 && (args[1] == "-V" || args[1] == "--version") {
let version = colorful_version!();
version.print_and_exit();
}
let config = Config::from_args();
if let Some(interval) = config.monitor {
run_monitor_mode(&config, interval)?;
} else {
run_single_output(&config)?;
}
Ok(())
}
fn run_single_output(config: &Config) -> Result<()> {
let dt_info = DateTimeInfo::new(config);
match config.output_format.as_str() {
"json" => {
println!("{}", dt_info.format_json());
}
"plain" => {
println!("{}", dt_info.format_plain());
}
_ => {
if config.no_color {
println!("{}", dt_info.format_plain());
} else {
println!("{}", dt_info.format_colored());
}
}
}
Ok(())
}
fn run_monitor_mode(config: &Config, interval: u64) -> Result<()> {
let duration = Duration::from_secs(interval);
println!("dtime monitor mode - Press Ctrl+C to exit\n");
loop {
let dt_info = DateTimeInfo::new(config);
print!("\x1B[2J\x1B[1;1H");
match config.output_format.as_str() {
"json" => {
println!("{}", dt_info.format_json());
}
"plain" => {
println!("{}", dt_info.format_plain());
}
_ => {
if config.no_color {
println!("{}", dt_info.format_plain());
} else {
println!("{}", dt_info.format_colored());
}
}
}
println!("\nUpdating every {} second(s)...", interval);
thread::sleep(duration);
}
}