From 140e508dbf0cc460119d029d3beeacffca3799e3 Mon Sep 17 00:00:00 2001 From: tretrauit Date: Wed, 16 Feb 2022 02:55:19 +0700 Subject: [PATCH] Support chinese variant game version detection (not tested) Also some minor improvements for preparation of installation features. --- worthless/gui.py | 10 ++++++++-- worthless/installer.py | 17 +++++++++++++++-- worthless/patcher.py | 4 ++-- 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/worthless/gui.py b/worthless/gui.py index 10d0aaf..10a5f0c 100755 --- a/worthless/gui.py +++ b/worthless/gui.py @@ -1,7 +1,9 @@ #!/usr/bin/python3 import argparse +import appdirs from pathlib import Path +import constants class UI: @@ -28,9 +30,13 @@ class UI: def main(): + default_dirs = appdirs.AppDirs(constants.APP_NAME, constants.APP_AUTHOR) parser = argparse.ArgumentParser(prog="worthless", description="A worthless launcher written in Python.") - parser.add_argument("-D", "-d", "--dir", action="store", type=Path, default=Path.cwd(), + parser.add_argument("-D", "--dir", action="store", type=Path, default=Path.cwd(), help="Specify the game directory (default current working directory)") + parser.add_argument("-W", "--temporary-dir", action="store", type=Path, default=None, + help="Specify the temporary directory (default {} and {})".format(default_dirs.user_data_dir, + default_dirs.user_cache_dir)) parser.add_argument("-S", "--install", action="store_true", help="Install the game (if not already installed, else do nothing)") parser.add_argument("-U", "--install-from-file", action="store_true", @@ -40,7 +46,7 @@ def main(): help="Patch the game (if not already patched, else do nothing)") parser.add_argument("-Sy", "--update", action="store_true", help="Update the game and specified voiceover pack only (or install if not found)") - parser.add_argument("-Syu", "--update", action="store_true", + parser.add_argument("-Syu", "--update-all", action="store_true", help="Update the game and all installed voiceover packs (or install if not found)") parser.add_argument("-Rs", "--remove", action="store_true", help="Remove the game (if installed)") parser.add_argument("-Rp", "--remove-patch", action="store_true", help="Revert the game patch (if patched)") diff --git a/worthless/installer.py b/worthless/installer.py index 02d70b6..b057860 100644 --- a/worthless/installer.py +++ b/worthless/installer.py @@ -1,6 +1,9 @@ import re +import appdirs from pathlib import Path from configparser import ConfigParser + +from worthless import constants from worthless.launcher import Launcher @@ -14,7 +17,10 @@ class Installer: # https://gitlab.com/KRypt0n_/an-anime-game-launcher/-/blob/main/src/ts/Game.ts#L26 def _read_version_from_game_file(self): - globalgamemanagers = self._gamedir.joinpath("./GenshinImpact_Data/globalgamemanagers") + if self._overseas: + globalgamemanagers = self._gamedir.joinpath("./GenshinImpact_Data/globalgamemanagers") + else: + globalgamemanagers = self._gamedir.joinpath("./YuanShen_Data/globalgamemanagers") if globalgamemanagers.exists(): with globalgamemanagers.open("rb") as f: data = f.read().decode("ascii") @@ -23,10 +29,17 @@ class Installer: raise ValueError("Could not find version in game file") return result.group(1) - def __init__(self, gamedir: str | Path = Path.cwd(), overseas: bool = True): + def __init__(self, gamedir: str | Path = Path.cwd(), overseas: bool = True, data_dir: str | Path = None): if isinstance(gamedir, str): gamedir = Path(gamedir) self._gamedir = gamedir + if not data_dir: + self._appdirs = appdirs.AppDirs(constants.APP_NAME, constants.APP_AUTHOR) + self._temp_path = Path(self._appdirs.user_cache_dir).joinpath("Installer") + else: + if not isinstance(data_dir, Path): + data_dir = Path(data_dir) + self._temp_path = data_dir.joinpath("Temp/Installer/") config_file = self._gamedir.joinpath("config.ini") self._config_file = config_file.resolve() self._version = None diff --git a/worthless/patcher.py b/worthless/patcher.py index fb3d2e4..a72e1c0 100644 --- a/worthless/patcher.py +++ b/worthless/patcher.py @@ -15,12 +15,12 @@ class Patcher: if not data_dir: self._appdirs = appdirs.AppDirs(constants.APP_NAME, constants.APP_AUTHOR) self._patch_path = Path(self._appdirs.user_data_dir).joinpath("Patch") - self._temp_path = Path(self._appdirs.user_cache_dir) + self._temp_path = Path(self._appdirs.user_cache_dir).joinpath("Patcher") else: if not isinstance(data_dir, Path): data_dir = Path(data_dir) self._patch_path = data_dir.joinpath("Patch") - self._temp_path = data_dir.joinpath("Temp") + self._temp_path = data_dir.joinpath("Temp/Patcher") @staticmethod async def _get(url, **kwargs) -> aiohttp.ClientResponse: