diff options
| author | Danilo M. <danix@danix.xyz> | 2026-11-09 18:25:59 +0100 |
|---|---|---|
| committer | Danilo M. <danix@danix.xyz> | 2026-11-09 18:25:59 +0100 |
| commit | 7f99167f0b6a3c83bf77e20bc5e03942b901fb71 (patch) | |
| tree | 6b60263b6f702e6088eae30087c6dfa2a5a71f4c /deckit/modules/obs.py | |
| parent | 03e2adab3fb58532ba1e32c2f01a9ec14f11e484 (diff) | |
| download | deck-it-7f99167f0b6a3c83bf77e20bc5e03942b901fb71.tar.gz deck-it-7f99167f0b6a3c83bf77e20bc5e03942b901fb71.zip | |
fix: OBS idle timeout, payload validation, workspace list
Diffstat (limited to 'deckit/modules/obs.py')
| -rw-r--r-- | deckit/modules/obs.py | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/deckit/modules/obs.py b/deckit/modules/obs.py index f4bf71a..96217c4 100644 --- a/deckit/modules/obs.py +++ b/deckit/modules/obs.py @@ -18,6 +18,7 @@ def make(cfg: dict) -> Module: host=o.get("host", "127.0.0.1"), port=o.get("port", 4455), password=o.get("password", "")) lock = threading.Lock() stop = threading.Event() + last_error = {"msg": None} def req(kind, data=None): with lock: @@ -28,13 +29,14 @@ def make(cfg: dict) -> Module: if not getattr(client, "connected", False): try: client.connect() - except Exception: - pass + last_error["msg"] = None + except Exception as e: + last_error["msg"] = str(e) or type(e).__name__ stop.wait(5) def state(): if not getattr(client, "connected", False): - return {"connected": False} + return {"connected": False, "error": last_error["msg"]} try: scenes = req("GetSceneList") rec = req("GetRecordStatus") @@ -80,11 +82,17 @@ def make(cfg: dict) -> Module: raise ModuleError("scene required") req("SetCurrentProgramScene", {"sceneName": name}) + def flag(body): + on = body.get("on") + if not isinstance(on, bool): + raise ModuleError('"on" must be true or false') + return on + def record(body): - req("StartRecord" if body.get("on") else "StopRecord") + req("StartRecord" if flag(body) else "StopRecord") def stream(body): - req("StartStream" if body.get("on") else "StopStream") + req("StartStream" if flag(body) else "StopStream") def mute(body): req("SetInputMute", {"inputName": str(body.get("input")), "inputMuted": bool(body.get("muted"))}) |
