Compare commits
No commits in common. "33e3eae4cbb57b54c27289b4d9dc1a12186bc249" and "76d9feb07ab87944e51b6f060fb3fa3c45c1669d" have entirely different histories.
33e3eae4cb
...
76d9feb07a
14
lmm/cli.py
14
lmm/cli.py
@ -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()
|
||||
|
@ -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}")
|
||||
|
@ -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)
|
@ -102,30 +102,26 @@ 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:
|
||||
@ -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()
|
||||
|
@ -4,8 +4,7 @@ version = "0.1.0"
|
||||
requires-python = ">= 3.10"
|
||||
dependencies = [
|
||||
"vdf",
|
||||
"pyyaml",
|
||||
"click"
|
||||
"pyyaml"
|
||||
]
|
||||
|
||||
[project.optional-dependencies]
|
||||
|
Loading…
Reference in New Issue
Block a user