43 lines
1.5 KiB
Python
43 lines
1.5 KiB
Python
from pathlib import Path
|
|
from typing import Callable
|
|
|
|
from l4d2host.paths import get_left4me_root
|
|
from l4d2host.process import run_command
|
|
from l4d2host.logging import emit_step
|
|
|
|
|
|
class SteamInstaller:
|
|
def __init__(self, install_dir: Path | None = None, steamcmd: str = "steamcmd"):
|
|
self.install_dir = get_left4me_root() / "installation" if install_dir is None else Path(install_dir)
|
|
self.steamcmd = steamcmd
|
|
|
|
def install_or_update(
|
|
self,
|
|
*,
|
|
on_stdout: Callable[[str], None] | None = None,
|
|
on_stderr: Callable[[str], None] | None = None,
|
|
passthrough: bool = False,
|
|
should_cancel: Callable[[], bool] | None = None,
|
|
) -> None:
|
|
for platform in ("windows", "linux"):
|
|
emit_step(f"downloading {platform} platform payload...", on_stdout, passthrough)
|
|
run_command(
|
|
[
|
|
self.steamcmd,
|
|
"+force_install_dir",
|
|
str(self.install_dir),
|
|
"+login",
|
|
"anonymous",
|
|
"+@sSteamCmdForcePlatformType",
|
|
platform,
|
|
"+app_update",
|
|
"222860",
|
|
"validate",
|
|
"+quit",
|
|
],
|
|
on_stdout=on_stdout,
|
|
on_stderr=on_stderr,
|
|
passthrough=passthrough,
|
|
should_cancel=should_cancel,
|
|
)
|
|
emit_step("installation complete.", on_stdout, passthrough)
|