use clap::{CommandFactory, Parser};
use log::info;
use playa::cli::Args;
use playa::config;
fn main() -> Result<(), Box<dyn std::error::Error>> {
playa_ffmpeg::init()?;
let args = Args::parse();
let has_any_args = args.file_path.is_some()
|| !args.files.is_empty()
|| args.playlist.is_some()
|| args.fullscreen
|| args.start_frame.is_some()
|| args.autoplay
|| args.loop_playback != 1
|| args.range_start.is_some()
|| args.range_end.is_some()
|| args.range.is_some()
|| args.log_file.is_some()
|| args.verbosity > 0
|| args.config_dir.is_some();
if !has_any_args {
let mut cmd = Args::command();
let _ = cmd.print_help();
println!("\n");
}
let path_config = config::PathConfig::from_env_and_cli(args.config_dir.clone());
let log_level = match args.verbosity {
0 => log::LevelFilter::Warn,
1 => log::LevelFilter::Info,
2 => log::LevelFilter::Debug,
_ => log::LevelFilter::Trace,
};
if let Some(log_path_opt) = &args.log_file {
let log_path = log_path_opt
.as_ref()
.cloned()
.unwrap_or_else(|| config::data_file("playa.log", &path_config));
let file = std::fs::File::create(&log_path).expect("Failed to create log file");
env_logger::Builder::new()
.filter_level(log_level)
.filter_module("egui", log::LevelFilter::Info)
.filter_module("egui_taffy", log::LevelFilter::Warn)
.format_timestamp_millis()
.target(env_logger::Target::Pipe(Box::new(file)))
.init();
info!(
"Logging to file: {} (level: {:?})",
log_path.display(),
log_level
);
} else {
let default_level = match args.verbosity {
0 => "warn",
1 => "info",
2 => "debug",
_ => "trace",
};
env_logger::Builder::from_env(env_logger::Env::default().default_filter_or(default_level))
.filter_module("egui", log::LevelFilter::Info)
.filter_module("egui_taffy", log::LevelFilter::Warn)
.format_timestamp_millis()
.init();
}
playa::run_app(args)
}