aboutsummaryrefslogtreecommitdiff
path: root/tools/src/bin/import.rs
blob: 4af6ac76e40d128dabf72eb314090fa63aee4081 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
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<PathBuf>,

    #[clap(short, long)]
    title: Option<String>,

    #[clap(short = 'd', long)]
    dry: bool,

    #[clap(short = 'i', long)]
    input: PathBuf,
}

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,
                path: args.input.clone(),
                banner: args.banner,
                title: args
                    .title
                    .unwrap_or(args.item.to_str().unwrap().to_string()),
                tracks: Default::default(),
            }
        }
    };

    let input = File::open(args.input.clone()).unwrap();
    let mut input = EbmlReader::new(input);

    import_read(&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(())
}