From 7f8b7194b6033a4f7ab4c60f7909674aede97317 Mon Sep 17 00:00:00 2001 From: Tarasov Aleksandr <55220741+arabianq@users.noreply.github.com> Date: Mon, 20 Apr 2026 19:22:50 +0300 Subject: [PATCH] refactor: move PipeWire initialization into a reusable helper function (#69) Extract duplicated `pipewire::init()`, `MainLoopRc::new()`, and `ContextRc::new()` setup code from `pw_get_global_objects_thread`, `create_virtual_mic`, and `create_link` into a shared `setup_pipewire_context` helper in `src/utils/pipewire.rs`. Also ran codebase-wide linters to improve code quality. Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com> --- src/bin/daemon.rs | 8 ++++---- src/utils/pipewire.rs | 22 ++++++++++------------ 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/src/bin/daemon.rs b/src/bin/daemon.rs index 7307d5a..2d522f6 100644 --- a/src/bin/daemon.rs +++ b/src/bin/daemon.rs @@ -42,10 +42,10 @@ async fn main() -> Result<(), Box> { lock_file.lock()?; let socket_path = runtime_dir.join("daemon.sock"); - if let Err(e) = fs::remove_file(&socket_path) { - if e.kind() != std::io::ErrorKind::NotFound { - return Err(e.into()); - } + if let Err(e) = fs::remove_file(&socket_path) + && e.kind() != std::io::ErrorKind::NotFound + { + return Err(e.into()); } let listener = UnixListener::bind(&socket_path)?; diff --git a/src/utils/pipewire.rs b/src/utils/pipewire.rs index 302ccf1..02d8f61 100644 --- a/src/utils/pipewire.rs +++ b/src/utils/pipewire.rs @@ -9,6 +9,13 @@ use tokio::{ time::{Duration, timeout}, }; +pub fn setup_pipewire_context() -> (MainLoopRc, ContextRc) { + pipewire::init(); + let main_loop = MainLoopRc::new(None).expect("Failed to initialize pipewire main loop"); + let context = ContextRc::new(&main_loop, None).expect("Failed to create pipewire context"); + (main_loop, context) +} + fn parse_global_object( global_object: &GlobalObject<&DictRef>, ) -> (Option, Option) { @@ -79,9 +86,7 @@ async fn pw_get_global_objects_thread( main_sender: mpsc::Sender<(Option, Option)>, pw_receiver: pipewire::channel::Receiver, ) { - pipewire::init(); - - let main_loop = MainLoopRc::new(None).expect("Failed to initialize pipewire main loop"); + let (main_loop, context) = setup_pipewire_context(); // Stop main loop on Terminate message let _receiver = pw_receiver.attach(main_loop.loop_(), { @@ -89,7 +94,6 @@ async fn pw_get_global_objects_thread( move |_| _main_loop.quit() }); - let context = ContextRc::new(&main_loop, None).expect("Failed to create pipewire context"); let core = context .connect(None) .expect("Failed to connect to pipewire context"); @@ -224,10 +228,7 @@ pub fn create_virtual_mic() -> Result, Box< let (pw_sender, pw_receiver) = pipewire::channel::channel::(); let _pw_thread = thread::spawn(move || { - pipewire::init(); - - let main_loop = MainLoopRc::new(None).expect("Failed to initialize pipewire main loop"); - let context = ContextRc::new(&main_loop, None).expect("Failed to create pipewire context"); + let (main_loop, context) = setup_pipewire_context(); let core = context .connect(None) .expect("Failed to connect to pipewire context"); @@ -305,10 +306,7 @@ pub fn create_link( let (pw_sender, pw_receiver) = pipewire::channel::channel::(); let _pw_thread = thread::spawn(move || { - pipewire::init(); - - let main_loop = MainLoopRc::new(None).expect("Failed to initialize pipewire main loop"); - let context = ContextRc::new(&main_loop, None).expect("Failed to create pipewire context"); + let (main_loop, context) = setup_pipewire_context(); let core = context .connect(None) .expect("Failed to connect to pipewire context");