fix: mute race condition + profile loading + add Update button
Bug 1 - Mute unmute not sticking (G560 and others): - Root cause: on_node_info was reading volume/mute from info->props which contains static initial values only — NOT updated at runtime. When any node info event fired, it overwrote the correct runtime state with stale initial data, causing the unmute to revert on the next graph event. - Fix: Subscribe nodes to SPA_PARAM_Props in addition to SPA_PARAM_Format. Handle SPA_PARAM_Props in on_node_param to track volume (both SPA_PROP_volume and SPA_PROP_channelVolumes averaged) and mute from the authoritative live parameter stream. Remove stale volume/mute reads from on_node_info. - Also fix mute detection in /api/mute: check "mute":true precisely instead of searching for bare "true" anywhere in the body. Bug 2 - Loading profiles does not work: - loadProfile was only applying connections when already in "activated" mode. Load now always applies the profile connections immediately. Bug 3 - No option to update an existing profile: - Add "Update" button in profile list that overwrites the profile with current connections (calls saveProfile with the existing name). - Clear the profile name input after "Save Current" succeeds. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -442,7 +442,9 @@ void WebServer::setupRoutes() {
|
||||
if (sscanf(req.body.c_str(), "{\"node_id\":%u", &node_id) == 1 ||
|
||||
sscanf(req.body.c_str(), "{\"node_id\": %u", &node_id) == 1)
|
||||
{
|
||||
bool mute = req.body.find("true") != std::string::npos;
|
||||
// Check for "mute":true precisely — the old `find("true")` was imprecise
|
||||
bool mute = req.body.find("\"mute\":true") != std::string::npos ||
|
||||
req.body.find("\"mute\": true") != std::string::npos;
|
||||
bool ok = m_engine.setNodeMute(node_id, mute);
|
||||
if (ok) broadcastGraph();
|
||||
res.set_content(ok ? "{\"ok\":true}" : "{\"ok\":false}", "application/json");
|
||||
|
||||
Reference in New Issue
Block a user