mirror of
https://github.com/gesellix/Bose-SoundTouch.git
synced 2026-08-18 16:46:17 +00:00
Make the datastore the single source of truth for the embedded web UI and stop running a second mDNS/UPnP stack inside the same process. - The embedded web app no longer creates its own discovery service. Its "discover" action (POST /api/control/discover) now triggers the service's own sweep via a new WebApp.TriggerDiscovery hook (wired to server.DiscoverDevices), which writes results to the shared datastore. - DiscoverDevices: when TriggerDiscovery is set it runs the external sweep and re-syncs from ExtraDeviceHosts (the datastore) without any own mDNS; it only runs its own sweep when given a non-nil discovery service (standalone soundtouch-web, unchanged). - Liveness: server.SetDevicesChangedHook fires after a discovery sweep (server.DiscoverDevices) and after a manual add (HandleAddManualDevice); the embedded build re-seeds the web registry and broadcasts the updated device list, so speakers found by the service's periodic discovery or added via /setup appear in the UI without a manual refresh. - setupRouter no longer takes a web discovery service (it was always nil for the service); MountWeb is mounted with a nil discovery service. Removing devices live still needs a web-registry delete path (the registry only adds today); that is a separate follow-up. Routes are unchanged, so the router golden file is untouched. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>