mirror of
https://github.com/arabianq/pipewire-soundpad.git
synced 2026-07-26 05:46:59 +00:00
refactor(daemon): Consolidate PipeWire operations into a single background actor
Replaces the previous approach of spawning new PipeWire main loops and awaiting a 100ms timeout for every `get_all_devices` call. Instead, this introduces a `PipeWireManager` which maintains a single, persistent background thread with a PipeWire main loop and registry listener. The actor caches `AudioDevice`s and `Port`s continuously in a `HashMap`, providing instantaneous responses to device queries via a channel. This architectural change replaces `Sender<Terminate>` with a simple `PwTerminator` drop-guard to manage the lifetimes of PipeWire objects (virtual mic and links) via `PwCommand::DestroyObject` without creating additional OS threads or PipeWire contexts. Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
This commit is contained in:
co-authored by
google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
parent
caf8ac19a1
commit
3f85994f83
@@ -28,7 +28,10 @@ async fn main() -> Result<()> {
|
||||
}
|
||||
|
||||
get_daemon_config(); // Initialize daemon config
|
||||
create_virtual_mic()?;
|
||||
|
||||
// Virtual mic object must be kept alive by some variable until daemon exits
|
||||
let _virtual_mic = create_virtual_mic().await?;
|
||||
|
||||
if let Err(err) = get_audio_player().await {
|
||||
eprintln!("Failed to initialize audio player: {}", err);
|
||||
} // Initialize audio player
|
||||
|
||||
Reference in New Issue
Block a user