2012-08-21 19:28:14 +02:00
|
|
|
#-*- coding: utf-8 -*-
|
|
|
|
"""
|
|
|
|
module storing a titleid dictionary
|
|
|
|
"""
|
|
|
|
import binascii, re
|
|
|
|
from PyQt4.QtCore import QT_TR_NOOP
|
|
|
|
|
2012-08-21 20:06:52 +02:00
|
|
|
|
|
|
|
def sorted_copy(alist):
|
|
|
|
# inspired by Alex Martelli
|
|
|
|
# http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/52234
|
|
|
|
indices = map(_generate_index, alist)
|
|
|
|
decorated = zip(indices, alist)
|
|
|
|
decorated.sort()
|
|
|
|
return [ item for index, item in decorated ]
|
|
|
|
|
|
|
|
def _generate_index(str):
|
|
|
|
"""
|
|
|
|
Splits a string into alpha and numeric elements, which
|
|
|
|
is used as an index for sorting"
|
|
|
|
"""
|
|
|
|
#
|
|
|
|
# the index is built progressively
|
|
|
|
# using the _append function
|
|
|
|
#
|
|
|
|
index = []
|
|
|
|
def _append(fragment, alist=index):
|
|
|
|
if fragment.isdigit(): fragment = int(fragment)
|
|
|
|
alist.append(fragment)
|
|
|
|
|
|
|
|
# initialize loop
|
|
|
|
prev_isdigit = str[0].isdigit()
|
|
|
|
current_fragment = ''
|
|
|
|
# group a string into digit and non-digit parts
|
|
|
|
for char in str:
|
|
|
|
curr_isdigit = char.isdigit()
|
|
|
|
if curr_isdigit == prev_isdigit:
|
|
|
|
current_fragment += char
|
|
|
|
else:
|
|
|
|
_append(current_fragment)
|
|
|
|
current_fragment = char
|
|
|
|
prev_isdigit = curr_isdigit
|
|
|
|
_append(current_fragment)
|
|
|
|
return tuple(index)
|
|
|
|
|
2012-08-22 22:29:02 +02:00
|
|
|
def swap_dic(original_dict):
|
|
|
|
####################### Swap Keys and Values of a dictionary ######################
|
|
|
|
return dict([(v, k) for (k, v) in original_dict.iteritems()])
|
|
|
|
|
2012-08-23 13:35:48 +02:00
|
|
|
SupportedRegions = [ "JAP", "USA", "PAL" ]
|
|
|
|
|
2012-08-21 19:28:14 +02:00
|
|
|
TitleDict = {
|
2012-11-25 18:02:30 +01:00
|
|
|
"BC":"0000000100000100",
|
|
|
|
"MIOS":"0000000100000101",
|
2012-08-21 19:28:14 +02:00
|
|
|
"IOS4":"0000000100000004",
|
|
|
|
"IOS9":"0000000100000009",
|
|
|
|
"IOS10":"000000010000000a",
|
|
|
|
"IOS11":"000000010000000b",
|
|
|
|
"IOS12":"000000010000000c",
|
|
|
|
"IOS13":"000000010000000d",
|
|
|
|
"IOS14":"000000010000000e",
|
|
|
|
"IOS15":"000000010000000f",
|
|
|
|
"IOS16":"0000000100000010",
|
|
|
|
"IOS17":"0000000100000011",
|
|
|
|
"IOS20":"0000000100000014",
|
|
|
|
"IOS21":"0000000100000015",
|
|
|
|
"IOS22":"0000000100000016",
|
|
|
|
"IOS28":"000000010000001c",
|
|
|
|
"IOS30":"000000010000001e",
|
|
|
|
"IOS31":"000000010000001f",
|
|
|
|
"IOS33":"0000000100000021",
|
|
|
|
"IOS34":"0000000100000022",
|
|
|
|
"IOS35":"0000000100000023",
|
|
|
|
"IOS36":"0000000100000024",
|
|
|
|
"IOS37":"0000000100000025",
|
|
|
|
"IOS38":"0000000100000026",
|
2012-08-21 19:29:25 +02:00
|
|
|
"IOS40":"0000000100000028",
|
|
|
|
"IOS41":"0000000100000029",
|
|
|
|
"IOS43":"000000010000002b",
|
|
|
|
"IOS45":"000000010000002d",
|
|
|
|
"IOS46":"000000010000002f",
|
|
|
|
"IOS48":"0000000100000030",
|
2012-08-21 19:28:14 +02:00
|
|
|
"IOS50":"0000000100000032",
|
|
|
|
"IOS51":"0000000100000033",
|
2012-08-21 19:29:25 +02:00
|
|
|
"IOS52":"0000000100000034",
|
2012-08-21 19:28:14 +02:00
|
|
|
"IOS53":"0000000100000035",
|
|
|
|
"IOS55":"0000000100000037",
|
2012-08-21 19:29:25 +02:00
|
|
|
"IOS56":"0000000100000038",
|
|
|
|
"IOS57":"0000000100000039",
|
|
|
|
"IOS58":"000000010000003a",
|
2012-08-21 19:28:14 +02:00
|
|
|
"IOS60":"000000010000003c",
|
|
|
|
"IOS61":"000000010000003d",
|
2012-11-10 17:58:32 +01:00
|
|
|
"IOS62":"000000010000003e",
|
2012-08-21 19:29:25 +02:00
|
|
|
"IOS70":"0000000100000046",
|
|
|
|
"IOS80":"0000000100000050", }
|
|
|
|
|
2012-08-22 22:29:02 +02:00
|
|
|
TitleSwapDict = swap_dic(TitleDict)
|
|
|
|
|
2012-11-25 19:31:25 +01:00
|
|
|
ChannelCLIDict = {
|
|
|
|
"boot":"BOOT2",
|
|
|
|
"bbciplayer":"BBC iPlayer",
|
|
|
|
"systemmenu":"System Menu",
|
|
|
|
"checkmiiout":"Check Mii Out",
|
|
|
|
"digicamprint":"Digicam Print",
|
|
|
|
"eula":"EULA",
|
|
|
|
"everyonevotes":"Everyone Votes",
|
|
|
|
"jamwiththeband":"Jam With The Band",
|
|
|
|
"japanfoodservice":"Japan Food Service",
|
|
|
|
"mii":"Mii Channel",
|
|
|
|
"news":"News",
|
|
|
|
"nintendo":"Nintendo",
|
|
|
|
"opera":"Opera",
|
|
|
|
"photo":"Photo",
|
|
|
|
"photo11":"Photo 1.1",
|
|
|
|
"regionselect":"Region Select",
|
|
|
|
"shashin":"Shashin Channel",
|
|
|
|
"shop":"Shop",
|
|
|
|
"todaytomorrow":"Today & Tomorrow",
|
|
|
|
"tvfriend":"TV Friend / G-Guide",
|
|
|
|
"weather":"Weather",
|
|
|
|
"wiinoma":"Wii No Ma",
|
|
|
|
"wiispeak":"Wii Speak"
|
|
|
|
}
|
|
|
|
|
2012-08-23 13:35:48 +02:00
|
|
|
ChannelJAPDict = {
|
2012-08-21 20:46:05 +02:00
|
|
|
"BOOT2":"0000000100000001",
|
2012-08-23 13:35:48 +02:00
|
|
|
"System Menu":"0000000100000002",
|
|
|
|
"Check Mii Out":"000100014841504A",
|
|
|
|
"Digicam Print":"000100014843444A",
|
|
|
|
"EULA":"0001000848414B4A",
|
|
|
|
"Everyone Votes":"0001000148414A4A",
|
|
|
|
"Jam With The Band":"000100014843414A",
|
|
|
|
"Japan Food Service":"000100084843434A",
|
|
|
|
"Mii Channel":"0001000248414341",
|
2012-08-21 21:25:58 +02:00
|
|
|
"News":"0001000248414741",
|
2012-08-23 13:35:48 +02:00
|
|
|
"Nintendo":"000100014841544A",
|
|
|
|
"Opera":"000100014841444A",
|
|
|
|
"Photo":"0001000248414141",
|
|
|
|
"Photo 1.1":"000100024841594A",
|
|
|
|
"Region Select":"0001000848414C4A",
|
|
|
|
"Shashin Channel":"000100014843424A",
|
2012-11-10 20:00:11 +01:00
|
|
|
"Shop":"0001000248414241",
|
2012-08-23 13:35:48 +02:00
|
|
|
"Today & Tomorrow":"000100014841564A",
|
|
|
|
"TV Friend / G-Guide":"0001000148424E4A",
|
|
|
|
"Weather":"000100024841464A",
|
|
|
|
"Wii No Ma":"000100014843494A",
|
2013-06-17 19:37:36 +02:00
|
|
|
"Wii Speak":"000100014843464A",
|
|
|
|
"YouTube":"000100014843584A"
|
2012-08-21 19:28:14 +02:00
|
|
|
}
|
|
|
|
|
2012-08-23 13:35:48 +02:00
|
|
|
ChannelJAPVerDict = {
|
2012-08-21 19:29:25 +02:00
|
|
|
"BOOT2":"4",
|
2012-08-23 13:35:48 +02:00
|
|
|
"System Menu":"128 2.0, 192 2.1, 224 3.0, 256 3.1, 288 3.2,\
|
2012-08-21 19:29:25 +02:00
|
|
|
\n352 3.3, 384 3.4, 416 4.0, 448 4.1, 480 4.2,\n512 4.3",
|
2012-08-23 13:35:48 +02:00
|
|
|
"Check Mii Out":"1, 3, 512",
|
|
|
|
"Digicam Print":"latest",
|
2012-11-10 18:20:43 +01:00
|
|
|
"EULA":"1, 2, 3",
|
2012-08-23 13:35:48 +02:00
|
|
|
"Everyone Votes":"latest",
|
|
|
|
"Japan Food Service":"latest",
|
|
|
|
"Jam With The Band":"latest",
|
|
|
|
"Mii Channel":"2, 3, 4, 5, 6",
|
2012-11-10 18:20:43 +01:00
|
|
|
"News":"3, 6, 7",
|
2012-08-23 13:35:48 +02:00
|
|
|
"Nintendo":"latest",
|
|
|
|
"Opera":"1, 3, 257, 512, 1024",
|
|
|
|
"Photo":"1, 2",
|
2012-11-10 18:20:43 +01:00
|
|
|
"Photo 1.1":"1, 2, 3",
|
|
|
|
"Region Select":"1, 2",
|
2012-08-23 13:35:48 +02:00
|
|
|
"Shashin Channel":"latest",
|
2012-11-10 17:58:32 +01:00
|
|
|
"Shop":"3, 4, 5, 6, 7, 8, 10, 13, 16,\n17, 18, 19, 20, 21",
|
2012-08-23 13:35:48 +02:00
|
|
|
"Today & Tomorrow":"latest",
|
|
|
|
"TV Friend / G-Guide":"latest",
|
|
|
|
"Weather":"3, 6, 7",
|
|
|
|
"Wii No Ma":"latest",
|
2013-06-17 19:37:36 +02:00
|
|
|
"Wii Speak":"1, 256, 512",
|
|
|
|
"YouTube":"7"
|
2012-08-23 13:35:48 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
ChannelPALDict = {
|
|
|
|
"BOOT2":"0000000100000001",
|
|
|
|
"System Menu":"0000000100000002",
|
|
|
|
"BBC iPlayer":"0001000148434A50",
|
|
|
|
"Check Mii Out":"0001000148415050",
|
|
|
|
"EULA":"0001000848414B50",
|
|
|
|
"Everyone Votes":"0001000148414A50",
|
|
|
|
"Jam With The Band":"0001000148434150",
|
|
|
|
"Mii Channel":"0001000248414341",
|
|
|
|
"News":"0001000248414741",
|
|
|
|
"Nintendo":"0001000148415450",
|
|
|
|
"Opera":"0001000148414450",
|
|
|
|
"Photo":"0001000248414141",
|
|
|
|
"Photo 1.1":"0001000248415950",
|
|
|
|
"Region Select":"0001000848414C50",
|
2012-11-10 20:00:11 +01:00
|
|
|
"Shop":"0001000248414241",
|
2012-08-23 13:35:48 +02:00
|
|
|
"Today & Tomorrow":"0001000148415650",
|
|
|
|
"Weather":"0001000248414650",
|
2013-06-17 19:37:36 +02:00
|
|
|
"Wii Speak":"0001000148434650",
|
|
|
|
"YouTube":"0001000148435850"
|
2012-08-23 13:35:48 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
ChannelPALVerDict = {
|
|
|
|
"BOOT2":"4",
|
|
|
|
"System Menu":"130 2.0, 162 2.1, 194 2.2, 226 3.0, 257 3.1,\
|
2012-08-21 19:29:25 +02:00
|
|
|
\n290 3.2, 354 3.3, 386 3.4, 418 4.0, 450 4.1,\n482 4.2, 514 4.3",
|
2012-08-23 13:35:48 +02:00
|
|
|
"BBC iPlayer":"latest",
|
2012-11-10 18:20:43 +01:00
|
|
|
"Check Mii Out":"1, 3, 512",
|
|
|
|
"EULA":"1, 2, 3",
|
2012-08-23 13:35:48 +02:00
|
|
|
"Everyone Votes":"latest",
|
|
|
|
"Jam With The Band":"latest",
|
|
|
|
"Mii Channel":"2, 3, 4, 5, 6",
|
2012-11-10 18:20:43 +01:00
|
|
|
"News":"3, 6, 7",
|
2012-08-23 13:35:48 +02:00
|
|
|
"Nintendo":"latest",
|
|
|
|
"Opera":"1, 3, 257, 512, 1024",
|
|
|
|
"Photo":"1, 2",
|
2012-11-10 18:20:43 +01:00
|
|
|
"Photo 1.1":"1, 2, 3",
|
|
|
|
"Region Select":"1, 2",
|
2012-11-10 17:58:32 +01:00
|
|
|
"Shop":"3, 4, 5, 6, 7, 8, 10, 13, 16,\n17, 18, 19, 20, 21",
|
2012-08-23 13:35:48 +02:00
|
|
|
"Today & Tomorrow":"latest",
|
|
|
|
"Weather":"3, 6, 7",
|
2013-06-17 19:37:36 +02:00
|
|
|
"Wii Speak":"1, 256, 512",
|
|
|
|
"YouTube":"1, 258"
|
2012-08-23 13:35:48 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
ChannelUSADict = {
|
|
|
|
"BOOT2":"0000000100000001",
|
|
|
|
"System Menu":"0000000100000002",
|
|
|
|
"Check Mii Out":"0001000148415045",
|
|
|
|
"EULA":"0001000848414B45",
|
|
|
|
"Everyone Votes":"0001000148414A45",
|
|
|
|
"Jam With The Band":"0001000148434145",
|
|
|
|
"Mii Channel":"0001000248414341",
|
|
|
|
"News":"0001000248414741",
|
|
|
|
"Nintendo":"0001000148415445",
|
|
|
|
"Opera":"0001000148414445",
|
|
|
|
"Photo":"0001000248414141",
|
|
|
|
"Photo 1.1":"0001000248415945",
|
|
|
|
"Region Select":"0001000848414C45",
|
2012-11-10 20:00:11 +01:00
|
|
|
"Shop":"0001000248414241",
|
2012-08-23 13:35:48 +02:00
|
|
|
"Today & Tomorrow":"0001000148415645",
|
|
|
|
"Weather":"0001000248414645",
|
2013-06-17 19:37:36 +02:00
|
|
|
"Wii Speak":"0001000148434645",
|
|
|
|
"YouTube":"0001000148435845"
|
2012-08-23 13:35:48 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
ChannelUSAVerDict = {
|
|
|
|
"BOOT2":"4",
|
|
|
|
"System Menu":"97 2.0, 193 2.2, 225 3.0, 257 3.1, 289 3.2,\
|
2012-08-21 19:29:25 +02:00
|
|
|
\n353 3.3, 385 3.4, 417 4.0, 449 4.1, 481 4.2,\n513 4.3",
|
2012-11-10 18:20:43 +01:00
|
|
|
"Check Mii Out":"1, 3, 512",
|
|
|
|
"EULA":"1, 2, 3",
|
2012-08-23 13:35:48 +02:00
|
|
|
"Everyone Votes":"latest",
|
|
|
|
"Jam With The Band":"latest",
|
|
|
|
"Mii Channel":"2, 3, 4, 5, 6",
|
2012-11-10 18:20:43 +01:00
|
|
|
"News":"3, 6, 7",
|
2012-08-23 13:35:48 +02:00
|
|
|
"Nintendo":"latest",
|
|
|
|
"Opera":"1, 3, 257, 512, 1024",
|
|
|
|
"Photo":"1, 2",
|
2012-11-10 18:20:43 +01:00
|
|
|
"Photo 1.1":"1, 2, 3",
|
|
|
|
"Region Select":"1, 2",
|
2012-11-10 17:58:32 +01:00
|
|
|
"Shop":"3, 4, 5, 6, 7, 8, 10, 13, 16,\n17, 18, 19, 20, 21",
|
2012-08-23 13:35:48 +02:00
|
|
|
"Today & Tomorrow":"latest",
|
|
|
|
"Weather":"3, 6, 7",
|
2013-06-17 19:37:36 +02:00
|
|
|
"Wii Speak":"1, 256, 512",
|
|
|
|
"YouTube":"257"
|
2012-08-21 21:25:58 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
IOSdict = {
|
2012-11-25 18:02:30 +01:00
|
|
|
"BC":"2, 4, 5, 6",
|
|
|
|
"MIOS":"4, 5, 8, 9, 10",
|
2012-08-21 19:29:25 +02:00
|
|
|
"IOS4":"65280 (stub)",
|
|
|
|
"IOS9":"520, 521, 778, 1034",
|
|
|
|
"IOS10":"768 (stub)",
|
|
|
|
"IOS11":"10, 256 (stub)",
|
|
|
|
"IOS12":"6, 11, 12, 269, 525, 526",
|
|
|
|
"IOS13":"10, 15, 16, 273, 1031, 1032",
|
|
|
|
"IOS14":"262, 263, 520, 1031, 1032",
|
|
|
|
"IOS15":"257, 258, 259, 260, 265, 266, 523, 1031, 1032",
|
|
|
|
"IOS16":"512 (stub)",
|
|
|
|
"IOS17":"512, 517, 518, 775, 1031, 1032",
|
|
|
|
"IOS20":"12, 256 (stub)",
|
|
|
|
"IOS21":"514, 515, 516, 517, 522, 525, 782, 1038, 1039",
|
|
|
|
"IOS22":"777, 780, 1037, 1293, 1294",
|
|
|
|
"IOS28":"1292, 1293, 1550, 1806, 1807",
|
|
|
|
"IOS30":"1037, 1039, 1040, 2576, 2816 (stub)",
|
|
|
|
"IOS31":"1037, 1039, 1040, 2576, 3088, 3092, 3349,\n3607, 3608",
|
|
|
|
"IOS33":"1040, 2832, 2834, 3091, 3607, 3608",
|
|
|
|
"IOS34":"1039, 3087, 3091, 3348, 3607, 3608",
|
|
|
|
"IOS35":"1040, 3088, 3092, 3349, 3607, 3608",
|
|
|
|
"IOS36":"1042, 3090, 3094, 3351, 3607, 3608",
|
|
|
|
"IOS37":"2070, 3609, 3612, 3869, 5662, 5663",
|
|
|
|
"IOS38":"3610, 3867, 4123, 4124",
|
|
|
|
"IOS40":"3072 (stub)",
|
|
|
|
"IOS41":"2835, 3091, 3348, 3606, 3607",
|
|
|
|
"IOS43":"2835, 3091, 3348, 3606, 3607",
|
|
|
|
"IOS45":"2835, 3091, 3348, 3606, 3607",
|
|
|
|
"IOS46":"2837, 3093, 3350, 3606, 3607",
|
|
|
|
"IOS48":"4123, 4124",
|
|
|
|
"IOS50":"4889, 5120",
|
|
|
|
"IOS51":"4633, 4864",
|
|
|
|
"IOS52":"5661, 5888 (stub)",
|
|
|
|
"IOS53":"4113, 5149, 5406, 5662, 5663",
|
|
|
|
"IOS55":"4633, 5149, 5406, 5662, 5663",
|
|
|
|
"IOS56":"4890, 5405, 5661, 5662",
|
|
|
|
"IOS57":"5404, 5661, 5918, 5919",
|
|
|
|
"IOS58":"6175, 6176",
|
|
|
|
"IOS60":"6174, 6400 (stub)",
|
|
|
|
"IOS61":"4890, 5405, 5661, 5662",
|
2012-11-10 20:00:11 +01:00
|
|
|
"IOS62":"6430",
|
2012-08-21 19:29:25 +02:00
|
|
|
"IOS70":"6687, 6912 (stub)",
|
|
|
|
"IOS80":"6943",
|
|
|
|
}
|
2012-08-21 19:28:14 +02:00
|
|
|
|
2012-08-21 19:29:25 +02:00
|
|
|
DESCdict = {
|
|
|
|
"BOOT2":"Second level boot",
|
|
|
|
"System Menu [JAP]":"System Menu for japanese Wii",
|
|
|
|
"System Menu [PAL]":"System Menu for european Wii",
|
|
|
|
"System Menu [USA]":"System Menu for american Wii",
|
|
|
|
"System Menu [KOR]":"System Menu for korean Wii",
|
|
|
|
"BC":"GameCube compat",
|
|
|
|
"MIOS":"GameCube IOS",
|
|
|
|
"IOS4":"",
|
|
|
|
"IOS9":"",
|
|
|
|
"IOS10":"",
|
|
|
|
"IOS11":"",
|
|
|
|
"IOS12":"",
|
|
|
|
"IOS13":"",
|
|
|
|
"IOS14":"",
|
|
|
|
"IOS15":"",
|
|
|
|
"IOS16":"",
|
|
|
|
"IOS17":"",
|
|
|
|
"IOS20":"",
|
|
|
|
"IOS21":"",
|
|
|
|
"IOS22":"",
|
|
|
|
"IOS28":"",
|
|
|
|
"IOS30":"",
|
|
|
|
"IOS31":"",
|
|
|
|
"IOS33":"",
|
|
|
|
"IOS34":"",
|
|
|
|
"IOS35":"",
|
|
|
|
"IOS36":"",
|
|
|
|
"IOS37":"",
|
|
|
|
"IOS38":"",
|
|
|
|
"IOS40":"",
|
|
|
|
"IOS41":"",
|
|
|
|
"IOS43":"",
|
|
|
|
"IOS45":"",
|
|
|
|
"IOS46":"",
|
|
|
|
"IOS48":"",
|
|
|
|
"IOS50":"",
|
|
|
|
"IOS51":"",
|
|
|
|
"IOS52":"",
|
|
|
|
"IOS53":"",
|
|
|
|
"IOS55":"",
|
|
|
|
"IOS56":"",
|
|
|
|
"IOS57":"",
|
|
|
|
"IOS58":"",
|
|
|
|
"IOS60":"",
|
|
|
|
"IOS61":"",
|
|
|
|
"IOS70":"",
|
|
|
|
"IOS80":"",
|
|
|
|
}
|
2012-08-21 19:28:14 +02:00
|
|
|
|
|
|
|
IOSids = {}
|
|
|
|
for ios in IOSdict:
|
|
|
|
IOSids[IOSdict[ios]] = ios
|
|
|
|
|
|
|
|
def AsciiID(channelname):
|
|
|
|
return binascii.unhexlify(TitleDict[channelname][7:])
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
print TitleDict["System Menu"]
|
|
|
|
print TitleDict["Mii Channel"][7:]
|
|
|
|
print AsciiID("Mii Channel")
|
|
|
|
print idDict["0001000248414741"]
|