almost working device selector

This commit is contained in:
2026-09-05 01:47:51 +02:00
parent 2dcd07b75a
commit 6b47abcd89
5 changed files with 186 additions and 55 deletions
+39 -19
View File
@@ -15,8 +15,8 @@ use tokio::sync::broadcast;
use crate::{
audio_streams::{audio_stream_receiver, audio_stream_spawner},
models::{
CliArgs, ClientEvent, ClientInfo, InputAudioStreamsConsumers, InputAudioStreamsEncoders,
InputAudioStreamsInfo, InputAudioStreamsProducers,
AudioControl, CliArgs, ClientEvent, ClientInfo, InputAudioStreamsConsumers,
InputAudioStreamsEncoders, InputAudioStreamsInfo, InputAudioStreamsProducers,
},
tcp_connection::tcp_connection,
tui::Tui,
@@ -41,21 +41,18 @@ async fn main() {
let udp_socket = Arc::new(UdpSocket::bind("0.0.0.0:0").await.unwrap());
if cli.connect_with_defaults == None {
ratatui::run(|terminal| {
Tui::new().run(
terminal,
active_input_audio_streams_producers.clone(),
active_input_audio_streams_consumers.clone(),
active_input_audio_streams_encoders.clone(),
active_input_audio_streams_info.clone(),
udp_socket.clone(),
)
});
} else {
let audio_control: Arc<AudioControl> = Arc::new(AudioControl {
active_input_audio_streams_producers: active_input_audio_streams_producers.clone(),
active_input_audio_streams_consumers: active_input_audio_streams_consumers.clone(),
active_input_audio_streams_encoders: active_input_audio_streams_encoders.clone(),
active_input_audio_streams_info: active_input_audio_streams_info.clone(),
udp_socket: udp_socket.clone(),
});
if let Some(server_ip) = cli.connect_with_defaults {
let client_info: Arc<RwLock<ClientInfo>> = Arc::new(RwLock::new(ClientInfo {
client_id: 0,
server_address: cli.connect_with_defaults.unwrap(),
server_address: server_ip,
connected: false,
}));
@@ -63,10 +60,7 @@ async fn main() {
client_info.clone(),
global_event_tx.clone(),
global_event_tx.subscribe(),
active_input_audio_streams_producers.clone(),
active_input_audio_streams_consumers.clone(),
active_input_audio_streams_encoders.clone(),
active_input_audio_streams_info.clone(),
audio_control.clone(),
));
let _ = global_event_tx.send(ClientEvent::NewConnection);
@@ -112,4 +106,30 @@ async fn main() {
tokio::signal::ctrl_c().await.expect("failed to close");
println!("shutting down");
}
if let Some(server_ip) = cli.server_ip {
let client_info: Arc<RwLock<ClientInfo>> = Arc::new(RwLock::new(ClientInfo {
client_id: 0,
server_address: server_ip,
connected: false,
}));
tokio::spawn(tcp_connection(
client_info.clone(),
global_event_tx.clone(),
global_event_tx.subscribe(),
audio_control.clone(),
));
let _ = global_event_tx.send(ClientEvent::NewConnection);
ratatui::run(|terminal| {
Tui::new().run(
terminal,
audio_control.clone(),
global_event_tx.clone(),
client_info.clone(),
)
});
}
}