Compare commits

..

No commits in common. "33e3eae4cbb57b54c27289b4d9dc1a12186bc249" and "76d9feb07ab87944e51b6f060fb3fa3c45c1669d" have entirely different histories.

5 changed files with 8 additions and 121 deletions

View File

@ -75,17 +75,9 @@ def launch(game: str, profile: str):
runner.run(game)
game.wait()
# Unmount (with retries)
failed = False
for retry in range(5):
failed = any(not mount.unmount() for mount in mounts)
if not failed:
break
print(f"Unmounting failed ({retry +1 }/5). Waiting 3s...")
time.sleep(3)
if failed:
print("Unmounting failed!")
# Unmount
for mount in mounts:
mount.unmount()
@cli.command()

View File

@ -15,10 +15,6 @@ from lmm.games.ron import (
GAME_NAME as RON,
ReadyOrNotGame,
)
from lmm.games.lc import (
GAME_NAME as LC,
LethalCompanyGame,
)
import yaml
@ -38,8 +34,6 @@ def load_game_configs() -> list[Game]:
BG3: BaldursGate3Game,
PDMM: ProjectDivaMegaMixGame,
RON: ReadyOrNotGame,
LC: LethalCompanyGame,
}.get(item, None)
if game_cls is None:
print(f"Unknown game {item}")

View File

@ -1,93 +0,0 @@
from pathlib import Path
from typing import Any
from lmm.games.game import ProtonGame
from lmm.profile import Profile
from lmm.overlayfs import OverlayFSMount
from lmm.const import LMM_GAMES_PATH
from lmm.runners.base import runner_from_config
GAME_NAME = "LethalCompany"
class LethalCompanyProfile(Profile):
# The names of the directories the the mods directory.
mods: list[str]
def __init__(self, name: str, mods: list[str], **kwargs):
super().__init__(GAME_NAME, name, **kwargs)
self.mods = mods
def get_mod_names(self) -> list[str]:
return self.mods
class LethalCompanyGame(ProtonGame):
def __init__(self, profiles: list[LethalCompanyProfile], **kwargs):
super().__init__(GAME_NAME, "1966720", profiles, **kwargs)
@property
def installation_path(self) -> Path:
return (
self.steam_library
/ "steamapps/common/Lethal Company"
)
@property
def game_executable(self) -> Path:
return self.installation_path / "Lethal Company.exe"
def prepare_overlays(
self, profile: LethalCompanyProfile
) -> list[OverlayFSMount]:
return [
OverlayFSMount(
upper=self.installation_path,
lower=profile.mods,
mount=self.installation_path,
cd=LMM_GAMES_PATH / self.name,
),
]
def to_dict(self) -> dict[str, Any]:
return {
"profiles": [
{
"name": profile.name,
"mods": [
{
"name": mod,
}
for mod in profile.mods
],
}
for profile in self.profiles
]
}
@classmethod
def from_dict(cls, data: dict[str, Any]) -> "LethalCompanyGame":
profiles = []
for profile in data["profiles"]:
mods = [mod["name"] for mod in profile["mods"]]
if "runner" in profile:
runner = runner_from_config(profile["runner"])
else:
runner = None
profiles.append(
LethalCompanyProfile(
profile["name"],
mods,
runner=runner,
),
)
if "default_runner" in data:
default_runner = runner_from_config(data["default_runner"])
else:
default_runner = None
return LethalCompanyGame(profiles, default_runner=default_runner)

View File

@ -102,31 +102,27 @@ class OverlayFSMount:
self._mounted = True
return self.mount_path
def unmount(self) -> bool:
def unmount(self):
if self._mounted:
print("Unmounting...")
# Remove the mount
if LMMConfig.use_fuse:
returncode = run_cmd(
run_cmd(
[
LMMConfig.fusermount_command,
"-u",
str(self.mount_path),
]
) == 0
)
else:
returncode = run_sudo_cmd(
run_sudo_cmd(
[
"umount",
str(self.mount_path),
]
)
if returncode != 0:
print("Unmounting failed")
return False
# Remove the temporary workdir
if self.workdir is not None:
try:
@ -136,7 +132,6 @@ class OverlayFSMount:
print(f"Failed to clean temporary directory {self.workdir.name}")
self._mounted = False
return True
def __del__(self):
self.unmount()

View File

@ -4,8 +4,7 @@ version = "0.1.0"
requires-python = ">= 3.10"
dependencies = [
"vdf",
"pyyaml",
"click"
"pyyaml"
]
[project.optional-dependencies]