diff --git a/src/trx-client/trx-frontend/trx-frontend-http/src/api.rs b/src/trx-client/trx-frontend/trx-frontend-http/src/api.rs index 3edf8b9..0ba01d7 100644 --- a/src/trx-client/trx-frontend/trx-frontend-http/src/api.rs +++ b/src/trx-client/trx-frontend/trx-frontend-http/src/api.rs @@ -473,29 +473,41 @@ pub async fn events( }); // Channel-list change events from the virtual channel manager. + // Only forward events for this SSE session's rig so tabs viewing + // different rigs don't see each other's channel lists. let vchan_change_rx = vchan_mgr.change_tx.subscribe(); - let chan_updates = futures_util::stream::unfold(vchan_change_rx, |mut rx| async move { - loop { - match rx.recv().await { - Ok(msg) => { - if let Some(colon) = msg.find(':') { - let rig_id = &msg[..colon]; - let channels_json = &msg[colon + 1..]; - let payload = - format!("{{\"rig_id\":\"{rig_id}\",\"channels\":{channels_json}}}"); - return Some(( - Ok::(Bytes::from(format!( - "event: channels\ndata: {payload}\n\n" - ))), - rx, - )); + let session_rig_for_chan = active_rig_id.clone(); + let chan_updates = futures_util::stream::unfold( + (vchan_change_rx, session_rig_for_chan), + |(mut rx, srig)| async move { + loop { + match rx.recv().await { + Ok(msg) => { + if let Some(colon) = msg.find(':') { + let rig_id = &msg[..colon]; + // Skip channel events that belong to a different rig. + if let Some(ref expected) = srig { + if rig_id != expected.as_str() { + continue; + } + } + let channels_json = &msg[colon + 1..]; + let payload = + format!("{{\"rig_id\":\"{rig_id}\",\"channels\":{channels_json}}}"); + return Some(( + Ok::(Bytes::from(format!( + "event: channels\ndata: {payload}\n\n" + ))), + (rx, srig), + )); + } } + Err(broadcast::error::RecvError::Lagged(_)) => continue, + Err(broadcast::error::RecvError::Closed) => return None, } - Err(broadcast::error::RecvError::Lagged(_)) => continue, - Err(broadcast::error::RecvError::Closed) => return None, } - } - }); + }, + ); // Send a named "ping" event so the JS heartbeat can observe it. let pings = IntervalStream::new(time::interval(Duration::from_secs(5))) diff --git a/src/trx-client/trx-frontend/trx-frontend-http/src/audio.rs b/src/trx-client/trx-frontend/trx-frontend-http/src/audio.rs index c336f08..9c1dac4 100644 --- a/src/trx-client/trx-frontend/trx-frontend-http/src/audio.rs +++ b/src/trx-client/trx-frontend/trx-frontend-http/src/audio.rs @@ -537,13 +537,6 @@ pub async fn audio_ws( }; let mut rx_sub = rx_sub; - // Use per-rig audio info if available and rig_id was specified. - if let Some(ref rig_id) = query.rig_id { - if let Some(rig_info_rx) = context.rig_audio_info_rx(rig_id) { - info_rx = rig_info_rx; - } - } - let (response, mut session, mut msg_stream) = actix_ws::handle(&req, body)?; actix_web::rt::spawn(async move {