From 0a538281e50205842dda083b33697013b4c41f29 Mon Sep 17 00:00:00 2001 From: Steven Engelbert Date: Mon, 2 Jun 2025 16:13:29 -0400 Subject: [PATCH 1/3] Disconnect zones from source when stream disconnects --- amplipi/app.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/amplipi/app.py b/amplipi/app.py index 4b20a78be..9bdaf6488 100644 --- a/amplipi/app.py +++ b/amplipi/app.py @@ -339,6 +339,12 @@ def set_source(update: models.SourceUpdate, ctrl: Api = Depends(get_ctrl), sid: valid_update = update.copy() valid_update.input = f'stream={defaults.RCAs[sid]}' logging.warning(f'correcting deprecated use of RCA inputs from {update} to {valid_update}') + if update.input == 'None': + # Disconnect zones from inactive sources + zones = get_zones(ctrl=ctrl) + connected_zones = [zone.id for zone in zones["zones"] if zone.source_id == sid and zone.id is not None] # zone.id should never actually be none, but the linter worries about it + if connected_zones: + ctrl.set_zones(models.MultiZoneUpdate(zones=connected_zones, update=models.ZoneUpdate(source_id=-1))) return code_response(ctrl, ctrl.set_source(sid, update)) From fbc2c1780899f79f53c1705e28053340fd427cf0 Mon Sep 17 00:00:00 2001 From: Steven Engelbert Date: Mon, 2 Jun 2025 16:36:17 -0400 Subject: [PATCH 2/3] Linting --- amplipi/app.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/amplipi/app.py b/amplipi/app.py index 9bdaf6488..06eb4f123 100644 --- a/amplipi/app.py +++ b/amplipi/app.py @@ -342,7 +342,7 @@ def set_source(update: models.SourceUpdate, ctrl: Api = Depends(get_ctrl), sid: if update.input == 'None': # Disconnect zones from inactive sources zones = get_zones(ctrl=ctrl) - connected_zones = [zone.id for zone in zones["zones"] if zone.source_id == sid and zone.id is not None] # zone.id should never actually be none, but the linter worries about it + connected_zones = [zone.id for zone in zones["zones"] if zone.source_id == sid and zone.id is not None] # zone.id should never actually be none, but the linter worries about it if connected_zones: ctrl.set_zones(models.MultiZoneUpdate(zones=connected_zones, update=models.ZoneUpdate(source_id=-1))) return code_response(ctrl, ctrl.set_source(sid, update)) From f9a8b0caad289753bfcfcd278d4f0184e3d1c311 Mon Sep 17 00:00:00 2001 From: SteveMicroNova Date: Mon, 17 Nov 2025 16:06:30 -0500 Subject: [PATCH 3/3] Decouple set_source endpoint from get_zones endpoint --- amplipi/app.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/amplipi/app.py b/amplipi/app.py index 06eb4f123..642d722e4 100644 --- a/amplipi/app.py +++ b/amplipi/app.py @@ -341,7 +341,7 @@ def set_source(update: models.SourceUpdate, ctrl: Api = Depends(get_ctrl), sid: logging.warning(f'correcting deprecated use of RCA inputs from {update} to {valid_update}') if update.input == 'None': # Disconnect zones from inactive sources - zones = get_zones(ctrl=ctrl) + zones = ctrl.get_state().zones connected_zones = [zone.id for zone in zones["zones"] if zone.source_id == sid and zone.id is not None] # zone.id should never actually be none, but the linter worries about it if connected_zones: ctrl.set_zones(models.MultiZoneUpdate(zones=connected_zones, update=models.ZoneUpdate(source_id=-1)))