use crate::libs::toast_action::{Mailbox, ToastAction, ToastRequest};
use crate::libs::{daemon, messages::Message};
use crate::msg_error_anyhow;
use anyhow::Result;
use clap::Args;
use tracing::{debug, warn};
#[derive(Debug, Args)]
pub struct ToastActionArgs {
#[arg(value_name = "ACTION")]
action: String,
#[arg(value_name = "KEY")]
key: String,
}
pub fn cmd(args: ToastActionArgs) -> Result<()> {
let Some(action) = ToastAction::parse(&args.action) else {
return Err(msg_error_anyhow!(Message::ToastActionUnknown(args.action.clone())));
};
let request = ToastRequest::new(action, &args.key);
if !daemon::is_running() {
warn!("No watcher is running; performing {} {} here instead", args.action, args.key);
return crate::libs::toast_apply::apply(&request).map(|_| ());
}
Mailbox::open()?.post(&request)?;
debug!("Posted {} {} to the toast mailbox", args.action, args.key);
Ok(())
}