use std::path::PathBuf;
use clap::Parser;
#[derive(Debug, Parser)]
#[command(version, about)]
struct Cli {
#[clap(short, long = "log", default_value_t = tracing::Level::WARN)]
log_level: tracing::Level,
#[clap(long, value_enum, default_value_t = phorg::hash::Hash::default())]
hash: phorg::hash::Hash,
#[clap(short = 'f', long = "force", default_value_t = false)]
force: bool,
#[clap(long, default_value_t = false)]
no_exiftool: bool,
#[clap(short = 'p', long = "progress", default_value_t = false)]
show_progress: bool,
#[clap(short, long = "type", name = "TYPE", value_enum)]
typ: Option<phorg::files::Typ>,
#[clap(long, default_value = "img")]
img_dir: String,
#[clap(long, default_value = "vid")]
vid_dir: String,
src_root: PathBuf,
dst_root: PathBuf,
#[clap(subcommand)]
op: phorg::files::Op,
}
fn main() -> anyhow::Result<()> {
human_panic_setup();
let cli = Cli::parse();
phorg::tracing_init(Some(cli.log_level))?;
let use_exiftool = !cli.no_exiftool;
phorg::files::organize(
&cli.src_root,
&cli.dst_root,
&cli.op,
&cli.img_dir,
&cli.vid_dir,
cli.typ,
cli.force,
use_exiftool,
cli.show_progress,
cli.hash,
)?;
Ok(())
}
fn human_panic_setup() {
macro_rules! repo {
() => {
env!("CARGO_PKG_REPOSITORY")
};
}
human_panic::setup_panic!(human_panic::Metadata::new(
env!("CARGO_PKG_NAME"),
env!("CARGO_PKG_VERSION")
)
.authors(env!("CARGO_PKG_AUTHORS"))
.homepage(repo!())
.support(concat!("- Submit an issue at ", repo!(), "/issues")));
}