From b52b0bd98a9978f6c6d5912e2ba66d331d81d7bc Mon Sep 17 00:00:00 2001 From: Eric Callahan Date: Sat, 27 Aug 2022 08:19:03 -0400 Subject: [PATCH] webcam: improve default host handling Signed-off-by: Eric Callahan --- moonraker/components/webcam.py | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/moonraker/components/webcam.py b/moonraker/components/webcam.py index 5f4c5ed..a61c96c 100644 --- a/moonraker/components/webcam.py +++ b/moonraker/components/webcam.py @@ -58,14 +58,14 @@ class WebcamManager: "/server/webcams/test", ["POST"], self._handle_webcam_test ) self.server.register_notification("webcam:webcams_changed") + self.server.register_event_handler( + "machine:public_ip_changed", self._set_default_host_ip + ) async def component_init(self) -> None: machine: Machine = self.server.lookup_component("machine") - pubnet = await machine.get_public_network() - ip: Optional[str] = pubnet.get("address") - if ip: - default_host = f"http://{ip}" - WebCam.set_default_host(default_host) + if machine.public_ip: + self._set_default_host_ip(machine.public_ip) db: MoonrakerDatabase = self.server.lookup_component("database") saved_cams: Dict[str, Any] = await db.get_item("webcams", default={}) for cam_data in saved_cams.values(): @@ -78,6 +78,21 @@ class WebcamManager: logging.exception("Failed to process webcam from db") continue + def _set_default_host_ip(self, ip: str) -> None: + default_host = "http://127.0.0.1" + if ip: + try: + addr = ipaddress.ip_address(ip) + except Exception: + logging.debug(f"Invalid IP Recd: {ip}") + else: + if addr.version == 6: + default_host = f"http://[{addr}]" + else: + default_host = f"http://{addr}" + WebCam.set_default_host(default_host) + logging.info(f"Default public webcam address set: {default_host}") + def get_webcams(self) -> Dict[str, WebCam]: return self.webcams