use anyhow::{Result, ensure};
use lr2_oxytabler::output::OutputFolder;
use std::path::PathBuf;
mod cli_update;
fn main() -> Result<()> {
const HELP: &str = concat!(
env!("CARGO_PKG_NAME"),
" ",
env!("CARGO_PKG_VERSION"),
"
Usage:
update:
--db <path> Path to song.db
--output <key:path> Folders to write playlists to (multiple allowed)
--write-tags <true/false> Enable or disable tag writing (default: 'false')
Environment variables:
RUST_LOG - configure logging"
);
fn fixup_outputs(mut outputs: Vec<OutputFolder>) -> Vec<OutputFolder> {
outputs.reverse();
outputs.sort_by(|a, b| a.0.0.cmp(&b.0.0)); outputs.dedup_by(|a, b| a.0.0 == b.0.0);
outputs
}
env_logger::Builder::from_env(
env_logger::Env::default().default_filter_or("lr2_oxytabler=info"),
)
.init();
let mut args = pico_args::Arguments::from_env();
if args.contains("--help") {
println!("{HELP}");
return Ok(());
}
match args.subcommand()?.as_deref() {
Some("update") => {
let db = args.value_from_str::<_, PathBuf>("--db")?;
let outputs = fixup_outputs(args.values_from_str::<_, OutputFolder>("--output")?);
let write_tags = args
.opt_value_from_str::<_, bool>("--write-tags")?
.unwrap_or(false);
let left = args.finish();
ensure!(left.is_empty(), "Unsupported arguments: {left:?}");
cli_update::run(&db, &outputs, write_tags)
}
Some(cmd) => anyhow::bail!("invalid cmd: {cmd}"),
None => {
let left = args.finish();
ensure!(left.is_empty(), "Unsupported arguments: {left:?}");
log::warn!("hint: see --help:\n\n{HELP}");
anyhow::bail!("nothing to do")
}
}
}