use crate::{
libs::{config::Config, daemon, messages::Message},
msg_info, msg_success, msg_warning,
};
use anyhow::Result;
use clap::Args;
#[derive(Debug, Args)]
pub struct InitArgs {
#[arg(short, long)]
delete: bool,
}
pub fn cmd(init_args: InitArgs) -> Result<()> {
let watcher_was_running = daemon::is_running();
if watcher_was_running {
msg_info!(Message::WatcherStoppingForConfig);
daemon::stop()?;
}
match Config::set_app_global() {
Ok(()) => {
msg_success!(Message::PathConfigured);
}
Err(e) => {
msg_warning!(Message::PathConfigWarning { error: e.to_string() });
}
}
if init_args.delete {
msg_info!(Message::ConfigDeleted);
return Ok(());
}
Config::init()?.save()?;
msg_success!(Message::ConfigSaved);
if watcher_was_running {
msg_info!(Message::WatcherRestartingAfterConfig);
match daemon::spawn() {
Ok(()) => {
msg_success!(Message::WatcherRestarted);
}
Err(e) => {
msg_warning!(Message::WatcherRestartFailed { error: e.to_string() });
}
}
}
Ok(())
}