]> skyeroc.xyz Git - obs-ctl/commitdiff
Disable websocket settings on connect
authorsbkelley <sb24kelley@gmail.com>
Sat, 6 Dec 2025 01:18:17 +0000 (20:18 -0500)
committersbkelley <sb24kelley@gmail.com>
Sat, 6 Dec 2025 01:18:17 +0000 (20:18 -0500)
src/obs_ctl/app.py
src/obs_ctl/interface/molecule/settings_block/settings_block.py
src/obs_ctl/interface/obs/obs.py

index f4643ee5bbebf661589b62be1ed2e23a6018c537..2660c230f7b116826eb9b1862e31e451ecd33e93 100644 (file)
@@ -36,6 +36,10 @@ class OBSCtlApp(App):
                     yield StatsDisplay(id="stats_display", classes="section")
 
 
+    def on_mount(self, message):
+        self.on_obs_ws_connected(None)
+
+
     @on(obs.API.Report, "#api")
     def on_api_report(self, message: obs.API.Report):
         self.update_monitors(message.data)
@@ -75,19 +79,31 @@ class OBSCtlApp(App):
 
     @on(RecordControls.OBSWSConnected, "#record_controls")
     def on_obs_ws_connected(self, message: RecordControls.OBSWSConnected):
-        self._query_api("connect")
+        api: obs.API = self.query_exactly_one("#api")
+        obs_websocket_pane = self.query_exactly_one("#obs_websocket_pane")
+        host_setting = obs_websocket_pane.host
+        port_setting = obs_websocket_pane.port
+        password_setting = obs_websocket_pane.password
+        timeout_setting = obs_websocket_pane.timeout
+        self._query_api("connect", host=host_setting, port=port_setting, password=password_setting, timeout=timeout_setting)
+        if api.is_connected:
+            obs_websocket_pane.disabled = True
     
 
     @on(RecordControls.OBSWSDisconnected, "#record_controls")
     def on_obs_ws_disconnected(self, message: RecordControls.OBSWSDisconnected):
+        api: obs.API = self.query_exactly_one("#api")
+        obs_websocket_pane = self.query_exactly_one("#obs_websocket_pane")
         self._query_api("disconnect")
+        if not api.is_connected:
+            obs_websocket_pane.disabled = False
 
     
     def _query_api(self, query: str, *args, **kwargs):
         api: obs.API = self.query_exactly_one("#api")
-        getattr(api, query)(*args, **kwargs)
+        return getattr(api, query)(*args, **kwargs)
 
-    @on(settings_block.OBSSettingsPane.RecordPathChanged, "#settings-content")
+    @on(OBSSettingsPane.RecordPathChanged, "#obs_settings_pane")
     def on_settings_block_record_path_changed(self, message):
         api: obs.API = self.query_exactly_one("#api")
         api.set_record_path(message.value)
@@ -95,7 +111,7 @@ class OBSCtlApp(App):
 
     def update_monitors(self, obs_stats: obs.OBSStats):
         record_controls: RecordControls = self.query_exactly_one("#record_controls")
-        obs_settings = self.query_exactly_one("#settings-content")
+        obs_settings = self.query_exactly_one("#obs_settings_pane")
         stats_display: StatsDisplay = self.query_exactly_one("#stats_display")
 
         record_controls.obsws_connected = obs_stats.obsws_connection_active
index f4e6c3b73f6931a00de7065257940fc69a7fd04c..b0fb94012f84adeecb1dae3121f82756f3ddcd60 100644 (file)
@@ -31,6 +31,6 @@ OBSCTLPane = pane.make_pane_subclass(
 class SettingsBlock(Container):
     def compose(self):
         with TabbedContent(classes="settings_block--tabbed-content"):
-            yield OBSSettingsPane("OBS Settings", id="settings-content")
-            yield OBSWebSocketPane("OBS WebSocket", id="websocket-content")
-            yield OBSCTLPane("obs-ctl Settings", id="obs-ctl-content")
+            yield OBSSettingsPane("OBS Settings", id="obs_settings_pane")
+            yield OBSWebSocketPane("OBS WebSocket", id="obs_websocket_pane")
+            yield OBSCTLPane("obs-ctl Settings", id="obs_ctl_pane")
index 6c77f6c1a10bb0eafe4a716ba64feccb113f9d27..b49a5d8ee1e3fe5e46a5655727ad92e2a4d0e6e0 100644 (file)
@@ -214,7 +214,7 @@ class API(Static):
         self.set_reactive(API.ws_port, ws_port)
         self.set_reactive(API.ws_password, ws_password)
         self.set_reactive(API.ws_timeout, ws_timeout)
-        self.connect(host=ws_host, port=ws_port, password=ws_password, timeout=ws_timeout)
+        self.connect(host=ws_host, port=ws_port, password=ws_password, timeout=ws_timeout)
 
 
     def on_mount(self):