mirror of
https://github.com/Yuyi-Oak/BlueArchiveToolkit.git
synced 2026-07-22 07:26:44 +08:00
73 lines
2.1 KiB
Rust
73 lines
2.1 KiB
Rust
use bat_adapters::official::inventory::YostarJpDownloadInventory;
|
|
use bat_adapters::official::yostar_jp::{
|
|
verified_official_platforms, PatchPlatform, YostarJpResourceRoot,
|
|
};
|
|
use std::env;
|
|
use std::fs;
|
|
|
|
fn main() -> anyhow::Result<()> {
|
|
let args = env::args().collect::<Vec<_>>();
|
|
if args.len() < 5 {
|
|
print_usage(&args[0]);
|
|
std::process::exit(2);
|
|
}
|
|
|
|
let root_token = &args[1];
|
|
let bundle_packing_info_path = &args[2];
|
|
let table_catalog_path = &args[3];
|
|
let media_catalog_path = &args[4];
|
|
let platforms = args
|
|
.get(5)
|
|
.map(|value| parse_platforms(value))
|
|
.transpose()
|
|
.map_err(anyhow::Error::msg)?
|
|
.unwrap_or_else(verified_official_platforms);
|
|
|
|
let inventory = YostarJpDownloadInventory::from_catalog_bytes(
|
|
&fs::read(bundle_packing_info_path)?,
|
|
&fs::read(table_catalog_path)?,
|
|
&fs::read(media_catalog_path)?,
|
|
);
|
|
let root = YostarJpResourceRoot::from_root_token(root_token).map_err(anyhow::Error::msg)?;
|
|
|
|
println!(
|
|
"bundle_patch_pack_count={}",
|
|
inventory.bundle_patch_pack_names.len()
|
|
);
|
|
println!("table_file_count={}", inventory.table_file_names.len());
|
|
println!("media_file_count={}", inventory.media_file_names.len());
|
|
println!();
|
|
|
|
for url in inventory
|
|
.direct_download_urls_for_platforms(&root, &platforms)
|
|
.map_err(anyhow::Error::msg)?
|
|
{
|
|
println!("{url}");
|
|
}
|
|
|
|
Ok(())
|
|
}
|
|
|
|
fn print_usage(binary: &str) {
|
|
eprintln!(
|
|
"usage: {binary} <root-token> <BundlePackingInfo.bytes> <TableCatalog.bytes> <MediaCatalog.bytes> [platforms]"
|
|
);
|
|
}
|
|
|
|
fn parse_platforms(value: &str) -> Result<Vec<PatchPlatform>, String> {
|
|
value
|
|
.split(',')
|
|
.map(str::trim)
|
|
.filter(|part| !part.is_empty())
|
|
.map(parse_platform)
|
|
.collect()
|
|
}
|
|
|
|
fn parse_platform(value: &str) -> Result<PatchPlatform, String> {
|
|
match value.to_ascii_lowercase().as_str() {
|
|
"windows" | "win" => Ok(PatchPlatform::Windows),
|
|
"android" => Ok(PatchPlatform::Android),
|
|
_ => Err(format!("unsupported platform: {value}")),
|
|
}
|
|
}
|