Skip to content

Commit fc4a17a

Browse files
committed
feat: add console argument to skip error caused by unsupported version type
1 parent 71c496f commit fc4a17a

3 files changed

Lines changed: 22 additions & 6 deletions

File tree

src/azlassets/classes.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,15 @@
44
from typing import Self
55

66

7+
class UnknownVersionTypeError(NotImplementedError):
8+
def __init__(self, version_name, *args):
9+
super().__init__(f"Unknown versionname {version_name}.", *args)
10+
self.version_name = version_name
11+
12+
713
CompareType = Enum('CompareType', 'New Changed Unchanged Deleted')
814
DownloadType = Enum('DownloadType', 'NoChange Removed Success Failed ForDeletionNoChange')
915

10-
1116
@dataclass
1217
class VersionTypeDataMixin:
1318
hashname: str

src/azlassets/versioncontrol.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,20 @@
33
from pathlib import Path
44
from collections.abc import Generator, Iterable
55

6-
from .classes import DownloadType, HashRow, UpdateResult, VersionType, VersionResult, SimpleVersionResult
6+
from .classes import DownloadType, HashRow, UpdateResult, VersionType, VersionResult, SimpleVersionResult, UnknownVersionTypeError
77

88

99
def parse_version_string(rawstring: str) -> VersionResult:
1010
"""
1111
Tries to parse the raw version string as returned by the game server into a `VersionResult`.
1212
13-
Raises `NotImplementedError` if the versiontype does not exist.
13+
Raises `UnknownVersionTypeError` if the versiontype does not exist.
1414
"""
1515
parts = rawstring.split('$')[1:]
1616
versionname = parts[0]
1717
versiontype = VersionType.from_hashname(versionname)
1818
if not versiontype:
19-
raise NotImplementedError(f'Unknown versionname {versionname}.')
19+
raise UnknownVersionTypeError(version_name=versionname)
2020

2121
if versiontype == VersionType.AZL:
2222
version = '.'.join(parts[1:-1])

src/downloader.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,18 @@
55
from pathlib import Path
66

77
from azlassets import __version__, config, protobuf, versioncontrol, updater, repair, downloader
8-
from azlassets.classes import Client
8+
from azlassets.classes import Client, UnknownVersionTypeError, VersionResult
99

1010

11+
def try_parse_version_string(vstring: str, skip_error: bool = False) -> VersionResult:
12+
try:
13+
return versioncontrol.parse_version_string(vstring)
14+
except UnknownVersionTypeError as e:
15+
if skip_error:
16+
print(f"WARN: Unknown version type '{e.version_name}' cannot be processed, but this error has been skipped.")
17+
print("WARN: Update application as soon as possible to support this missing version type.")
18+
else: raise
19+
1120
async def execute(args):
1221
# load config data from files
1322
userconfig = config.load_user_config()
@@ -31,7 +40,7 @@ async def execute(args):
3140
sys.exit(1)
3241

3342
version_string = version_response.pb.version
34-
versionlist = [versioncontrol.parse_version_string(v) for v in version_string if v.startswith("$")]
43+
versionlist = [try_parse_version_string(v, args.skip_unknown_version_error) for v in version_string if v.startswith("$")]
3544

3645
async with downloader.AzurlaneAsyncDownloader(clientconfig.cdnurl, useragent=userconfig.useragent) as downloader_session:
3746
for vresult in versionlist:
@@ -71,6 +80,8 @@ def main():
7180
help="Checks if all files are correct using the local hash file.")
7281
parser.add_argument("--ignore-hashfile", default=False, action=argparse.BooleanOptionalAction,
7382
help="Ignores the local hashfile and downloads ALL files again. This is only intended for testing purposes.")
83+
parser.add_argument("--skip-unknown-version-error", default=False, action=argparse.BooleanOptionalAction,
84+
help="Skips the UnknownVersionTypeError termination as a temporary fix if a new version type gets added.")
7485
args = parser.parse_args()
7586

7687
args.client = Client[args.client]

0 commit comments

Comments
 (0)