From 383859388e4e4c1ea50cb6052daf122d520bf5e2 Mon Sep 17 00:00:00 2001 From: Kevin Trocolli Date: Fri, 29 Nov 2024 22:20:55 -0500 Subject: [PATCH 1/2] chuni: fix 'NoneType' object has no attribute 'split' in score.py --- titles/chuni/schema/score.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/titles/chuni/schema/score.py b/titles/chuni/schema/score.py index ab6766a..50a8f7f 100644 --- a/titles/chuni/schema/score.py +++ b/titles/chuni/schema/score.py @@ -179,7 +179,14 @@ class ChuniRomVersion(): # sort it by version number for easy iteration ChuniRomVersion.Versions = dict(sorted(all_versions.items())) - def __init__(self, rom_version: str) -> None: + def __init__(self, rom_version: Optional[str] = None) -> None: + if rom_version is None: + self.major = 0 + self.minor = 0 + self.maint = 0 + self.version = "0.00.00" + return + (major, minor, maint) = rom_version.split('.') self.major = int(major) self.minor = int(minor) @@ -343,6 +350,10 @@ class ChuniScoreData(BaseData): # for each romVersion recorded, check if it maps back the current version we are operating on matching_rom_versions = [] for v in record_versions: + # Do this to prevent null romVersion from causing an error in ChuniRomVersion.__init__() + if v[0] is None: + continue + if ChuniRomVersion(v[0]).get_int_version() == version: matching_rom_versions += [v[0]] From a8f5ef15503e072982f894084870aa1136815ed9 Mon Sep 17 00:00:00 2001 From: Kevin Trocolli Date: Sun, 1 Dec 2024 14:19:55 -0500 Subject: [PATCH 2/2] allnet: properly dfi encode downloadorder responses --- core/allnet.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/core/allnet.py b/core/allnet.py index 9eb6595..43dde1f 100644 --- a/core/allnet.py +++ b/core/allnet.py @@ -349,12 +349,22 @@ class AllnetServlet: not self.config.allnet.allow_online_updates or not self.config.allnet.update_cfg_folder ): - return PlainTextResponse(urllib.parse.unquote(urllib.parse.urlencode(vars(resp))) + "\n") + resp = urllib.parse.unquote(urllib.parse.urlencode(vars(resp))) + "\n" + if is_dfi: + return PlainTextResponse( + self.to_dfi(resp) + b"\r\n", headers={ "Pragma": "DFI" } + ) + return PlainTextResponse(resp) else: machine = await self.data.arcade.get_machine(req.serial) if not machine or not machine['ota_enable'] or not machine['is_cab'] or machine['is_blacklisted']: - return PlainTextResponse(urllib.parse.unquote(urllib.parse.urlencode(vars(resp))) + "\n") + resp = urllib.parse.unquote(urllib.parse.urlencode(vars(resp))) + "\n" + if is_dfi: + return PlainTextResponse( + self.to_dfi(resp) + b"\r\n", headers={ "Pragma": "DFI" } + ) + return PlainTextResponse(resp) if path.exists( f"{self.config.allnet.update_cfg_folder}/{req.game_id}-{req.ver.replace('.', '')}-app.ini" @@ -744,7 +754,7 @@ class AllnetDownloadOrderRequest: self.encode = req.get("encode", "") class AllnetDownloadOrderResponse: - def __init__(self, stat: int = 1, serial: str = "", uri: str = "") -> None: + def __init__(self, stat: int = 1, serial: str = "", uri: str = "null") -> None: self.stat = stat self.serial = serial self.uri = uri