chore: simplify process checking logic

This commit is contained in:
aclist 2026-05-09 19:59:40 +09:00
parent 7c62aed6b0
commit 77c641327f
2 changed files with 41 additions and 24 deletions

View File

@ -3,29 +3,40 @@ import subprocess
import shutil
import sys
from dzgui.const.constants import DAYZ_BINARY, STEAM_CMD
from dzgui.const.constants import (
DAYZ_BINARY,
STEAM_CMD,
FLATPAK_APPID,
FLATPAK_RUN_CMD,
FLATPAK_SANDBOX,
)
from dzgui.views.dialogs.early_alert import EarlyAlertDialog
from dzgui.util.strings import init
# TODO: move to util.proc
def is_dayz_running() -> bool:
return is_running(DAYZ_BINARY)
# TODO: simplify
def is_dayz_running(dialog: bool = False) -> bool | None:
if dialog is False:
return is_running(DAYZ_BINARY)
if is_running(DAYZ_BINARY) is True:
EarlyAlertDialog(init.is_dayz_running)
sys.exit(1)
def is_steam_running(dialog: bool = False) -> bool | None:
# TODO: check proc name of flatpak steam
if dialog is False:
def is_steam_running(cmd: str) -> bool:
if cmd == STEAM_CMD:
if has_cmd(STEAM_CMD) is False:
return False
return is_running(STEAM_CMD)
if is_running(STEAM_CMD) is False:
EarlyAlertDialog(init.is_steam_running)
sys.exit(1)
elif cmd == FLATPAK_RUN_CMD or FLATPAK_SANDBOX:
return is_flatpak_steam_running()
else:
raise TypeError("Not a valid Steam client selection")
def is_flatpak_steam_running() -> bool:
if has_cmd(FLATPAK_CMD) is False:
return False
proc = subprocess.check_output([FLATPAK_CMD, "ps"], capture_output=True, text=True)
lines = proc.stdout.splitlines()
if FLATPAK_APPID in lines:
return True
return False
def is_running(proc: str) -> bool:
@ -43,8 +54,10 @@ def has_cmd(cmd: str) -> bool:
def foreground(cmd: str, pid: int) -> None:
if cmd == "wmctrl":
proc = subprocess.run(["wmctrl", "-ilp"], capture_output=True, text=True)
lines = proc.stdout.splitlines()
proc = subprocess.check_output(
["wmctrl", "-ilp"], capture_output=True, text=True
)
lines = proc.splitlines()
for line in lines:
els = line.split(" ")
if str(pid) in els:
@ -52,5 +65,11 @@ def foreground(cmd: str, pid: int) -> None:
break
subprocess.run(["wmctrl", "-ia", wid])
elif cmd == "xdotool":
args = [cmd, "search", "--onlyvisible", "--name", "DZGUI", "windowactivate"]
subprocess.Popen([*args])
args = [cmd, "search", "--pid", str(pid)]
proc = subprocess.check_output([*args], stderr=subprocess.DEVNULL)
lines = proc.splitlines()
## NOTE: some forked subprocesses may fail, so skip over them
for line in lines:
subprocess.run(
["xdotool", "windowactivate", line], stderr=subprocess.DEVNULL
)

View File

@ -122,6 +122,8 @@ def main() -> None:
if allow is True:
check_updates(version)
# TODO: config wizard: check has_steam_client() prior to VDF exploration
if _is_steam_deck is False:
# TODO: sudo escalation dialog
count = get_map_count()
@ -129,10 +131,6 @@ def main() -> None:
if has_steam_client() is False:
EarlyAlertDialog(init.requires_steam)
is_dayz_installed(XDG.config)
is_dayz_running(dialog=True)
is_steam_running(dialog=True)
# NOTE: clear versions file of unlinked mods
rebuild_symlinks(XDG.config)
remove_stale_signatures(XDG.config, XDG.version)