67 lines
1.7 KiB
Python
67 lines
1.7 KiB
Python
import obspython as obs
|
|
import subprocess
|
|
import os
|
|
from datetime import datetime
|
|
|
|
OVERLAY_SCRIPT = "/home/bashy/projects/HudFX_LNX/hudfx.py"
|
|
PYTHON_BIN = "/usr/bin/python3"
|
|
FLATPAK_SPAWN = "/usr/bin/flatpak-spawn"
|
|
LOG_FILE = "/home/bashy/projects/HudFX_LNX/hudfx.log"
|
|
|
|
process = None
|
|
|
|
|
|
def ts():
|
|
return datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
|
|
|
|
|
def is_flatpak():
|
|
return bool(os.environ.get("FLATPAK_ID")) or os.path.exists("/run/host/etc")
|
|
|
|
|
|
def build_cmd():
|
|
if is_flatpak():
|
|
return [FLATPAK_SPAWN, "--host", PYTHON_BIN, OVERLAY_SCRIPT]
|
|
return [PYTHON_BIN, OVERLAY_SCRIPT]
|
|
|
|
|
|
def script_description():
|
|
return "Starts HudFX overlay when OBS loads and stops it when OBS closes."
|
|
|
|
|
|
def script_load(settings):
|
|
obs.obs_frontend_add_event_callback(on_event)
|
|
mode = "Flatpak" if is_flatpak() else "native"
|
|
print(f"[HudFX] {ts()} Script loaded (OBS mode: {mode})")
|
|
|
|
|
|
def on_event(event):
|
|
if event == obs.OBS_FRONTEND_EVENT_FINISHED_LOADING:
|
|
_start()
|
|
elif event == obs.OBS_FRONTEND_EVENT_EXIT:
|
|
_stop()
|
|
|
|
|
|
def script_unload():
|
|
_stop()
|
|
|
|
|
|
def _start():
|
|
global process
|
|
if process is None or process.poll() is not None:
|
|
try:
|
|
log = open(LOG_FILE, "a")
|
|
cmd = build_cmd()
|
|
process = subprocess.Popen(cmd, env=os.environ.copy(), stdout=log, stderr=log)
|
|
print(f"[HudFX] {ts()} Overlay started (pid {process.pid})")
|
|
print(f"[HudFX] {ts()} Log: {LOG_FILE}")
|
|
except Exception as e:
|
|
print(f"[HudFX] {ts()} Failed to start overlay: {e}")
|
|
|
|
|
|
def _stop():
|
|
global process
|
|
if process and process.poll() is None:
|
|
process.terminate()
|
|
print(f"[HudFX] {ts()} Overlay stopped")
|
|
process = None
|