use crate::spawn::ensure_daemon_safe;
use clap::Subcommand;
use night_fury_daemon_core::cli::make_req;
use night_fury_daemon_core::client;
use serde_json::json;
use super::{acquire_then_exec, ExecArgs};
#[derive(Subcommand)]
pub enum TwitterCmd {
Timeline {
#[arg(long, default_value = "following")]
r#type: String,
#[arg(long, default_value_t = 20)]
count: u64,
},
Search {
query: String,
#[arg(long, default_value_t = 20)]
count: u64,
},
}
pub async fn run(
cmd: TwitterCmd,
socket: &str,
host: &str,
session: Option<String>,
) -> anyhow::Result<()> {
let (cmd_name, params) = match cmd {
TwitterCmd::Timeline { r#type, count } => {
("twitter.timeline", json!({"type": r#type, "count": count}))
}
TwitterCmd::Search { query, count } => {
("twitter.search", json!({"query": query, "count": count}))
}
};
if let Some(sid) = session {
ensure_daemon_safe(socket).await?;
let req = make_req(cmd_name, Some(&sid), params);
let resp = client::send(socket, &req).await?;
super::print_and_check(&resp);
return Ok(());
}
let args = ExecArgs {
site: "twitter",
host,
cmd: cmd_name,
params,
};
acquire_then_exec(socket, args).await
}