From e8d991ccb5c93201c43d14c82c6d7a47b704ecb0 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Tue, 7 Jul 2026 19:43:00 +0900 Subject: [PATCH] chore: drop legacy functions --- dzgui/api/pefile.py | 26 ---------------- dzgui/api/steam.py | 57 +++++++----------------------------- dzgui/init/proc.py | 38 ------------------------ dzgui/managers/connection.py | 3 +- dzgui/managers/offline.py | 3 +- 5 files changed, 14 insertions(+), 113 deletions(-) diff --git a/dzgui/api/pefile.py b/dzgui/api/pefile.py index d651689..e2bf676 100644 --- a/dzgui/api/pefile.py +++ b/dzgui/api/pefile.py @@ -405,32 +405,6 @@ def get_pefile_path(steam_path: Path, appid: int) -> Path: return pe_path -# TODO: move to dzgui.api.steam -def _get_app_path(folders_path: Path, appid: int) -> Path: - app_path = None - - try: - j = json.loads(vdf2json(folders_path)) - except Exception: - raise VDFLoadError("Failed to parse libraryfolders") - - for obj in j["libraryfolders"]: - if str(appid) in j["libraryfolders"][obj]["apps"]: - app_path = j["libraryfolders"][obj]["path"] - if Path(app_path).exists(): - break - - if app_path is None: - raise AppNotInstalledError( - f"Failed to find a libraryfolder for the appid {appid}" - ) - if Path(app_path).exists() is False: - raise AppMovedError( - f"The location '{app_path}' pointed to by '{appid}' no longer exists and may have been changed on the disk." - ) - - return Path(app_path) - def get_pretty_version(steam_path: Path, appid: int) -> str | None: try: diff --git a/dzgui/api/steam.py b/dzgui/api/steam.py index a6ef4a3..c53fb44 100644 --- a/dzgui/api/steam.py +++ b/dzgui/api/steam.py @@ -204,57 +204,17 @@ def launch_offline( def find_user_id(path: Path) -> str | None: resolved_path = path / "config" / "loginusers.vdf" try: - vdf = vdf2json(resolved_path) - j = json.loads(vdf) - for user in j["users"]: - if j["users"][user]["MostRecent"] == "1": - return str(user) - return None + with open(resolved_path, "r") as f: + v = vdf.load(f) + for user in v["users"]: + if v["users"][user]["MostRecent"] == "1": + return str(user) + return None except Exception as e: logger.warn(e) return None -def vdf2json(path: Path) -> str: - def _istr(indent: int, string: str) -> str: - return (indent * " ") + string - - jbuf = "{\n" - indent = 1 - - with open(path, "r") as f: - st = f.read() - lex = shlex(st) - - while True: - tok = lex.get_token() - if not tok: - return jbuf + "}\n" - if tok == "}": - indent -= 1 - jbuf += _istr(indent, "}") - ntok = lex.get_token() - if ntok is not None: - lex.push_token(ntok) - if ntok and ntok != "}": - jbuf += "," - jbuf += "\n" - else: - ntok = lex.get_token() - if ntok == "{": - jbuf += _istr(indent, tok + ": {\n") - indent += 1 - else: - if ntok is not None: - jbuf += _istr(indent, tok + ": " + ntok) - ntok = lex.get_token() - if ntok is not None: - lex.push_token(ntok) - if ntok != "}": - jbuf += "," - jbuf += "\n" - - def update_workshop(key: str, mod: int, endpoint: str) -> None: payload: dict[str, Union[int, str]] = { "publishedfileid": mod, @@ -341,6 +301,7 @@ def _get_running_app() -> int | None: # TODO: write tests +# TODO: consider moving to proc module def get_running_app() -> int | None: PROC_NAME = "steam" SUBPROC_NAME = "reaper" @@ -431,3 +392,7 @@ def get_app_path(folders_path: Path, appid: int) -> Path: ) return Path(app_path) + + +p = Path("/home/ncase/.local/share/Steam") +print(find_user_id(p)) diff --git a/dzgui/init/proc.py b/dzgui/init/proc.py index 77aefcd..51678fd 100644 --- a/dzgui/init/proc.py +++ b/dzgui/init/proc.py @@ -20,21 +20,6 @@ from dzgui.util.format import format_exception logger = logging.getLogger(APP_NAME) -# TODO: move to util.proc -def is_dayz_running() -> bool: - """Subprocesses spawned from Steam will not show up in regular process tree""" - procs = [] - substring = DAYZ_BINARY - for proc in psutil.process_iter(): - try: - procs.append(proc.cmdline()) - except Exception as e: - msg = format_exception(e) - logger.warning(msg) - continue - return any(substring in item for sublist in procs for item in sublist) - - def is_steam_running(cmd: str) -> bool: if cmd == STEAM_CMD: if has_cmd(STEAM_CMD) is False: @@ -69,26 +54,3 @@ def has_cmd(cmd: str) -> bool: if shutil.which(cmd) is not None: return True return False - - -# TODO: drop, completely superseded by new methods -@deprecated("dropped in favor of Gtk native methods") -def foreground(cmd: str, pid: int) -> None: - if cmd == "wmctrl": - proc = subprocess.run(["wmctrl", "-ilp"], capture_output=True, text=True) - lines = proc.stdout.splitlines() - for line in lines: - els = line.split(" ") - if str(pid) in els: - wid = els[0] - break - subprocess.run(["wmctrl", "-ia", wid]) - elif cmd == "xdotool": - args = [cmd, "search", "--pid", str(pid)] - proc = subprocess.run([*args], capture_output=True, text=True) - lines = proc.stdout.splitlines() - ## NOTE: some forked subprocesses may fail, so skip over them - for line in lines: - subprocess.run( - ["xdotool", "windowactivate", line], stderr=subprocess.DEVNULL - ) diff --git a/dzgui/managers/connection.py b/dzgui/managers/connection.py index 643dffd..1f28172 100644 --- a/dzgui/managers/connection.py +++ b/dzgui/managers/connection.py @@ -32,8 +32,9 @@ from dzgui.const.constants import ( APPNAME_DAYZ, APPNAME_DAYZ_EXP_HUMAN, ) +from dzgui.api.steam import is_dayz_running from dzgui.const.enum import NotebookPage, Preferences -from dzgui.init.proc import is_dayz_running, is_steam_running +from dzgui.init.proc import is_steam_running from dzgui.managers.threading import call_on_thread, StoredFunc, ThreadingManager from dzgui.strings.dialogs import ( waiting_for_launch, diff --git a/dzgui/managers/offline.py b/dzgui/managers/offline.py index a63d42b..cf23527 100644 --- a/dzgui/managers/offline.py +++ b/dzgui/managers/offline.py @@ -5,10 +5,9 @@ from typing import Callable, TYPE_CHECKING, Union import dzgui.api.pefile as PeFile from dzgui.api.mods import is_mission, get_custom_mods -from dzgui.api.steam import launch_offline +from dzgui.api.steam import is_dayz_running, launch_offline from dzgui.const.constants import APP_NAME, APPID_DAYZ_EXP from dzgui.const.enum import Preferences -from dzgui.init.proc import is_dayz_running from dzgui.managers.threading import call_on_thread, StoredFunc, ThreadingManager from dzgui.model.model_factory import ModelFactory from dzgui.strings import dialogs