feat(hsr): more implementation on resource

This commit is contained in:
tretrauit 2023-06-29 23:34:40 +07:00
parent 1caadad664
commit 891cf71aa7
5 changed files with 94 additions and 7 deletions

View File

@ -0,0 +1,4 @@
from vollerei.common.api.resource import Resource
__all__ = ["Resource"]

View File

@ -100,11 +100,41 @@ class Latest:
self.segments = segments self.segments = segments
self.package_size = package_size self.package_size = package_size
@staticmethod
def from_dict(data: dict) -> "Latest":
if data["name"] == "":
if data["path"] == "":
data["name"] = data["segments"][0]["path"].split("/")[-1]
else:
data["name"] = data["path"].split("/")[-1]
return Latest(
data["name"],
data["version"],
data["path"],
data["size"],
data["md5"],
data["entry"],
[VoicePack.from_dict(i) for i in data["voice_packs"]],
data["decompressed_path"],
[Segment.from_dict(i) for i in data["segments"]],
data["package_size"],
)
class Game: class Game:
latest: Latest latest: Latest
diffs: list[Diff] diffs: list[Diff]
def __init__(self, latest: Latest, diffs: list[Diff]) -> None:
self.latest = latest
self.diffs = diffs
@staticmethod
def from_dict(data: dict) -> "Game":
return Game(
Latest.from_dict(data["latest"]), [Diff.from_dict(i) for i in data["diffs"]]
)
class Plugin: class Plugin:
name: str name: str
@ -137,7 +167,7 @@ class DeprecatedFile:
md5: str | None md5: str | None
class Data: class Resource:
""" """
Data class for /resource endpoint Data class for /resource endpoint
""" """
@ -168,6 +198,14 @@ class Data:
sdk: None, sdk: None,
deprecated_files: list[DeprecatedFile], deprecated_files: list[DeprecatedFile],
) -> None: ) -> None:
# Fixups
game_latest_path = game.latest.path
if game.latest.name == "":
print("A")
if game_latest_path == "":
game.latest.name = game.latest.segments[0].path.split("/")[-1]
else:
game.latest.name = game_latest_path.split("/")[-1]
self.game = game self.game = game
self.plugin = plugin self.plugin = plugin
self.web_url = web_url self.web_url = web_url
@ -176,3 +214,18 @@ class Data:
self.deprecated_packages = deprecated_packages self.deprecated_packages = deprecated_packages
self.sdk = sdk self.sdk = sdk
self.deprecated_files = deprecated_files self.deprecated_files = deprecated_files
@staticmethod
def from_dict(json: dict) -> "Resource":
return Resource(
Game.from_dict(json["game"]),
LauncherPlugin.from_dict(json["plugin"]),
json["web_url"],
json["force_update"],
Game.from_dict(json["pre_download_game"])
if json["pre_download_game"]
else None,
[DeprecatedPackage.from_dict(x) for x in json["deprecated_packages"]],
json["sdk"],
[DeprecatedFile.from_dict(x) for x in json["deprecated_files"]],
)

View File

@ -0,0 +1,29 @@
import requests
from vollerei.common.api import Resource
from vollerei.hsr.constants import LAUNCHER_API
from vollerei.hsr.launcher.enums import GameChannel
def get_resource(channel: GameChannel = GameChannel.Overseas) -> Resource:
"""
Get game resource information from the launcher API.
Args:
channel: Game channel to get the resource information from. (os, cn)
Returns:
Resource: Game resource information.
"""
resource_path: dict
match channel:
case GameChannel.Overseas:
resource_path = LAUNCHER_API.OS
case GameChannel.China:
resource_path = LAUNCHER_API.CN
return Resource.from_dict(
requests.get(
resource_path["url"] + LAUNCHER_API.RESOURCE_PATH,
params=resource_path["params"],
).json()["data"]
)

View File

@ -0,0 +1,6 @@
from enum import Enum
class GameChannel(Enum):
Overseas = 0
China = 1

View File

@ -1,17 +1,12 @@
from hashlib import md5 from hashlib import md5
from os import PathLike from os import PathLike
from pathlib import Path from pathlib import Path
from enum import Enum from vollerei.hsr.launcher.enums import GameChannel
from vollerei.common import ConfigFile from vollerei.common import ConfigFile
from vollerei.abc.launcher.game import GameABC from vollerei.abc.launcher.game import GameABC
from vollerei.hsr.constants import MD5SUMS from vollerei.hsr.constants import MD5SUMS
class GameChannel(Enum):
Overseas = 0
China = 1
class Game(GameABC): class Game(GameABC):
""" """
Manages the game installation Manages the game installation