diff --git a/src/clew/clew.py b/src/clew/clew.py index 4fe07a0..76a3723 100644 --- a/src/clew/clew.py +++ b/src/clew/clew.py @@ -8,6 +8,8 @@ import sys from collections import deque from pathlib import Path +from rpycdec.rpa import extract_rpa + LOG = logging.getLogger(__name__) def parse_args(argv: list[str]) -> argparse.Namespace: @@ -32,11 +34,6 @@ def parse_args(argv: list[str]) -> argparse.Namespace: action="store_true", help="Replace Clew-managed output directories.", ) - parser.add_argument( - "--suffix", - action="append", - help="Extract only archive paths with this suffix. Repeatable.", - ) return parser.parse_args(argv) @@ -57,6 +54,12 @@ def get_output_directory(output_root: Path, folder: str) -> Path: return directory +def extract_archive(archive: Path, destination: Path) -> None: + destination.mkdir(parents=True, exist_ok=True) + with archive.open("rb") as handle: + extract_rpa(handle, output_dir=str(destination)) + + def extract_game_files(game_root: Path, output_path: Path) -> None: queue = deque(game_root.iterdir()) @@ -67,6 +70,8 @@ def extract_game_files(game_root: Path, output_path: Path) -> None: if item.is_dir(): destination.mkdir(parents=True, exist_ok=True) queue.extend(item.iterdir()) + elif item.is_file() and item.suffix.lower() == ".rpa": + extract_archive(item, destination.with_suffix("")) elif item.is_file(): destination.parent.mkdir(parents=True, exist_ok=True) shutil.copy2(item, destination)