pub mod breaks;
pub mod autostart;
pub mod export;
pub mod init;
pub mod migrations;
pub mod pauses;
pub mod report;
pub mod sum;
pub mod tag;
pub mod task;
pub mod template;
pub mod update;
pub mod watch;
use crate::{db::workdays::Workdays, libs::messages::types::Message, msg_info};
use anyhow::Result;
use chrono::Local;
use clap::{Parser, Subcommand};
#[derive(Debug, Subcommand)]
enum Commands {
#[command(about = "Manage autostart on system boot")]
Autostart(autostart::AutostartArgs),
#[command(about = "Configuration initialization")]
Init(init::InitArgs),
#[command(about = "Create task")]
Task(task::TaskArgs),
#[command(about = "Write end timestamp to database")]
End,
#[command(about = "Get summary")]
Sum(sum::SumArgs),
#[command(about = "Update the application to the latest version")]
Update,
#[command(about = "Prepare a report")]
Report(report::ReportArgs),
#[command(about = "Export data to various formats")]
Export(export::ExportArgs),
#[command(about = "Manage task templates")]
Template(template::TemplateArgs),
#[command(about = "Manage task tags")]
Tag(tag::TagArgs),
#[command(about = "Watch user activity in the background to record pauses")]
Watch(watch::WatchArgs),
#[command(about = "Display pauses for a given date")]
Pauses(pauses::PausesArgs),
#[command(about = "Add manual breaks for productivity optimization")]
Breaks(breaks::BreaksArgs),
#[cfg(debug_assertions)]
#[command(about = "Database migration management")]
Migrations(migrations::MigrationsArgs),
}
#[derive(Debug, Parser)]
#[command(author, version, about, long_about = None)]
#[command(arg_required_else_help(true))]
pub struct Cli {
#[command(subcommand)]
command: Commands,
}
impl Cli {
pub async fn menu() -> Result<()> {
let cli = Self::parse();
match cli.command {
Commands::Autostart(args) => autostart::cmd(args),
Commands::Init(args) => init::cmd(args),
Commands::Task(args) => task::cmd(args).await,
Commands::End => {
Workdays::new()?.insert_end(Local::now().date_naive())?;
msg_info!(Message::WorkdayEnded);
Ok(())
}
Commands::Sum(args) => sum::cmd(args).await,
Commands::Report(args) => report::cmd(args).await,
Commands::Export(args) => export::cmd(args).await,
Commands::Template(args) => template::cmd(args),
Commands::Tag(args) => tag::cmd(args).await,
Commands::Update => update::cmd().await,
Commands::Watch(args) => watch::cmd(args).await,
Commands::Pauses(args) => pauses::cmd(args).await,
Commands::Breaks(args) => breaks::cmd(args).await,
#[cfg(debug_assertions)]
Commands::Migrations(args) => migrations::cmd(args),
}
}
}