Files
Kaihai/src/extractor.rs
2024-06-04 16:42:49 -05:00

57 lines
1.8 KiB
Rust

use std::process::Command;
use std::env;
use std::fs;
use walkdir::WalkDir;
use std::ffi::OsString;
use std::path::PathBuf;
use crate::config_settings;
pub fn extract_wad() {
let config = config_settings::load_config();
let wad_files: Vec<OsString> = WalkDir::new(config.wad_dir)
.into_iter()
.filter_map(|entry| entry.ok())
.filter(|entry| {
let path = entry.path();
let file_name = path.file_name().and_then(|name| name.to_str()).unwrap_or("");
let extension = path.extension().and_then(|ext| ext.to_str()).unwrap_or("");
extension == "client" &&
file_name.ends_with(".wad.client") &&
file_name.split('.').count() == 3
})
.map(|entry| entry.path().to_owned().into_os_string())
.collect();
if wad_files.is_empty() {
eprintln!("No valid .wad.client files found in the directory");
return;
}
let current_dir = env::current_dir().expect("Failed to get current directory");
let extraction_path = current_dir.join("wads");
let bat_path = PathBuf::from(config.cslol_dir).join("cslol-tools\\wad-extract.exe");
if !extraction_path.exists() {
fs::create_dir_all(&extraction_path).expect("Failed to create extraction folder");
}
for (i, wad_file) in wad_files.iter().enumerate() {
let status = Command::new(&bat_path)
.arg(&wad_file)
.arg(&extraction_path)
.status()
.expect("Failed to execute command");
if status.success() {
println!("Successfully executed wad-extract.bat for {:?}", wad_file);
} else {
eprintln!("wad-extract.bat returned a non-zero status for {:?}", wad_file);
}
if i >= 3 {
break;
}
}
}