max-patcher-privacy/scripts/update_signatures.py

76 lines
2.5 KiB
Python

# NOTE: THIS SCRIPT IS FOR ME TO EASILY UPDATE THE METHOD SIGNATURES (OFFSETS)
# THIS IS NOT USED IN THE WORKFLOW
import os
import re
script_dir = os.path.dirname(__file__)
PATCHES_DIR = os.path.join(script_dir, "..", "patches")
SNIPPET_FILES_TO_UPDATE = [
]
NEW_TARGET_FILENAMES = [
]
NEW_METHOD_SIGNATURES = [
]
def update_snippets():
if not SNIPPET_FILES_TO_UPDATE or not NEW_METHOD_SIGNATURES:
print("[E] The snippet/signature lists in the script are empty. Please fill them out.")
return
if not (len(SNIPPET_FILES_TO_UPDATE) == len(NEW_METHOD_SIGNATURES) == len(NEW_TARGET_FILENAMES)):
print("[E] Error: The number of items in the three lists do not match.")
print(f" Files: {len(SNIPPET_FILES_TO_UPDATE)}, Filenames: {len(NEW_TARGET_FILENAMES)}, Signatures: {len(NEW_METHOD_SIGNATURES)}")
return
print(f"[I] Starting update for {len(SNIPPET_FILES_TO_UPDATE)} snippet files...")
for snippet_name, new_filename, new_signature in zip(SNIPPET_FILES_TO_UPDATE, NEW_TARGET_FILENAMES, NEW_METHOD_SIGNATURES):
print(f" -> Processing: {snippet_name}")
original_path = os.path.join(PATCHES_DIR, "original", snippet_name)
patched_path = os.path.join(PATCHES_DIR, "patched", snippet_name)
try:
new_original_content = ""
if new_filename:
new_original_content = f'@FileName("{new_filename}")\n'
new_original_content += new_signature
with open(original_path, 'w', encoding='utf-8') as f:
f.write(new_original_content)
print(f" - Updated original snippet: {original_path}")
except FileNotFoundError:
print(f" [W] Original snippet not found, skipping: {original_path}")
continue
try:
with open(patched_path, 'r', encoding='utf-8') as f:
patched_content = f.read()
new_patched_content = re.sub(
r"^\.method.*",
new_signature,
patched_content,
count=1,
flags=re.MULTILINE
)
with open(patched_path, 'w', encoding='utf-8') as f:
f.write(new_patched_content)
print(f" - Updated patched snippet: {patched_path}")
except FileNotFoundError:
print(f" [W] Patched snippet not found, skipping: {patched_path}")
print("\n[I] Snippet update process complete.")
if __name__ == "__main__":
update_snippets()