mod count;
pub use count::*;
mod fix_activities;
pub use fix_activities::*;
mod fetch;
pub use fetch::*;
mod faker;
pub use faker::*;
mod relay;
pub use relay::*;
mod register;
pub use register::*;
mod reset;
pub use reset::*;
mod update;
pub use update::*;
mod nuke;
pub use nuke::*;
mod thread;
pub use thread::*;
mod cloak;
pub use cloak::*;
mod import;
pub use import::*;
mod export;
pub use export::*;
mod attachments;
pub use attachments::*;
#[derive(Debug, Clone, clap::Subcommand)]
pub enum CliCommand {
Faker{
count: u64,
},
Fetch {
uri: String,
#[arg(long, default_value_t = false)]
save: bool,
#[arg(long)]
fetch_as: Option<String>,
},
Relay {
#[clap(subcommand)]
action: RelayCommand,
},
Count {
#[arg(long, default_value_t = false)]
likes: bool,
#[arg(long, default_value_t = false)]
shares: bool,
#[arg(long, default_value_t = false)]
replies: bool,
},
Update {
#[arg(long, short, default_value_t = 10)]
days: i64,
#[arg(long)]
limit: Option<u64>,
},
Register {
username: String,
password: String,
#[arg(long = "name")]
display_name: Option<String>,
#[arg(long = "summary")]
summary: Option<String>,
#[arg(long = "avatar")]
avatar_url: Option<String>,
#[arg(long = "banner")]
banner_url: Option<String>,
},
Reset {
login: String,
password: String,
},
Nuke {
#[arg(long, default_value_t = false)]
for_real: bool,
#[arg(long, default_value_t = false)]
delete_objects: bool,
},
Thread {
},
Cloak {
#[arg(long, default_value_t = false)]
objects: bool,
#[arg(long, default_value_t = false)]
actors: bool,
#[arg(long, default_value_t = false)]
contents: bool,
#[arg(long, default_value_t = false)]
re_cloak: bool,
},
FixActivities {
#[arg(long, default_value_t = false)]
likes: bool,
#[arg(long, default_value_t = false)]
announces: bool,
},
Import {
file: std::path::PathBuf,
#[arg(long)]
from: String,
#[arg(long)]
to: String,
#[arg(short, long)]
attachment_base: Option<String>
},
Export {
actor: String,
file: std::path::PathBuf,
#[arg(long, default_value_t = false)]
pretty: bool,
},
Attachments {
},
}
pub async fn run(ctx: upub::Context, command: CliCommand) -> Result<(), Box<dyn std::error::Error>> {
tracing::info!("running cli task: {command:?}");
match command {
CliCommand::Faker { count } =>
Ok(faker(ctx, count as i64).await?),
CliCommand::Fetch { uri, save, fetch_as } =>
Ok(fetch(ctx, uri, save, fetch_as).await?),
CliCommand::Relay { action } =>
Ok(relay(ctx, action).await?),
CliCommand::Count { likes, shares, replies } =>
Ok(count(ctx, likes, shares, replies).await?),
CliCommand::Update { days, limit } =>
Ok(update_users(ctx, days, limit).await?),
CliCommand::Register { username, password, display_name, summary, avatar_url, banner_url } =>
Ok(register(ctx, username, password, display_name, summary, avatar_url, banner_url).await?),
CliCommand::Reset { login, password } =>
Ok(reset(ctx, login, password).await?),
CliCommand::Nuke { for_real, delete_objects } =>
Ok(nuke(ctx, for_real, delete_objects).await?),
CliCommand::Thread { } =>
Ok(thread(ctx).await?),
CliCommand::Cloak { objects, actors, contents, re_cloak } =>
Ok(cloak(ctx, contents, objects, actors, re_cloak).await?),
CliCommand::FixActivities { likes, announces } =>
Ok(fix_activities(ctx, likes, announces).await?),
CliCommand::Import { file, from, to, attachment_base } =>
Ok(import(ctx, file, from, to, attachment_base).await?),
CliCommand::Export { actor, file, pretty } =>
Ok(export(ctx, actor, file, pretty).await?),
CliCommand::Attachments { } =>
Ok(fix_attachments_types(ctx).await?),
}
}