forked from viewit/KX-Bridge-Release
fix: missing notification function and config example
This commit is contained in:
@ -116,3 +116,17 @@ custom_3_duration_sec = 14400
|
||||
# Wie oft (Sekunden) der Filamentverbrauch während des Drucks gemeldet wird
|
||||
# (0 = nur beim Druckende)
|
||||
# sync_rate = 0
|
||||
|
||||
[notifications]
|
||||
# Push-Benachrichtigungen via Apprise (60+ Dienste: discord://, telegram://,
|
||||
# pover://, gotify://, slack://, ...). Wird normalerweise über die Web-UI
|
||||
# (Einstellungen → Benachrichtigungen) gepflegt.
|
||||
# Beispiel:
|
||||
# url_1 = discord://webhook_id/webhook_token
|
||||
# events_1 = started,finished,failed,cancelled,paused,progress
|
||||
# image_1 = false
|
||||
# enabled_1 = true
|
||||
#
|
||||
# Wiederholungsintervall für "progress"-Events (0 = aus)
|
||||
# notify_every_minutes = 10
|
||||
# notify_every_layers = 0
|
||||
|
||||
@ -194,6 +194,41 @@ def list_printers() -> list[dict]:
|
||||
idx += 1
|
||||
return printers
|
||||
|
||||
def list_notification_urls() -> list[dict]:
|
||||
"""Reads the [notifications] section from config.ini.
|
||||
|
||||
Written by handle_api_settings_post() in kobrax_moonraker_bridge.py as
|
||||
url_N / events_N / image_N / enabled_N keys (N starting at 1). Stops at
|
||||
the first missing url_N.
|
||||
|
||||
Returns a list of {"url": str, "events": list[str], "include_image": bool,
|
||||
"enabled": bool} dicts, in the same shape _notify() expects.
|
||||
"""
|
||||
path = _find_config_file()
|
||||
if not path:
|
||||
return []
|
||||
cfg = configparser.ConfigParser()
|
||||
cfg.read(path, encoding="utf-8")
|
||||
section = "notifications"
|
||||
if not cfg.has_section(section):
|
||||
return []
|
||||
entries: list[dict] = []
|
||||
idx = 1
|
||||
while cfg.has_option(section, f"url_{idx}"):
|
||||
url = cfg.get(section, f"url_{idx}", fallback="").strip()
|
||||
if url:
|
||||
events_raw = cfg.get(section, f"events_{idx}", fallback="")
|
||||
events = [e.strip() for e in events_raw.split(",") if e.strip()]
|
||||
entries.append({
|
||||
"url": url,
|
||||
"events": events,
|
||||
"include_image": cfg.getboolean(section, f"image_{idx}", fallback=False),
|
||||
"enabled": cfg.getboolean(section, f"enabled_{idx}", fallback=True),
|
||||
})
|
||||
idx += 1
|
||||
return entries
|
||||
|
||||
|
||||
def _filament_section(printer_id: Optional[str] = None) -> str:
|
||||
"""Section name holding a printer's filament-profile mapping.
|
||||
|
||||
|
||||
@ -1595,6 +1595,21 @@ class KobraXBridge:
|
||||
self._spoolman_notify_end()
|
||||
self._current_job_id = ""
|
||||
|
||||
# Benachrichtigungen bei Statuswechsel (filename vor Cleanup holen)
|
||||
if kobra_state and kobra_state != self._prev_kobra_state:
|
||||
_notif_filename = d.get("filename", self._state.get("filename", ""))
|
||||
if kobra_state == "printing":
|
||||
self._notify("started", _notif_filename)
|
||||
elif kobra_state == "finished":
|
||||
self._notify("finished", _notif_filename)
|
||||
elif kobra_state == "failed":
|
||||
self._notify("failed", _notif_filename)
|
||||
elif kobra_state in ("stoped", "canceled"):
|
||||
self._notify("cancelled", _notif_filename)
|
||||
elif kobra_state in ("pause", "paused"):
|
||||
self._notify("paused", _notif_filename)
|
||||
self._prev_kobra_state = kobra_state
|
||||
|
||||
# Terminal states (successful finish AND stop/cancel) must leave the
|
||||
# same clean end state - a "finished" print used to only clear
|
||||
# file_ready (Issue #29), leaving progress/filename/duration/layer
|
||||
|
||||
Reference in New Issue
Block a user