]> skyeroc.xyz Git - obs-ctl/commitdiff
Finish connection settings
authorsbkelley <sb24kelley@gmail.com>
Sat, 6 Dec 2025 01:30:22 +0000 (20:30 -0500)
committersbkelley <sb24kelley@gmail.com>
Sat, 6 Dec 2025 01:30:22 +0000 (20:30 -0500)
src/obs_ctl/app.py
src/obs_ctl/interface/molecule/settings_block/pane.py
src/obs_ctl/interface/obs/obs.py

index 2660c230f7b116826eb9b1862e31e451ecd33e93..079cd9fc057a7f22a89b16bb477d98e1b61f2979 100644 (file)
@@ -87,7 +87,7 @@ class OBSCtlApp(App):
         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
+            obs_websocket_pane.disable_contents()
     
 
     @on(RecordControls.OBSWSDisconnected, "#record_controls")
@@ -96,7 +96,7 @@ class OBSCtlApp(App):
         obs_websocket_pane = self.query_exactly_one("#obs_websocket_pane")
         self._query_api("disconnect")
         if not api.is_connected:
-            obs_websocket_pane.disabled = False
+            obs_websocket_pane.enable_contents()
 
     
     def _query_api(self, query: str, *args, **kwargs):
index c61d49f8b46078b3621c16a211cdc60451c66c19..ed3739dd32344d32e240945b1c3239414a612fda 100644 (file)
@@ -17,6 +17,15 @@ class SettingsMSGBase(MSGBase):
         super().__init__(control, _log_me=_log_me)
         self.value = value
 
+class PaneBase(TabPane):
+    def disable_contents(self):
+        container: ScrollableContainer = self.query_exactly_one(".--container")
+        container.disabled = True
+    
+    def enable_contents(self):
+        container: ScrollableContainer = self.query_exactly_one(".--container")
+        container.disabled = False
+
 class SettingsType(Enum):
     """(widget_class, setting type, listener message, widget-expected type)"""
     STRING = (partial(Input, compact=True), str, Input.Submitted, str)
@@ -44,7 +53,7 @@ class SettingsType(Enum):
         return self.value[3]
 
 
-def make_pane_subclass(cls_name: str, settings_list: list, settings_type_list: list, defaults_list) -> TabPane:
+def make_pane_subclass(cls_name: str, settings_list: list, settings_type_list: list, defaults_list) -> PaneBase:
     """Creates a new TabPane subclass with cls_name as its name.
     
      settings_list should be a list of names for settings.
@@ -79,7 +88,7 @@ def make_pane_subclass(cls_name: str, settings_list: list, settings_type_list: l
 
     def make_compose():
         def output_func(self):
-            with ScrollableContainer():
+            with ScrollableContainer(classes="--container"):
                 with Grid():
                     for setting, control_and_type, setting_default in loop_list:
                         ctrl_id = f"{setting_type.widget.func.__name__.lower()}_{setting}"
@@ -120,7 +129,7 @@ def make_pane_subclass(cls_name: str, settings_list: list, settings_type_list: l
     new_dict["compose"] = make_compose()
     
     # Construct the actual class and return it
-    new_pane = type(cls_name, (TabPane,), new_dict)
+    new_pane = type(cls_name, (PaneBase,), new_dict)
     return new_pane
         
 def snake_to_camel(string: str):
index b49a5d8ee1e3fe5e46a5655727ad92e2a4d0e6e0..656a7467aebd106b13dfe09f7c5d7e6ee041344d 100644 (file)
@@ -316,6 +316,10 @@ class API(Static):
         port = self.ws_port if port is None else port
         password = self.ws_password if password is None else password
         timeout = self.ws_timeout if timeout is None else timeout
+        self.ws_host = host
+        self.ws_port = port
+        self.ws_password = password
+        self.ws_timeout = timeout
         try:
             logger.info(f"Connecting to OBS WebSocket at {host}:{port}")
             self.request_client = obs.ReqClient(
@@ -330,7 +334,7 @@ class API(Static):
                 password=password,
                 timeout=timeout
             )
-        except ConnectionRefusedError as err:
+        except (ConnectionRefusedError, TimeoutError) as err:
             logger.debug(err)
         else:
             self.is_connected = True