diff --git a/README.md b/README.md index 61411e6..ab075c2 100644 --- a/README.md +++ b/README.md @@ -7,13 +7,13 @@ pixiv by using saucenao. You need to have cargo installed and can just do ``` -cargo install hydrus-pixiv-tagger +cargo install hydrus-utils ``` Or build the binary yourself. You need a rust-toolchain installation (for example with [rustup](https://rustup.rs)). ``` -git clone https://github.com/Trivernis/hydrus-pixiv-tagger.git -cd hydrus-pixiv-tagger +git clone https://github.com/Trivernis/hydrus-utils.git +cd hydrus-utils cargo build --release ``` diff --git a/src/args.rs b/src/args.rs new file mode 100644 index 0000000..301a1f2 --- /dev/null +++ b/src/args.rs @@ -0,0 +1,46 @@ +use clap::{Parser, Subcommand}; + +#[derive(Parser, Debug)] +#[clap(author, version, about)] +pub struct Args { + #[clap(subcommand)] + pub subcommand: Command, + + /// The hydrus client api key + #[clap(long, env)] + pub hydrus_key: String, + + /// The url to the hydrus client api + #[clap(long, default_value = "http://127.0.0.1:45869", env)] + pub hydrus_url: String, +} + +#[derive(Subcommand, Clone, Debug)] +pub enum Command { + #[clap(name = "send-url")] + /// Looks up files on saucenao and sends urls to hydrus to be imported + FindAndSendUrl(Options), + + #[clap(name = "send-tags")] + /// Looks up files on saucenao and maps the tags found on pixiv to the files + FindAndSendTags(Options), +} + +#[derive(Parser, Debug, Clone)] +pub struct Options { + /// The saucenao api key + #[clap(long, env)] + pub saucenao_key: String, + + /// The tag service the tags will be assigned to + #[clap(long, default_value = "my tags")] + pub tag_service: String, + + /// Tag that is assigned to files that have been processed + #[clap(long)] + pub finish_tag: Option, + + /// Tags used to search for files + #[clap(short, long)] + pub tags: Vec, +} diff --git a/src/main.rs b/src/main.rs index 110e213..81c9470 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,9 +1,11 @@ +mod args; mod error; pub mod search; use crate::error::Result; use crate::search::get_urls; -use clap::{Parser, Subcommand}; +use args::*; +use clap::Parser; use hydrus_api::wrapper::hydrus_file::HydrusFile; use hydrus_api::wrapper::service::ServiceName; use hydrus_api::wrapper::tag::Tag; @@ -13,59 +15,14 @@ use rustnao::{Handler, HandlerBuilder, Sauce}; use tempdir::TempDir; use tokio::time::{Duration, Instant}; -#[derive(Parser, Debug)] -#[clap(author, version, about)] -struct Args { - #[clap(subcommand)] - subcommand: Command, - - /// The hydrus client api key - #[clap(long, env)] - hydrus_key: String, - - /// The url to the hydrus client api - #[clap(long, default_value = "http://127.0.0.1:45869", env)] - hydrus_url: String, -} - -#[derive(Subcommand, Clone, Debug)] -enum Command { - #[clap(name = "send-url")] - /// Sends urls to hydrus to be imported - SendUrl(Options), - - #[clap(name = "send-tags")] - /// Maps the tags found for the hydrus url to the hydrus file - SendTags(Options), -} - -#[derive(Parser, Debug, Clone)] -struct Options { - /// The saucenao api key - #[clap(long, env)] - saucenao_key: String, - - /// The tag service the tags will be assigned to - #[clap(long, default_value = "my tags")] - tag_service: String, - - /// Tag that is assigned to files that have been processed - #[clap(long)] - finish_tag: Option, - - /// Tags used to search for files - #[clap(short, long)] - tags: Vec, -} - #[tokio::main(flavor = "current_thread")] async fn main() { env_logger::builder().init(); let args: Args = Args::parse(); log::debug!("args: {args:?}"); let opt = match &args.subcommand { - Command::SendUrl(opt) => opt.clone(), - Command::SendTags(opt) => opt.clone(), + Command::FindAndSendUrl(opt) => opt.clone(), + Command::FindAndSendTags(opt) => opt.clone(), }; let handler = HandlerBuilder::new() @@ -89,10 +46,10 @@ async fn main() { for mut file in files { let start = Instant::now(); match &args.subcommand { - Command::SendUrl(_) => { + Command::FindAndSendUrl(_) => { let _ = search_and_send_urls(&hydrus, &handler, &tmpdir, &mut file).await; } - Command::SendTags(_) => { + Command::FindAndSendTags(_) => { let _ = tag_file( opt.finish_tag.as_ref(), &handler,