#![cfg_attr(not(test), windows_subsystem = "windows")]
use anyhow::{Result, ensure};
use lr2_oxytabler::output::OutputFolder;
use std::path::PathBuf;
mod gui;
mod gui_dummy;
fn main() -> Result<()> {
const HELP: &str = concat!(env!("CARGO_PKG_NAME"), " ", env!("CARGO_PKG_VERSION"), "
Usage:
--db <path> Path to song.db
--output <key:path> Folders to write playlists to (multiple allowed)
--save-on-update-finish <true/false> Enable or disable saving on update completion (default: 'true')
--write-tags <true/false> Enable or disable writing tags (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") {
return gui_dummy::run(HELP.to_string());
}
let app = (|| {
let db = args.value_from_str::<_, PathBuf>("--db")?;
let outputs = fixup_outputs(args.values_from_str::<_, OutputFolder>("--output")?);
let write_tags_on_save = args
.opt_value_from_str::<_, bool>("--write-tags")?
.unwrap_or(false);
let save_on_update_finish = args
.opt_value_from_str::<_, bool>("--save-on-update-finish")?
.unwrap_or(true);
let left = args.finish();
ensure!(left.is_empty(), "Unsupported arguments: {left:?}");
gui::App::new(&db, outputs, save_on_update_finish, write_tags_on_save)
})();
match app {
Ok(app) => app.run(),
Err(e) => {
let e = format!(
"An error occurred while starting LR2 OxyTabler:\n{e:#}\n\nHINT: see --help:\n{HELP}"
);
log::error!("{e}");
gui_dummy::run(e)
}
}
}