-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathProductCodeReader.py
More file actions
39 lines (34 loc) · 1.23 KB
/
ProductCodeReader.py
File metadata and controls
39 lines (34 loc) · 1.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
from dataclasses import dataclass, field
from io import BufferedReader
import struct, sys
from ProductCode import ProductCode
from WiiUProductCode import WiiUProductCode
from PS3ProductCode import PS3ProductCode
from XBOXProductCode import XBOXProductCode
from VitaProductCode import VitaProductCode
WIIU = "WIIU"
PS3 = "PS3"
PS_VITA = "PSV"
XBOX = "XBX"
@dataclass(repr=False)
class ProductCodeReader:
__consoleType: str = field(default_factory=str)
__productList: list[ProductCode] = field(default_factory=list)
def process(self, stream: BufferedReader) -> None:
skipSize = 9
cls = WiiUProductCode
fmt = ">i"
if self.__consoleType == PS3:
skipSize = 0xb0
cls = PS3ProductCode
if self.__consoleType == XBOX:
skipSize = 0
cls = XBOXProductCode
if self.__consoleType == PS_VITA:
fmt = "<i"
skipSize = 0x61
cls = VitaProductCode
print(stream.read(skipSize), file=sys.stderr)
self.__productList = [cls(stream) for _ in range(struct.unpack(fmt, stream.read(4))[0])]
def __repr__(self) -> str:
return f"{self.__consoleType}\n" + "\n".join(p.__repr__() for p in self.__productList)