diff --git a/config_loader.py b/config_loader.py index 8ae61d7..e3ebba0 100644 --- a/config_loader.py +++ b/config_loader.py @@ -202,7 +202,8 @@ def list_notification_urls() -> list[dict]: events_str = cfg.get("notifications", f"events_{idx}", fallback="finished,failed,cancelled") events = [e.strip() for e in events_str.split(",") if e.strip()] include_image = cfg.get("notifications", f"image_{idx}", fallback="false").strip().lower() in ("1", "true", "yes") - result.append({"url": url, "events": events, "include_image": include_image}) + enabled = cfg.get("notifications", f"enabled_{idx}", fallback="true").strip().lower() in ("1", "true", "yes") + result.append({"url": url, "events": events, "include_image": include_image, "enabled": enabled}) idx += 1 return result diff --git a/kobrax_moonraker_bridge.py b/kobrax_moonraker_bridge.py index fcc2c6d..6ac5e90 100644 --- a/kobrax_moonraker_bridge.py +++ b/kobrax_moonraker_bridge.py @@ -1111,7 +1111,8 @@ class KobraXBridge: def _notify(self, event: str, filename: str = ""): if self._notifications_paused: return - matching = [e for e in self._notification_urls if event in e.get("events", [])] + matching = [e for e in self._notification_urls + if e.get("enabled", True) and event in e.get("events", [])] if not matching: return printer_name = self._state.get("printer_name", "KX-Bridge") @@ -1194,7 +1195,8 @@ class KobraXBridge: def _check_progress_notifications(self): if self._state.get("kobra_state") != "printing": return - if not any("progress" in e.get("events", []) for e in self._notification_urls): + if not any("progress" in e.get("events", []) for e in self._notification_urls + if e.get("enabled", True)): return if self._notify_every_minutes == 0 and self._notify_every_layers == 0: return @@ -4453,12 +4455,14 @@ class KobraXBridge: continue events = [e for e in entry.get("events", []) if e in valid_events] include_image = bool(entry.get("include_image", False)) - entries.append({"url": url, "events": events, "include_image": include_image}) + enabled = bool(entry.get("enabled", True)) + entries.append({"url": url, "events": events, "include_image": include_image, "enabled": enabled}) cfg.add_section("notifications") for i, entry in enumerate(entries, 1): cfg.set("notifications", f"url_{i}", entry["url"]) cfg.set("notifications", f"events_{i}", ",".join(entry["events"])) cfg.set("notifications", f"image_{i}", "true" if entry["include_image"] else "false") + cfg.set("notifications", f"enabled_{i}", "true" if entry["enabled"] else "false") self._notification_urls = entries elif not cfg.has_section("notifications"): cfg.add_section("notifications") diff --git a/web/themes/default/app.js b/web/themes/default/app.js index d0404c1..9763828 100644 --- a/web/themes/default/app.js +++ b/web/themes/default/app.js @@ -1565,6 +1565,7 @@ function notifRenderList(entries) { url: e.url || "", events: e.events || [], include_image: !!e.include_image, + enabled: e.enabled === undefined ? true : !!e.enabled, }; }); notifRefreshDOM(); @@ -1616,8 +1617,19 @@ function notifRefreshDOM() { (T.settings_notif_send_image || "Image") + ""; return ( - '