Support chinese variant game version detection (not tested)

Also some minor improvements for preparation of installation features.
This commit is contained in:
tretrauit 2022-02-16 02:55:19 +07:00
parent ad391a551c
commit 140e508dbf
Signed by: tretrauit
GPG Key ID: 862760FF1903319E
3 changed files with 25 additions and 6 deletions

View File

@ -1,7 +1,9 @@
#!/usr/bin/python3 #!/usr/bin/python3
import argparse import argparse
import appdirs
from pathlib import Path from pathlib import Path
import constants
class UI: class UI:
@ -28,9 +30,13 @@ class UI:
def main(): 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 = 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)") 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", parser.add_argument("-S", "--install", action="store_true",
help="Install the game (if not already installed, else do nothing)") help="Install the game (if not already installed, else do nothing)")
parser.add_argument("-U", "--install-from-file", action="store_true", 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)") help="Patch the game (if not already patched, else do nothing)")
parser.add_argument("-Sy", "--update", action="store_true", parser.add_argument("-Sy", "--update", action="store_true",
help="Update the game and specified voiceover pack only (or install if not found)") 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)") 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("-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)") parser.add_argument("-Rp", "--remove-patch", action="store_true", help="Revert the game patch (if patched)")

View File

@ -1,6 +1,9 @@
import re import re
import appdirs
from pathlib import Path from pathlib import Path
from configparser import ConfigParser from configparser import ConfigParser
from worthless import constants
from worthless.launcher import Launcher 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 # https://gitlab.com/KRypt0n_/an-anime-game-launcher/-/blob/main/src/ts/Game.ts#L26
def _read_version_from_game_file(self): 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(): if globalgamemanagers.exists():
with globalgamemanagers.open("rb") as f: with globalgamemanagers.open("rb") as f:
data = f.read().decode("ascii") data = f.read().decode("ascii")
@ -23,10 +29,17 @@ class Installer:
raise ValueError("Could not find version in game file") raise ValueError("Could not find version in game file")
return result.group(1) 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): if isinstance(gamedir, str):
gamedir = Path(gamedir) gamedir = Path(gamedir)
self._gamedir = 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") config_file = self._gamedir.joinpath("config.ini")
self._config_file = config_file.resolve() self._config_file = config_file.resolve()
self._version = None self._version = None

View File

@ -15,12 +15,12 @@ class Patcher:
if not data_dir: if not data_dir:
self._appdirs = appdirs.AppDirs(constants.APP_NAME, constants.APP_AUTHOR) self._appdirs = appdirs.AppDirs(constants.APP_NAME, constants.APP_AUTHOR)
self._patch_path = Path(self._appdirs.user_data_dir).joinpath("Patch") 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: else:
if not isinstance(data_dir, Path): if not isinstance(data_dir, Path):
data_dir = Path(data_dir) data_dir = Path(data_dir)
self._patch_path = data_dir.joinpath("Patch") self._patch_path = data_dir.joinpath("Patch")
self._temp_path = data_dir.joinpath("Temp") self._temp_path = data_dir.joinpath("Temp/Patcher")
@staticmethod @staticmethod
async def _get(url, **kwargs) -> aiohttp.ClientResponse: async def _get(url, **kwargs) -> aiohttp.ClientResponse: