From c91ba66801ea2a3d2d97ef7e35e033dd68ca69c9 Mon Sep 17 00:00:00 2001 From: Gangoke Date: Tue, 16 Jun 2026 00:57:36 -1000 Subject: [PATCH] feat: rename file_ready_dialog to print_start_dialog for consistency --- config.ini.example | 2 +- config_loader.py | 17 ++++++++++++++--- env_loader.py | 2 +- kobrax_moonraker_bridge.py | 17 +++++++++-------- web/themes/default/app.js | 10 +++++----- 5 files changed, 30 insertions(+), 18 deletions(-) diff --git a/config.ini.example b/config.ini.example index 0ae3034..21a7f72 100644 --- a/config.ini.example +++ b/config.ini.example @@ -35,7 +35,7 @@ auto_leveling = 1 camera_on_print = 0 # Statt grünem Ready-Banner den Filament/Color-Selector automatisch öffnen (1 = an, 0 = aus) -file_ready_dialog = 1 +print_start_dialog = 1 # Warnung vor Druck von Web-Uploads (1 = an, 0 = aus) web_upload_warning = 1 diff --git a/config_loader.py b/config_loader.py index 458c425..c64de21 100644 --- a/config_loader.py +++ b/config_loader.py @@ -60,7 +60,7 @@ def _load_config_file(path: pathlib.Path): "DEFAULT_AMS_SLOT": (CONFIG_SECTION_PRINT, "default_ams_slot"), "AUTO_LEVELING": (CONFIG_SECTION_PRINT, "auto_leveling"), "CAMERA_ON_PRINT": (CONFIG_SECTION_PRINT, "camera_on_print"), - "FILE_READY_DIALOG": (CONFIG_SECTION_PRINT, "file_ready_dialog"), + "PRINT_START_DIALOG": (CONFIG_SECTION_PRINT, "print_start_dialog"), "WEB_UPLOAD_WARNING": (CONFIG_SECTION_PRINT, "web_upload_warning"), "BRIDGE_PRINTER_NAME": (CONFIG_SECTION_BRIDGE, "printer_name"), } @@ -73,6 +73,17 @@ def _load_config_file(path: pathlib.Path): except (configparser.NoSectionError, configparser.NoOptionError): pass + # Backward compatibility: legacy option and env var + if "PRINT_START_DIALOG" not in os.environ: + try: + legacy = cfg.get(CONFIG_SECTION_PRINT, "file_ready_dialog") + if legacy: + os.environ["PRINT_START_DIALOG"] = legacy + except (configparser.NoSectionError, configparser.NoOptionError): + pass + if "PRINT_START_DIALOG" not in os.environ and "FILE_READY_DIALOG" in os.environ: + os.environ["PRINT_START_DIALOG"] = os.environ["FILE_READY_DIALOG"] + def migrate_env_to_config(env_path: pathlib.Path, config_path: pathlib.Path): """Einmalige Migration: .env → config.ini anlegen.""" @@ -99,7 +110,7 @@ def migrate_env_to_config(env_path: pathlib.Path, config_path: pathlib.Path): "default_ams_slot": env_vals.get("DEFAULT_AMS_SLOT", "auto"), "auto_leveling": env_vals.get("AUTO_LEVELING", "1"), "camera_on_print": env_vals.get("CAMERA_ON_PRINT", "0"), - "file_ready_dialog": env_vals.get("FILE_READY_DIALOG", "1"), + "print_start_dialog": env_vals.get("PRINT_START_DIALOG", env_vals.get("FILE_READY_DIALOG", "1")), "web_upload_warning": env_vals.get("WEB_UPLOAD_WARNING", "1"), } cfg[CONFIG_SECTION_BRIDGE] = { @@ -260,5 +271,5 @@ DEVICE_ID = get("DEVICE_ID", "") DEFAULT_AMS_SLOT = get("DEFAULT_AMS_SLOT", "auto") AUTO_LEVELING = int(get("AUTO_LEVELING","1")) CAMERA_ON_PRINT = int(get("CAMERA_ON_PRINT","0")) -FILE_READY_DIALOG = int(get("FILE_READY_DIALOG","1")) +PRINT_START_DIALOG = int(get("PRINT_START_DIALOG", get("FILE_READY_DIALOG","1"))) WEB_UPLOAD_WARNING = int(get("WEB_UPLOAD_WARNING", "1")) diff --git a/env_loader.py b/env_loader.py index c83488c..5ed9379 100644 --- a/env_loader.py +++ b/env_loader.py @@ -48,4 +48,4 @@ MODE_ID = get("MODE_ID", "") DEVICE_ID = get("DEVICE_ID", "") DEFAULT_AMS_SLOT = get("DEFAULT_AMS_SLOT", "auto") AUTO_LEVELING = int(get("AUTO_LEVELING", "1")) -FILE_READY_DIALOG = int(get("FILE_READY_DIALOG", "1")) +PRINT_START_DIALOG = int(get("PRINT_START_DIALOG", get("FILE_READY_DIALOG", "1"))) diff --git a/kobrax_moonraker_bridge.py b/kobrax_moonraker_bridge.py index cc95204..555608d 100644 --- a/kobrax_moonraker_bridge.py +++ b/kobrax_moonraker_bridge.py @@ -783,7 +783,7 @@ class KobraXBridge: "print_speed_mode": 2, "connection_error": "", "file_ready": "", - "file_ready_dialog": getattr(args, "file_ready_dialog", 0), + "print_start_dialog": getattr(args, "print_start_dialog", 0), "filament_mode": "toolhead", "ace_drying": {"status": 0, "target_temp": 0, "duration": 0, "remain_time": 0, "humidity": None, "current_temp": None}, } @@ -3760,7 +3760,7 @@ class KobraXBridge: "thumbnail": thumbnail, "connection_error": s["connection_error"], "file_ready": s["file_ready"], - "file_ready_dialog": getattr(self._args, "file_ready_dialog", 1), + "print_start_dialog": getattr(self._args, "print_start_dialog", 1), "version": self._read_version(), }) @@ -3898,7 +3898,7 @@ class KobraXBridge: "default_ams_slot": getattr(self._args, "default_ams_slot", "auto"), "auto_leveling": getattr(self._args, "auto_leveling", 1), "camera_on_print": getattr(self._args, "camera_on_print", 0), - "file_ready_dialog": getattr(self._args, "file_ready_dialog", 1), + "print_start_dialog": getattr(self._args, "print_start_dialog", 1), "web_upload_warning": getattr(self._args, "web_upload_warning", 1), "ace_dry_presets": self._ace_dry_presets, }) @@ -3929,8 +3929,8 @@ class KobraXBridge: cfg.set("print", "default_ams_slot", str(data.get("default_ams_slot", getattr(self._args, "default_ams_slot", "auto")))) cfg.set("print", "auto_leveling", str(data.get("auto_leveling", getattr(self._args, "auto_leveling", 1)))) cfg.set("print", "camera_on_print", str(int(bool(data.get("camera_on_print", getattr(self._args, "camera_on_print", 0)))))) - file_ready_dialog = int(bool(data.get("file_ready_dialog", getattr(self._args, "file_ready_dialog", 0)))) - cfg.set("print", "file_ready_dialog", str(file_ready_dialog)) + print_start_dialog = int(bool(data.get("print_start_dialog", data.get("file_ready_dialog", getattr(self._args, "print_start_dialog", 0))))) + cfg.set("print", "print_start_dialog", str(print_start_dialog)) cfg.set("print", "web_upload_warning", str(int(bool(data.get("web_upload_warning", getattr(self._args, "web_upload_warning", 1)))))) if not cfg.has_option("bridge", "poll_interval"): cfg.set("bridge", "poll_interval", "3") @@ -3940,7 +3940,7 @@ class KobraXBridge: elif cfg.has_option("bridge", "printer_name"): cfg.remove_option("bridge", "printer_name") - self._args.file_ready_dialog = file_ready_dialog + self._args.print_start_dialog = print_start_dialog self._args.auto_leveling = int(data.get("auto_leveling", getattr(self._args, "auto_leveling", 1))) incoming_presets = data.get("ace_dry_presets") if isinstance(data, dict) else None @@ -4101,7 +4101,7 @@ class KobraXBridge: # die alten Werte statt der geänderten config.ini. for _k in ("PRINTER_IP", "MQTT_PORT", "MQTT_USERNAME", "MQTT_PASSWORD", "MODE_ID", "DEVICE_ID", "DEFAULT_AMS_SLOT", "AUTO_LEVELING", - "CAMERA_ON_PRINT", "FILE_READY_DIALOG", "WEB_UPLOAD_WARNING", "BRIDGE_PRINTER_NAME"): + "CAMERA_ON_PRINT", "PRINT_START_DIALOG", "FILE_READY_DIALOG", "WEB_UPLOAD_WARNING", "BRIDGE_PRINTER_NAME"): os.environ.pop(_k, None) in_docker = os.path.exists("/.dockerenv") or os.environ.get("KX_IN_DOCKER") @@ -4993,7 +4993,8 @@ def main(): parser.add_argument("--default-ams-slot",default=env_loader.DEFAULT_AMS_SLOT) parser.add_argument("--auto-leveling", type=int, default=env_loader.AUTO_LEVELING) parser.add_argument("--camera-on-print", type=int, default=env_loader.CAMERA_ON_PRINT) - parser.add_argument("--file-ready-dialog", type=int, default=env_loader.FILE_READY_DIALOG) + parser.add_argument("--print-start-dialog", type=int, default=env_loader.PRINT_START_DIALOG) + parser.add_argument("--file-ready-dialog", dest="print_start_dialog", type=int) parser.add_argument("--web-upload-warning", type=int, default=env_loader.WEB_UPLOAD_WARNING) parser.add_argument("--host", default="0.0.0.0", diff --git a/web/themes/default/app.js b/web/themes/default/app.js index 5c67f15..31c359a 100644 --- a/web/themes/default/app.js +++ b/web/themes/default/app.js @@ -649,7 +649,7 @@ function applyState(){ var filamentDialogOpen=!!(filamentDialog&&filamentDialog.classList.contains('open')); var readyFile=s.file_ready||''; var readyStandby=!!(readyFile&&s.print_state==='standby'); - var dialogMode=!!s.file_ready_dialog; + var dialogMode=!!(s.print_start_dialog!==undefined?s.print_start_dialog:s.file_ready_dialog); if(frb){ if(readyStandby&&!dialogMode){ document.getElementById('file-ready-name').textContent=readyFile; @@ -954,7 +954,7 @@ function openSettings(){ document.getElementById('s-auto-leveling').checked=(d.auto_leveling===undefined?true:!!d.auto_leveling); S.auto_leveling=(d.auto_leveling===undefined?1:(d.auto_leveling?1:0)); var cop=document.getElementById('s-camera-on-print');if(cop)cop.checked=!!d.camera_on_print; - var frm=document.getElementById('s-file-ready-mode');if(frm)frm.value=Number(d.file_ready_dialog)?'dialog':'banner'; + var frm=document.getElementById('s-file-ready-mode');if(frm)frm.value=Number((d.print_start_dialog!==undefined)?d.print_start_dialog:d.file_ready_dialog)?'dialog':'banner'; var wuw=document.getElementById('s-web-upload-warning');if(wuw)wuw.checked=(d.web_upload_warning===undefined?true:!!d.web_upload_warning); }); var v=localStorage.getItem('pollInterval')||'2000'; @@ -1333,8 +1333,8 @@ function saveSettings(){ btn.disabled=true;btn.textContent='…'; var webUploadWarning=(document.getElementById('s-web-upload-warning')||{}).checked?1:0; S.web_upload_warning=webUploadWarning; - var fileReadyDialog=(document.getElementById('s-file-ready-mode')||{}).value==='dialog'?1:0; - S.file_ready_dialog=fileReadyDialog; + var printStartDialog=(document.getElementById('s-file-ready-mode')||{}).value==='dialog'?1:0; + S.print_start_dialog=printStartDialog; S.auto_leveling=(document.getElementById('s-auto-leveling')||{}).checked?1:0; post('/api/settings',{ printer_name: document.getElementById('s-printer-name').value, @@ -1347,7 +1347,7 @@ function saveSettings(){ default_ams_slot: document.getElementById('s-default-slot').value, auto_leveling: document.getElementById('s-auto-leveling').checked?1:0, camera_on_print: (document.getElementById('s-camera-on-print')||{}).checked?1:0, - file_ready_dialog:fileReadyDialog, + print_start_dialog:printStartDialog, web_upload_warning:webUploadWarning, }).then(function(){ btn.textContent=T.update_restarting;