54 lines
1.2 KiB
Rust
54 lines
1.2 KiB
Rust
use std::{path::PathBuf, time::Instant};
|
|
|
|
use argh::FromArgs;
|
|
use theseus::modpack::{fetch_modpack, manifest::ModpackSide};
|
|
|
|
#[derive(FromArgs)]
|
|
/// Simple modpack download
|
|
struct ModpackDownloader {
|
|
/// where to download to
|
|
#[argh(positional)]
|
|
url: String,
|
|
|
|
/// where to put the resulting pack
|
|
#[argh(option, short = 'o')]
|
|
output: Option<PathBuf>,
|
|
|
|
/// the sha1 hash, if you want it checked
|
|
#[argh(option, short = 'c')]
|
|
hash: Option<String>,
|
|
|
|
/// use verbose logging
|
|
#[argh(switch, short = 'v')]
|
|
verbose: bool,
|
|
}
|
|
|
|
// Simple logging helper
|
|
fn debug(msg: &str, verbose: bool) {
|
|
if verbose {
|
|
println!("{}", msg);
|
|
}
|
|
}
|
|
|
|
#[tokio::main]
|
|
pub async fn main() {
|
|
let args = argh::from_env::<ModpackDownloader>();
|
|
let dest = args.output.unwrap_or(PathBuf::from("./pack-download/"));
|
|
|
|
debug(
|
|
&format!(
|
|
"Downloading pack {} to {}",
|
|
args.url,
|
|
dest.to_str().unwrap_or("?")
|
|
),
|
|
args.verbose,
|
|
);
|
|
|
|
let start = Instant::now();
|
|
fetch_modpack(&args.url, args.hash.as_deref(), &dest, ModpackSide::Client).await;
|
|
let end = start.elapsed();
|
|
|
|
println!("Download completed in {} seconds", end.as_secs_f32());
|
|
debug("Done!", args.verbose);
|
|
}
|