mirror of
https://github.com/Yuyi-Oak/BlueArchiveToolkit.git
synced 2026-07-22 08:36:43 +08:00
feat: prepare experiment push package
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
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}")),
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user