mirror of
https://github.com/redstrate/Physis.git
synced 2025-04-20 19:57:45 +00:00
Add a simple extractor example
This commit is contained in:
parent
349a194060
commit
f818cf5376
1 changed files with 48 additions and 0 deletions
48
examples/extractor.rs
Normal file
48
examples/extractor.rs
Normal file
|
@ -0,0 +1,48 @@
|
|||
// SPDX-FileCopyrightText: 2024 Joshua Goins <josh@redstrate.com>
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
use std::env;
|
||||
use std::fs::File;
|
||||
use std::io::Write;
|
||||
use physis::common::Platform;
|
||||
use physis::gamedata::GameData;
|
||||
|
||||
/// A simple program that allows a user to extract raw files from the game
|
||||
fn main() {
|
||||
let args: Vec<String> = env::args().collect();
|
||||
if args.len() != 4 {
|
||||
println!("Usage: extractor [game dir] [filepath_to_extract] [destination]");
|
||||
return;
|
||||
}
|
||||
|
||||
/// Collect our arguments
|
||||
let game_dir = &args[1];
|
||||
let file_path = &args[2];
|
||||
let destination_path = &args[3];
|
||||
|
||||
/// Create a GameData struct, this manages the repositories. It allows us to easily extract files.
|
||||
let Some(mut game_data) = GameData::from_existing(Platform::Win32, game_dir) else {
|
||||
println!("Invalid game directory ({})!", game_dir);
|
||||
return;
|
||||
};
|
||||
|
||||
/// Extract said file:
|
||||
let Some(game_file) = game_data.extract(file_path) else {
|
||||
println!("File {} not found!", file_path);
|
||||
return;
|
||||
};
|
||||
|
||||
/// Create the file to write into.
|
||||
let Ok(mut file) = File::create(destination_path) else {
|
||||
println!("Failed to open file {} for writing.", destination_path);
|
||||
return;
|
||||
};
|
||||
|
||||
/// Since GameData::extract returns a byte buffer, it's trivial to write that to a file on disk.
|
||||
if !file.write_all(&game_file).is_ok() {
|
||||
println!("Failed to write to file {}.", destination_path);
|
||||
return;
|
||||
};
|
||||
|
||||
println!("Successfully extracted {} to {}!", file_path, destination_path);
|
||||
}
|
Loading…
Add table
Reference in a new issue