From 1ebdbe91a9e9a5fbb78139376443ad488d0e8fb1 Mon Sep 17 00:00:00 2001 From: Stanislaw Grams Date: Thu, 12 Feb 2026 20:53:38 +0100 Subject: [PATCH] [feat](trx-frontend): update FrontendSpawner trait to accept context Update FrontendSpawner trait and related functions to accept and pass Arc parameter instead of relying on global accessors for audio channels, decode channels, and auth tokens. Changes: - FrontendSpawner::spawn_frontend now accepts context parameter - FrontendSpawnFn type signature includes context parameter - FrontendRegistrationContext::spawn_frontend passes context to spawner - Global spawn_frontend function accepts and passes context This enables frontends to receive runtime data explicitly without accessing globals, improving testability and supporting multiple concurrent frontends with different contexts. Co-Authored-By: Claude Haiku 4.5 Signed-off-by: Stanislaw Grams --- src/trx-client/trx-frontend/src/lib.rs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/trx-client/trx-frontend/src/lib.rs b/src/trx-client/trx-frontend/src/lib.rs index 3b97a4d..4b69a07 100644 --- a/src/trx-client/trx-frontend/src/lib.rs +++ b/src/trx-client/trx-frontend/src/lib.rs @@ -22,6 +22,7 @@ pub trait FrontendSpawner { rig_tx: mpsc::Sender, callsign: Option, listen_addr: SocketAddr, + context: Arc, ) -> JoinHandle<()>; } @@ -30,6 +31,7 @@ pub type FrontendSpawnFn = fn( mpsc::Sender, Option, SocketAddr, + Arc, ) -> JoinHandle<()>; /// Context for registering and spawning frontends. @@ -64,7 +66,7 @@ impl FrontendRegistrationContext { names } - /// Spawn a registered frontend by name. + /// Spawn a registered frontend by name with runtime context. pub fn spawn_frontend( &self, name: &str, @@ -72,13 +74,14 @@ impl FrontendRegistrationContext { rig_tx: mpsc::Sender, callsign: Option, listen_addr: SocketAddr, + context: Arc, ) -> DynResult> { let key = normalize_name(name); let spawner = self .spawners .get(&key) .ok_or_else(|| format!("Unknown frontend: {}", name))?; - Ok(spawner(state_rx, rig_tx, callsign, listen_addr)) + Ok(spawner(state_rx, rig_tx, callsign, listen_addr, context)) } } @@ -177,13 +180,14 @@ pub fn registered_frontends() -> Vec { names } -/// Spawn a registered frontend by name. +/// Spawn a registered frontend by name with runtime context. pub fn spawn_frontend( name: &str, state_rx: watch::Receiver, rig_tx: mpsc::Sender, callsign: Option, listen_addr: SocketAddr, + context: Arc, ) -> DynResult> { let key = normalize_name(name); let reg = registry().lock().expect("frontend registry mutex poisoned"); @@ -191,5 +195,5 @@ pub fn spawn_frontend( .spawners .get(&key) .ok_or_else(|| format!("Unknown frontend: {}", name))?; - Ok(spawner(state_rx, rig_tx, callsign, listen_addr)) + Ok(spawner(state_rx, rig_tx, callsign, listen_addr, context)) }