mirror of
https://github.com/NinjaCheetah/WiiPy.git
synced 2025-04-27 05:41:01 -04:00
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:
parent
8a050ff8f6
commit
f9739eab58
@ -1,8 +1,9 @@
|
|||||||
# "commands/title/info.py" from WiiPy by NinjaCheetah
|
# "commands/title/info.py" from WiiPy by NinjaCheetah
|
||||||
# https://github.com/NinjaCheetah/WiiPy
|
# https://github.com/NinjaCheetah/WiiPy
|
||||||
|
|
||||||
import pathlib
|
|
||||||
import binascii
|
import binascii
|
||||||
|
import pathlib
|
||||||
|
import re
|
||||||
import libWiiPy
|
import libWiiPy
|
||||||
from modules.core import fatal_error
|
from modules.core import fatal_error
|
||||||
|
|
||||||
@ -15,14 +16,19 @@ def _print_tmd_info(tmd: libWiiPy.title.TMD):
|
|||||||
except UnicodeDecodeError:
|
except UnicodeDecodeError:
|
||||||
print(f" Title ID: {tmd.title_id.upper()}")
|
print(f" Title ID: {tmd.title_id.upper()}")
|
||||||
# This type of version number really only applies to the System Menu and IOS.
|
# This type of version number really only applies to the System Menu and IOS.
|
||||||
if tmd.title_id[:8] == "00000001":
|
if tmd.title_id.startswith("00000001"):
|
||||||
print(f" Title Version: {tmd.title_version} ({tmd.title_version_converted})")
|
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:
|
else:
|
||||||
print(f" Title Version: {tmd.title_version}")
|
print(f" Title Version: {tmd.title_version}")
|
||||||
print(f" TMD Version: {tmd.tmd_version}")
|
print(f" TMD Version: {tmd.tmd_version}")
|
||||||
# IOSes just have an all-zero TID, so don't bothering showing that.
|
# IOSes just have an all-zero TID, so don't bothering showing that.
|
||||||
if tmd.ios_tid == "0000000000000000":
|
if tmd.ios_tid == "0000000000000000":
|
||||||
print(f" Required IOS: N/A")
|
print(f" Required IOS: N/A")
|
||||||
|
elif tmd.title_id == "0000000100000001":
|
||||||
|
pass
|
||||||
else:
|
else:
|
||||||
print(f" Required IOS: IOS{int(tmd.ios_tid[-2:], 16)} ({tmd.ios_tid.upper()})")
|
print(f" Required IOS: IOS{int(tmd.ios_tid[-2:], 16)} ({tmd.ios_tid.upper()})")
|
||||||
if tmd.signature_issuer.find("CP00000004") != -1:
|
if tmd.signature_issuer.find("CP00000004") != -1:
|
||||||
@ -80,7 +86,7 @@ def _print_ticket_info(ticket: libWiiPy.title.Ticket):
|
|||||||
except UnicodeDecodeError:
|
except UnicodeDecodeError:
|
||||||
print(f" Title ID: {ticket.title_id.decode().upper()}")
|
print(f" Title ID: {ticket.title_id.decode().upper()}")
|
||||||
# This type of version number really only applies to the System Menu and IOS.
|
# 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} "
|
print(f" Title Version: {ticket.title_version} "
|
||||||
f"({libWiiPy.title.title_ver_dec_to_standard(ticket.title_version, ticket.title_id.decode())})")
|
f"({libWiiPy.title.title_ver_dec_to_standard(ticket.title_version, ticket.title_id.decode())})")
|
||||||
else:
|
else:
|
||||||
@ -146,17 +152,26 @@ def handle_info(args):
|
|||||||
if not input_path.exists():
|
if not input_path.exists():
|
||||||
fatal_error(f"The specified input file \"{input_path}\" does not exist!")
|
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 = libWiiPy.title.TMD()
|
||||||
tmd.load(open(input_path, "rb").read())
|
tmd.load(input_path.read_bytes())
|
||||||
_print_tmd_info(tmd)
|
_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 = libWiiPy.title.Ticket()
|
||||||
tik.load(open(input_path, "rb").read())
|
tik.load(input_path.read_bytes())
|
||||||
_print_ticket_info(tik)
|
_print_ticket_info(tik)
|
||||||
elif input_path.suffix.lower() == ".wad":
|
elif input_path.suffix.lower() == ".wad":
|
||||||
title = libWiiPy.title.Title()
|
title = libWiiPy.title.Title()
|
||||||
title.load_wad(open(input_path, "rb").read())
|
title.load_wad(input_path.read_bytes())
|
||||||
_print_wad_info(title)
|
_print_wad_info(title)
|
||||||
else:
|
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.")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user