Automatic game path detection #18
4 changed files with 43 additions and 8 deletions
|
|
@ -15,12 +15,16 @@
|
|||
ruff
|
||||
(
|
||||
python3.withPackages (ps: with ps;[
|
||||
# Dev dependencies
|
||||
python-lsp-server
|
||||
pylsp-mypy
|
||||
mypy
|
||||
setuptools-scm
|
||||
|
||||
#App dependencies
|
||||
pyside6
|
||||
tomlkit
|
||||
vdf
|
||||
]
|
||||
)
|
||||
)
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ classifiers = [
|
|||
dependencies = [
|
||||
"pyside6",
|
||||
"tomlkit",
|
||||
"vdf",
|
||||
]
|
||||
requires-python = ">=3.6"
|
||||
|
||||
|
|
@ -47,7 +48,8 @@ mypy_path = "$MYPY_CONFIG_FILE_DIR/src"
|
|||
module = [
|
||||
"PySide6.QtGui",
|
||||
"PySide6.QtCore",
|
||||
"PySide6.QtQml"
|
||||
"PySide6.QtQml",
|
||||
"vdf"
|
||||
]
|
||||
ignore_missing_imports = true
|
||||
|
||||
|
|
|
|||
|
|
@ -3,16 +3,11 @@ from PySide6.QtCore import QAbstractListModel, QModelIndex
|
|||
from leek.mod import InvalidModError
|
||||
from leek.qmod import QMod
|
||||
from pathlib import Path
|
||||
from leek.utils import GameFinder
|
||||
|
||||
QML_IMPORT_NAME = "Leek"
|
||||
QML_IMPORT_MAJOR_VERSION = 1
|
||||
|
||||
# TODO: Don't harcode the mods path
|
||||
GAME_PATH = Path(
|
||||
"/home/toast/.local/share/Steam/steamapps/common/Hatsune Miku Project DIVA Mega Mix Plus/"
|
||||
)
|
||||
MOD_PATH = Path(GAME_PATH, "mods")
|
||||
|
||||
|
||||
# Qt follows C++ naming conventions
|
||||
# ruff: noqa: N802
|
||||
|
|
@ -22,7 +17,9 @@ class QModListModel(QAbstractListModel):
|
|||
super().__init__(parent=parent)
|
||||
mods: list[QMod] = []
|
||||
|
||||
for dir in MOD_PATH.iterdir():
|
||||
mod_path: Path = GameFinder.find() / "mods"
|
||||
|
||||
for dir in mod_path.iterdir():
|
||||
if dir.name == ".stfolder":
|
||||
continue
|
||||
try:
|
||||
|
|
|
|||
32
src/leek/utils.py
Normal file
32
src/leek/utils.py
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
import vdf
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
class GameFinder:
|
||||
__game_path: Path | None = None
|
||||
|
||||
@staticmethod
|
||||
def find() -> Path:
|
||||
if GameFinder.__game_path is not None:
|
||||
return GameFinder.__game_path
|
||||
|
||||
# .local/share/Steam/config/libraryfolders.vdf
|
||||
steam_path: Path = Path.home() / ".local/share/Steam"
|
||||
libraries_vdf_path: Path = steam_path / "config/libraryfolders.vdf"
|
||||
|
||||
with libraries_vdf_path.open() as vdf_file:
|
||||
data: dict = vdf.parse(vdf_file)
|
||||
for index in data["libraryfolders"]:
|
||||
library: dict = data["libraryfolders"][index]
|
||||
|
||||
project_diva_id: str = "1761390"
|
||||
if project_diva_id in library["apps"]:
|
||||
libray_path: Path = Path(library["path"])
|
||||
GameFinder.__game_path = (
|
||||
libray_path
|
||||
/ "steamapps/common/Hatsune Miku Project DIVA Mega Mix Plus"
|
||||
)
|
||||
return GameFinder.__game_path
|
||||
|
||||
# Could not find the game :(
|
||||
raise FileNotFoundError
|
||||
Loading…
Add table
Add a link
Reference in a new issue