OBSPlugin/backend/backend.py

67 lines
2.0 KiB
Python

from streamcontroller_plugin_tools import BackendBase
from OBSController import OBSController
from obswebsocket import events
import os
import threading
import Pyro5.api
@Pyro5.api.expose
class Backend(BackendBase):
def __init__(self):
super().__init__()
self.OBSController = OBSController()
self.OBSController.connect_to(
host=self.frontend.get_settings().get("ip"),
port=self.frontend.get_settings().get("port"),
password=self.frontend.get_settings().get("password")
)
"""
Wrapper methods around OBSController aiming to allow a communication
between the frontend and the backend in default python data types
"""
def get_record_status(self) -> dict:
status = self.OBSController.get_record_status()
if status is None:
return
return {
"active": status.datain["outputActive"],
"paused": status.datain["outputPaused"],
"timecode": status.datain["outputTimecode"],
"duration": status.datain["outputDuration"],
"bytes": status.datain["outputBytes"]
}
def get_connected(self) -> bool:
return self.OBSController.connected
def toggle_record(self):
self.OBSController.toggle_record()
def toggle_record_pause(self):
self.OBSController.toggle_record_pause()
def connect_to(self, *args, **kwargs):
self.OBSController.connect_to(*args, **kwargs)
def get_controller(self) -> OBSController:
"""
Calling methods on the returned controller will raise a circular reference error from Pyro
"""
return self.OBSController
def get_scene_names(self) -> list[str]:
return self.OBSController.get_scenes()
def switch_to_scene(self, scene:str):
self.OBSController.switch_to_scene(scene)
print("init backend")
backend = Backend()
for t in threading.enumerate():
if t.daemon:
t.join()