From 3a1282dd714a85bbe2f28ff9b513c9defffb6fd4 Mon Sep 17 00:00:00 2001 From: Jcw87 Date: Wed, 25 Jan 2023 23:15:49 -0800 Subject: [PATCH 1/4] tp.py: fix exception handler --- tools/tp.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/tp.py b/tools/tp.py index 19c0869937d..74f5b2ad9e3 100644 --- a/tools/tp.py +++ b/tools/tp.py @@ -317,7 +317,7 @@ def setup(debug: bool, game_path: Path, tools_path: Path): os.chdir(str(game_path.absolute())) extract_game_assets.extract("../" + str(iso)) os.chdir(previous_dir) - except e as Exception: + except Exception as e: LOG.error(f"failure:") LOG.error(e) sys.exit(1) From 9ac12694738c26c62ace64156e3d874dde77e555 Mon Sep 17 00:00:00 2001 From: Jcw87 Date: Wed, 25 Jan 2023 23:17:45 -0800 Subject: [PATCH 2/4] libarc/arc.py: explicitly specify utf-8 encoding when opening text files --- tools/libarc/arc.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/libarc/arc.py b/tools/libarc/arc.py index 6c5e927bed1..48c39c6ba31 100644 --- a/tools/libarc/arc.py +++ b/tools/libarc/arc.py @@ -249,7 +249,7 @@ def extract_to_directory(directory, data, write_function): fileDataLines = files_data.splitlines() # fileDataLines.sort(key=lambda x : int(x.split(":")[0])) - filesFile = open("_files.txt", "w") + filesFile = open("_files.txt", "w", encoding="utf-8") for line in fileDataLines: filesFile.write(line + "\n") os.chdir(cwd) @@ -384,7 +384,7 @@ def parseDirForPack( def convert_dir_to_arc(sourceDir, convertFunction): # print("Converting "+str(sourceDir)) - fileData = open(sourceDir / "_files.txt", "r").read() + fileData = open(sourceDir / "_files.txt", "r", encoding="utf-8").read() fileDataLinesFull = fileData.splitlines() # fileDataLinesFull.sort(key=lambda x : int(x.split(":")[0])) From e786c7dd3a29767474117067ccb04290a982519f Mon Sep 17 00:00:00 2001 From: Jcw87 Date: Wed, 25 Jan 2023 23:31:11 -0800 Subject: [PATCH 3/4] libarc/arc.py: Check if directories already exist before creating --- tools/libarc/arc.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/tools/libarc/arc.py b/tools/libarc/arc.py index 48c39c6ba31..f57ea2ae536 100644 --- a/tools/libarc/arc.py +++ b/tools/libarc/arc.py @@ -194,7 +194,9 @@ def read(buffer) -> RARC: def extract_node(node, arcData, write_function, parentDir, dirNames) -> str: - os.mkdir(Path(parentDir) / node.name) + nodeDir = Path(parentDir) / node.name + if not os.path.exists(nodeDir): + os.mkdir(nodeDir) for i in range(node.directory_index, node.directory_count + node.directory_index): dir = arcData._directories[i] dirNames[i] = str(Path(parentDir) / Path(node.name)) + "/" + dir.name @@ -219,7 +221,8 @@ def extract_node(node, arcData, write_function, parentDir, dirNames) -> str: def extract_to_directory(directory, data, write_function): print("Extracting " + str(directory)) - os.mkdir(directory) + if not os.path.exists(directory): + os.mkdir(directory) arcData = read(data) cwd = os.getcwd() os.chdir(directory) From 10ebe01a42ebaae7664d19f8a8bd8ae1346727d1 Mon Sep 17 00:00:00 2001 From: Jcw87 Date: Thu, 26 Jan 2023 00:56:58 -0800 Subject: [PATCH 4/4] libarc/arc.py: use unix paths for _files.txt --- tools/libarc/arc.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/libarc/arc.py b/tools/libarc/arc.py index f57ea2ae536..ce895ba989f 100644 --- a/tools/libarc/arc.py +++ b/tools/libarc/arc.py @@ -8,7 +8,7 @@ import struct import os import ctypes -from pathlib import Path +from pathlib import Path, PurePosixPath from dataclasses import dataclass, field from typing import List, Dict @@ -199,7 +199,7 @@ def extract_node(node, arcData, write_function, parentDir, dirNames) -> str: os.mkdir(nodeDir) for i in range(node.directory_index, node.directory_count + node.directory_index): dir = arcData._directories[i] - dirNames[i] = str(Path(parentDir) / Path(node.name)) + "/" + dir.name + dirNames[i] = str(PurePosixPath(parentDir) / PurePosixPath(node.name)) + "/" + dir.name if type(dir) == Folder and dir.name != "." and dir.name != "..": for j, node2 in enumerate(arcData._nodes): if dir.data_offset == j: @@ -213,7 +213,7 @@ def extract_node(node, arcData, write_function, parentDir, dirNames) -> str: break elif type(dir) == File: dirNames[i] = write_function( - Path(parentDir) / Path(node.name) / dir.name, dir.data + PurePosixPath(parentDir) / PurePosixPath(node.name) / dir.name, dir.data ) return dirNames