mirror of
https://github.com/Yuyi-Oak/BlueArchiveToolkit.git
synced 2026-07-22 01:15:14 +08:00
chore: establish development baseline
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
use bat_infrastructure::FileSystemCasRepository;
|
||||
use bat_core::repositories::cas_repository::CasRepository;
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() -> anyhow::Result<()> {
|
||||
println!("🎮 BlueArchiveToolkit - CAS 存储演示");
|
||||
println!("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
|
||||
|
||||
// 创建 CAS Repository
|
||||
let repo = FileSystemCasRepository::new("/tmp/bat-demo");
|
||||
repo.init().await?;
|
||||
println!("✅ CAS 存储已初始化");
|
||||
|
||||
// 存储一些数据
|
||||
println!("\n📦 存储对象...");
|
||||
let data1 = b"Hello, Blue Archive!";
|
||||
let id1 = repo.store(data1).await?;
|
||||
println!(" 存储对象 1: {}", &id1[..16]);
|
||||
|
||||
let data2 = b"This is a test file content";
|
||||
let id2 = repo.store(data2).await?;
|
||||
println!(" 存储对象 2: {}", &id2[..16]);
|
||||
|
||||
// 测试去重
|
||||
println!("\n🔄 测试去重...");
|
||||
let id1_dup = repo.store(data1).await?;
|
||||
println!(" 相同内容再次存储: {}", &id1_dup[..16]);
|
||||
println!(" 去重成功: {}", id1 == id1_dup);
|
||||
|
||||
// 获取对象
|
||||
println!("\n📥 获取对象...");
|
||||
let retrieved = repo.get(&id1).await?;
|
||||
println!(" 原始数据: {:?}", String::from_utf8_lossy(data1));
|
||||
println!(" 获取数据: {:?}", String::from_utf8_lossy(&retrieved));
|
||||
println!(" 数据完整性: {}", data1 == retrieved.as_slice());
|
||||
|
||||
// 检查存在性
|
||||
println!("\n🔍 检查对象存在性...");
|
||||
println!(" 对象 1 存在: {}", repo.exists(&id1).await);
|
||||
println!(" 对象 2 存在: {}", repo.exists(&id2).await);
|
||||
println!(" 不存在的对象: {}", repo.exists(&"nonexistent".to_string()).await);
|
||||
|
||||
println!("\n✅ 演示完成!");
|
||||
println!("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
|
||||
|
||||
Ok(())
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
use bat_adapters::manifest::{AddressablesCatalogDriver, ManifestDriverRegistry};
|
||||
use bat_adapters::manifest::ManifestDriver;
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() -> anyhow::Result<()> {
|
||||
println!("🎮 BlueArchiveToolkit - Addressables 解析演示");
|
||||
println!("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
|
||||
|
||||
// 创建 Driver
|
||||
let driver = AddressablesCatalogDriver::new();
|
||||
println!("✅ Driver: {}", driver.name());
|
||||
|
||||
// 模拟 Addressables Catalog
|
||||
println!("\n📦 解析 Addressables Catalog...");
|
||||
let catalog_json = r#"{
|
||||
"m_LocatorId": "AddressablesMainContentCatalog",
|
||||
"m_InternalIdPrefixes": ["https://cdn.example.com/"],
|
||||
"m_InternalIds": [
|
||||
"academy-model.bundle",
|
||||
"academy-texture.bundle",
|
||||
"ui-atlas.bundle",
|
||||
"TableBundles-JP.bundle"
|
||||
]
|
||||
}"#;
|
||||
|
||||
if driver.can_parse(catalog_json.as_bytes()) {
|
||||
println!(" ✅ 可以解析此 Catalog");
|
||||
|
||||
let manifest = driver.parse(catalog_json.as_bytes()).await?;
|
||||
println!(" 解析结果:");
|
||||
println!(" Locator ID: {:?}", manifest.metadata.locator_id);
|
||||
println!(" 资源数量: {}", manifest.resources.len());
|
||||
println!(" 资源列表:");
|
||||
for (i, resource) in manifest.resources.iter().enumerate() {
|
||||
println!(" {}. {} ({})", i + 1, resource.path, resource.resource_type);
|
||||
}
|
||||
}
|
||||
|
||||
// 测试 Registry
|
||||
println!("\n🔄 测试 Driver Registry...");
|
||||
let registry = ManifestDriverRegistry::with_defaults();
|
||||
println!(" 注册的 Driver 数量: {}", registry.count());
|
||||
|
||||
let manifest = registry.parse(catalog_json.as_bytes()).await?;
|
||||
println!(" ✅ Registry 自动解析成功");
|
||||
println!(" 解析了 {} 个资源", manifest.resources.len());
|
||||
|
||||
println!("\n✅ 演示完成!");
|
||||
println!("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
|
||||
|
||||
Ok(())
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
use bat_adapters::unity::{Unity2021_3Adapter, UnityAdapterRegistry};
|
||||
use bat_adapters::unity::RawAssetBundle;
|
||||
use std::sync::Arc;
|
||||
|
||||
fn main() {
|
||||
println!("🎮 BlueArchiveToolkit - Unity 适配器演示");
|
||||
println!("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
|
||||
|
||||
// 创建 Unity Adapter
|
||||
let adapter = Unity2021_3Adapter::new();
|
||||
println!("✅ Unity Adapter: {}", adapter.name());
|
||||
println!(" 支持版本: 2021.3.0 - 2021.3.99");
|
||||
|
||||
// 模拟 UnityFS 文件头
|
||||
println!("\n📦 测试 Unity 版本检测...");
|
||||
let mut bundle_data = Vec::new();
|
||||
bundle_data.extend_from_slice(b"UnityFS\0");
|
||||
bundle_data.extend_from_slice(&[0, 0, 0, 8]);
|
||||
bundle_data.extend_from_slice(b"5.x.x\02021.3.56f2\0");
|
||||
|
||||
let bundle = RawAssetBundle {
|
||||
data: bundle_data,
|
||||
path: Some("test.bundle".to_string()),
|
||||
};
|
||||
|
||||
if adapter.can_handle(&bundle) {
|
||||
println!(" ✅ 可以处理 Unity 2021.3.56f2");
|
||||
} else {
|
||||
println!(" ❌ 不支持此版本");
|
||||
}
|
||||
|
||||
// 测试 Registry
|
||||
println!("\n🔄 测试 Adapter Registry...");
|
||||
let mut registry = UnityAdapterRegistry::new();
|
||||
registry.register(Arc::new(Unity2021_3Adapter::new()));
|
||||
println!(" 注册的适配器数量: {}", registry.count());
|
||||
|
||||
match registry.select_adapter(&bundle) {
|
||||
Ok(selected) => {
|
||||
println!(" ✅ 自动选择的适配器: {}", selected.name());
|
||||
}
|
||||
Err(e) => {
|
||||
println!(" ❌ 选择失败: {}", e);
|
||||
}
|
||||
}
|
||||
|
||||
println!("\n✅ 演示完成!");
|
||||
println!("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
|
||||
}
|
||||
Reference in New Issue
Block a user