mirror of
https://github.com/NinjaCheetah/libWiiPy.git
synced 2025-04-27 22:01:01 -04:00
Fix handling of title and content types in tmd module
This commit is contained in:
parent
415af7b8b8
commit
7edf764768
@ -43,7 +43,7 @@ class TMD:
|
|||||||
self.ios_tid: str = "" # The Title ID of the IOS version the associated title runs on.
|
self.ios_tid: str = "" # The Title ID of the IOS version the associated title runs on.
|
||||||
self.ios_version: int = 0 # The IOS version the associated title runs on.
|
self.ios_version: int = 0 # The IOS version the associated title runs on.
|
||||||
self.title_id: str = "" # The Title ID of the associated title.
|
self.title_id: str = "" # The Title ID of the associated title.
|
||||||
self.content_type: str = "" # The type of content contained within the associated title.
|
self.title_type: str = "" # The type of the associated title.
|
||||||
self.group_id: int = 0 # The ID of the publisher of the associated title.
|
self.group_id: int = 0 # The ID of the publisher of the associated title.
|
||||||
self.region: int = 0 # The ID of the region of the associated title.
|
self.region: int = 0 # The ID of the region of the associated title.
|
||||||
self.ratings: bytes = b'' # The parental controls rating of the associated title.
|
self.ratings: bytes = b'' # The parental controls rating of the associated title.
|
||||||
@ -109,7 +109,7 @@ class TMD:
|
|||||||
tmd_data.seek(0x194)
|
tmd_data.seek(0x194)
|
||||||
content_type_bin = tmd_data.read(4)
|
content_type_bin = tmd_data.read(4)
|
||||||
content_type_hex = binascii.hexlify(content_type_bin)
|
content_type_hex = binascii.hexlify(content_type_bin)
|
||||||
self.content_type = str(content_type_hex.decode())
|
self.title_type = str(content_type_hex.decode())
|
||||||
# Publisher of the title.
|
# Publisher of the title.
|
||||||
tmd_data.seek(0x198)
|
tmd_data.seek(0x198)
|
||||||
self.group_id = int.from_bytes(tmd_data.read(2))
|
self.group_id = int.from_bytes(tmd_data.read(2))
|
||||||
@ -190,7 +190,7 @@ class TMD:
|
|||||||
# Title's Title ID.
|
# Title's Title ID.
|
||||||
tmd_data += binascii.unhexlify(self.title_id)
|
tmd_data += binascii.unhexlify(self.title_id)
|
||||||
# Content type.
|
# Content type.
|
||||||
tmd_data += binascii.unhexlify(self.content_type)
|
tmd_data += binascii.unhexlify(self.title_type)
|
||||||
# Group ID.
|
# Group ID.
|
||||||
tmd_data += int.to_bytes(self.group_id, 2)
|
tmd_data += int.to_bytes(self.group_id, 2)
|
||||||
# 2 bytes of zero for reasons.
|
# 2 bytes of zero for reasons.
|
||||||
@ -263,7 +263,7 @@ class TMD:
|
|||||||
Gets the region of the TMD's associated title.
|
Gets the region of the TMD's associated title.
|
||||||
|
|
||||||
Can be one of several possible values:
|
Can be one of several possible values:
|
||||||
'JAP', 'USA', 'EUR', 'WORLD', or 'KOR'.
|
'Japan', 'North America', 'Europe', 'World', or 'Korea'.
|
||||||
|
|
||||||
Returns
|
Returns
|
||||||
-------
|
-------
|
||||||
@ -272,29 +272,15 @@ class TMD:
|
|||||||
"""
|
"""
|
||||||
match self.region:
|
match self.region:
|
||||||
case 0:
|
case 0:
|
||||||
return "JAP"
|
return "Japan"
|
||||||
case 1:
|
case 1:
|
||||||
return "USA"
|
return "North America"
|
||||||
case 2:
|
case 2:
|
||||||
return "EUR"
|
return "Europe"
|
||||||
case 3:
|
case 3:
|
||||||
return "WORLD"
|
return "World"
|
||||||
case 4:
|
case 4:
|
||||||
return "KOR"
|
return "Korea"
|
||||||
|
|
||||||
def get_is_vwii_title(self) -> bool:
|
|
||||||
"""
|
|
||||||
Gets whether the TMD is designed for the vWii or not.
|
|
||||||
|
|
||||||
Returns
|
|
||||||
-------
|
|
||||||
bool
|
|
||||||
If the title is for vWii.
|
|
||||||
"""
|
|
||||||
if self.vwii == 1:
|
|
||||||
return True
|
|
||||||
else:
|
|
||||||
return False
|
|
||||||
|
|
||||||
def get_title_type(self) -> str:
|
def get_title_type(self) -> str:
|
||||||
"""
|
"""
|
||||||
@ -308,8 +294,7 @@ class TMD:
|
|||||||
str
|
str
|
||||||
The type of the title.
|
The type of the title.
|
||||||
"""
|
"""
|
||||||
title_id_high = self.title_id[:8]
|
match self.title_type:
|
||||||
match title_id_high:
|
|
||||||
case '00000001':
|
case '00000001':
|
||||||
return "System"
|
return "System"
|
||||||
case '00010000':
|
case '00010000':
|
||||||
@ -327,28 +312,40 @@ class TMD:
|
|||||||
case _:
|
case _:
|
||||||
return "Unknown"
|
return "Unknown"
|
||||||
|
|
||||||
def get_content_type(self):
|
def get_content_type(self, content_index: int) -> str:
|
||||||
"""
|
"""
|
||||||
Gets the type of content contained in the TMD's associated title.
|
Gets the type of content contained in the TMD's associated title.
|
||||||
|
|
||||||
Can be one of several possible values:
|
Can be one of several possible values:
|
||||||
'Normal', 'Development/Unknown', 'Hash Tree', 'DLC', or 'Shared'
|
'Normal', 'Development/Unknown', 'Hash Tree', 'DLC', or 'Shared'
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
content_index : int
|
||||||
|
The index of the content you want the type of.
|
||||||
|
|
||||||
Returns
|
Returns
|
||||||
-------
|
-------
|
||||||
str
|
str
|
||||||
The type of content.
|
The type of content.
|
||||||
"""
|
"""
|
||||||
match self.content_type:
|
# Get a list of the current content indices, so we can make sure the target one exists. Doing it this way
|
||||||
case '00000001':
|
# ensures we can find the target, even if the highest content index is greater than the highest literal index.
|
||||||
|
current_indices = []
|
||||||
|
for record in self.content_records:
|
||||||
|
current_indices.append(record.index)
|
||||||
|
# This is the literal index in the list of content that we're going to get.
|
||||||
|
target_index = current_indices.index(content_index)
|
||||||
|
match self.content_records[target_index].content_type:
|
||||||
|
case 1:
|
||||||
return "Normal"
|
return "Normal"
|
||||||
case '00000002':
|
case 2:
|
||||||
return "Development/Unknown"
|
return "Development/Unknown"
|
||||||
case '00000003':
|
case 3:
|
||||||
return "Hash Tree"
|
return "Hash Tree"
|
||||||
case '00004001':
|
case 16385:
|
||||||
return "DLC"
|
return "DLC"
|
||||||
case '00008001':
|
case 32769:
|
||||||
return "Shared"
|
return "Shared"
|
||||||
case _:
|
case _:
|
||||||
return "Unknown"
|
return "Unknown"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user