From 6a148840632c22cf29ae000ebd111b4b1aefd8a2 Mon Sep 17 00:00:00 2001 From: Shawn Date: Sun, 14 Jun 2026 12:50:53 -0400 Subject: [PATCH] fix: add leds+midi to WebServerDeps, runtime apply for brightness (LED set_brightness) and channel_mode (pipeline routing_mode) --- main.py | 2 ++ src/web/server.py | 24 ++++++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/main.py b/main.py index 05ea0e3..a3d56d8 100644 --- a/main.py +++ b/main.py @@ -271,6 +271,8 @@ class PedalApp: jack_audio=self.jack_audio, config=self._config, config_path=self._config_path, + leds=self.leds, + midi=self.midi, ), host="0.0.0.0", port=8080, diff --git a/src/web/server.py b/src/web/server.py index 2b380d4..eb22af8 100644 --- a/src/web/server.py +++ b/src/web/server.py @@ -43,6 +43,8 @@ from ..system.tonedownload import ( ) from ..system.audio import AudioSystem, JackAudioClient, LATENCY_PROFILES from ..system.config import save_config +from ..ui.leds import LEDController +from ..midi.handler import MIDIHandler logger = logging.getLogger(__name__) @@ -212,6 +214,10 @@ class WebServerDeps: config: Optional[dict] = None config_path: Optional[Path] = None + # Runtime subsystems (for live apply of settings changes) + leds: Optional[LEDController] = None + midi: Optional[MIDIHandler] = None + @property def is_connected(self) -> bool: """True if we're wired to a live pedal instance (any channel).""" @@ -1584,6 +1590,24 @@ class WebServer: save_config(cfg, self.deps.config_path) logger.info("Settings saved: %d keys from %s", n_saved, data) + # ── Runtime apply for live-updatable settings ────────── + if "brightness" in data and self.deps.leds is not None: + try: + bv = data["brightness"] + if isinstance(bv, (int, float)) and bv >= 1: + bv = bv / 10.0 + self.deps.leds.set_brightness(float(bv)) + except Exception as e: + logger.warning("Failed to apply brightness: %s", e) + + if "channel_mode" in data and self.deps.pipeline is not None: + try: + mode = str(data["channel_mode"]) + self.deps.pipeline.routing_mode = "4cm" if mode == "stereo_4cm" else "mono" + logger.info("Pipeline routing_mode set to %s", self.deps.pipeline.routing_mode) + except Exception as e: + logger.warning("Failed to apply channel_mode: %s", e) + return {"ok": True, "saved": n_saved} # ── FX block param schemas ───────────────────────────────