Updated info to accept more files as valid

tmd.bin, tmd.*, ticket.bin, cetk, and any file with a proper WAD header will now be accepted by the info command.
boot2 WADs will now hide the required IOS and show boot2vX next to the title version instead.
This commit is contained in:
Campbell 2024-11-17 19:16:44 -05:00
parent 8a050ff8f6
commit f9739eab58
Signed by: NinjaCheetah
GPG Key ID: 670C282B3291D63D

View File

@ -1,8 +1,9 @@
# "commands/title/info.py" from WiiPy by NinjaCheetah
# https://github.com/NinjaCheetah/WiiPy
import pathlib
import binascii
import pathlib
import re
import libWiiPy
from modules.core import fatal_error
@ -15,14 +16,19 @@ def _print_tmd_info(tmd: libWiiPy.title.TMD):
except UnicodeDecodeError:
print(f" Title ID: {tmd.title_id.upper()}")
# This type of version number really only applies to the System Menu and IOS.
if tmd.title_id[:8] == "00000001":
print(f" Title Version: {tmd.title_version} ({tmd.title_version_converted})")
if tmd.title_id.startswith("00000001"):
if tmd.title_id == "0000000100000001":
print(f" Title Version: {tmd.title_version} (boot2v{tmd.title_version})")
else:
print(f" Title Version: {tmd.title_version} ({tmd.title_version_converted})")
else:
print(f" Title Version: {tmd.title_version}")
print(f" TMD Version: {tmd.tmd_version}")
# IOSes just have an all-zero TID, so don't bothering showing that.
if tmd.ios_tid == "0000000000000000":
print(f" Required IOS: N/A")
elif tmd.title_id == "0000000100000001":
pass
else:
print(f" Required IOS: IOS{int(tmd.ios_tid[-2:], 16)} ({tmd.ios_tid.upper()})")
if tmd.signature_issuer.find("CP00000004") != -1:
@ -80,7 +86,7 @@ def _print_ticket_info(ticket: libWiiPy.title.Ticket):
except UnicodeDecodeError:
print(f" Title ID: {ticket.title_id.decode().upper()}")
# This type of version number really only applies to the System Menu and IOS.
if ticket.title_id.decode()[:8] == "00000001":
if ticket.title_id.decode().startswith("00000001"):
print(f" Title Version: {ticket.title_version} "
f"({libWiiPy.title.title_ver_dec_to_standard(ticket.title_version, ticket.title_id.decode())})")
else:
@ -146,17 +152,26 @@ def handle_info(args):
if not input_path.exists():
fatal_error(f"The specified input file \"{input_path}\" does not exist!")
if input_path.suffix.lower() == ".tmd":
if (input_path.suffix.lower() == ".tmd" or input_path.name == "tmd.bin" or
re.match("tmd.?[0-9]*", input_path.name)):
tmd = libWiiPy.title.TMD()
tmd.load(open(input_path, "rb").read())
tmd.load(input_path.read_bytes())
_print_tmd_info(tmd)
elif input_path.suffix.lower() == ".tik":
elif input_path.suffix.lower() == ".tik" or input_path.name == "ticket.bin" or input_path.name == "cetk":
tik = libWiiPy.title.Ticket()
tik.load(open(input_path, "rb").read())
tik.load(input_path.read_bytes())
_print_ticket_info(tik)
elif input_path.suffix.lower() == ".wad":
title = libWiiPy.title.Title()
title.load_wad(open(input_path, "rb").read())
title.load_wad(input_path.read_bytes())
_print_wad_info(title)
else:
fatal_error("This does not appear to be a TMD, Ticket, or WAD! No information can be provided.")
# Try file types that have a matchable magic number if we can't tell the easy way.
magic_number = open(input_path, "rb").read(8)
if magic_number == b'\x00\x00\x00\x20\x49\x73\x00\x00' or magic_number == b'\x00\x00\x00\x20\x69\x62\x00\x00':
title = libWiiPy.title.Title()
title.load_wad(input_path.read_bytes())
_print_wad_info(title)
return
else:
fatal_error("This does not appear to be a supported file type! No info can be provided.")