use clap::Parser; use jellycommon::ItemInfo; use jellymatroska::read::EbmlReader; use jellyremuxer::import::import_read; use log::warn; use std::{fs::File, io::Write, path::PathBuf}; #[derive(Parser)] struct Args { #[clap(short = 'I', long)] item: PathBuf, #[clap(short, long)] banner: Option, #[clap(short, long)] title: Option, #[clap(short = 'd', long)] dry: bool, #[clap(short = 'i', long)] input: Option, } fn main() -> anyhow::Result<()> { env_logger::builder() .filter_level(log::LevelFilter::Info) .parse_env("LOG") .init(); let args = Args::parse(); let mut iteminfo: ItemInfo = match File::open(&args.item) { Ok(f) => serde_json::from_reader(f)?, Err(e) => { warn!("could not load item info: {e}"); warn!("using the default instead"); ItemInfo { duration: 0.0, banner: None, title: args.item.to_str().unwrap().to_string(), tracks: Default::default(), } } }; if let Some(title) = args.title { iteminfo.title = title; } if let Some(banner) = args.banner { iteminfo.banner = Some(banner); } if let Some(input_path) = args.input { let input = File::open(input_path.clone()).unwrap(); let mut input = EbmlReader::new(input); import_read(&input_path, &mut input, &mut iteminfo)?; } let k = serde_json::to_string_pretty(&iteminfo)?; if args.dry { println!("{k}") } else { let mut f = File::create(args.item)?; f.write_all(k.as_bytes())?; } Ok(()) }