diff --git a/src/bin/daemon.rs b/src/bin/daemon.rs index 47bb251..f0fadc7 100644 --- a/src/bin/daemon.rs +++ b/src/bin/daemon.rs @@ -31,16 +31,20 @@ async fn main() -> Result<(), Box> { eprintln!("Failed to initialize audio player: {}", err); } // Initialize audio player - let max_retries = 5; - for i in 0..=max_retries { - match link_player_to_virtual_mic().await { - Ok(_) => break, - Err(e) => println!("{e}\t{i}/{max_retries}"), - } + tokio::spawn(async { + let max_retries = 60; + for i in 0..=max_retries { + match link_player_to_virtual_mic().await { + Ok(_) => { + println!("Successfully linked player to virtual mic."); + break; + } + Err(e) => println!("{e}\t{i}/{max_retries}"), + } - sleep(Duration::from_millis(300 * i)).await; - } - link_player_to_virtual_mic().await?; + sleep(Duration::from_millis(1000)).await; + } + }); let runtime_dir = get_runtime_dir(); @@ -97,7 +101,10 @@ async fn commands_loop(listener: UnixListener) -> Result<(), Box> { let request_len = u32::from_le_bytes(len_bytes) as usize; if request_len > 10 * 1024 * 1024 { - eprintln!("Failed to read message from client: request too large ({} bytes)!", request_len); + eprintln!( + "Failed to read message from client: request too large ({} bytes)!", + request_len + ); return; } diff --git a/src/gui/input.rs b/src/gui/input.rs index a60165f..52a00b1 100644 --- a/src/gui/input.rs +++ b/src/gui/input.rs @@ -86,14 +86,15 @@ impl SoundpadGui { .as_ref() .and_then(|cd| dirs.iter().position(|x| x == cd)); - let new_dir_index = match (current_dir_index, arrow_up_pressed, arrow_down_pressed) { - (Some(i), true, false) => (i + dirs.len() - 1) % dirs.len(), - (Some(i), false, true) => (i + 1) % dirs.len(), - (Some(i), true, true) => i, - (None, true, _) => dirs.len() - 1, - (None, false, true) => 0, - _ => return, - }; + let new_dir_index = + match (current_dir_index, arrow_up_pressed, arrow_down_pressed) { + (Some(i), true, false) => (i + dirs.len() - 1) % dirs.len(), + (Some(i), false, true) => (i + 1) % dirs.len(), + (Some(i), true, true) => i, + (None, true, _) => dirs.len() - 1, + (None, false, true) => 0, + _ => return, + }; self.open_dir(&dirs[new_dir_index]); } else if self.app_state.current_dir.is_some() { @@ -109,14 +110,15 @@ impl SoundpadGui { .as_ref() .and_then(|f| files.iter().position(|x| x == f)); - let new_files_index = match (current_files_index, arrow_up_pressed, arrow_down_pressed) { - (Some(i), true, false) => (i + files.len() - 1) % files.len(), - (Some(i), false, true) => (i + 1) % files.len(), - (Some(i), true, true) => i, - (None, true, _) => files.len() - 1, - (None, false, true) => 0, - _ => return, - }; + let new_files_index = + match (current_files_index, arrow_up_pressed, arrow_down_pressed) { + (Some(i), true, false) => (i + files.len() - 1) % files.len(), + (Some(i), false, true) => (i + 1) % files.len(), + (Some(i), true, true) => i, + (None, true, _) => files.len() - 1, + (None, false, true) => 0, + _ => return, + }; self.app_state.selected_file = Some(files[new_files_index].clone()); } diff --git a/src/gui/mod.rs b/src/gui/mod.rs index 6b403c8..1d66b03 100644 --- a/src/gui/mod.rs +++ b/src/gui/mod.rs @@ -58,7 +58,10 @@ impl SoundpadGui { pub fn play_toggle(&mut self) { let (new_state, request) = { - let guard = self.audio_player_state_shared.lock().unwrap_or_else(|e| e.into_inner()); + let guard = self + .audio_player_state_shared + .lock() + .unwrap_or_else(|e| e.into_inner()); match guard.state { PlayerState::Playing => (Some(PlayerState::Paused), Some(Request::pause(None))), PlayerState::Paused => (Some(PlayerState::Playing), Some(Request::resume(None))), @@ -71,7 +74,10 @@ impl SoundpadGui { } if let Some(state) = new_state { - let mut guard = self.audio_player_state_shared.lock().unwrap_or_else(|e| e.into_inner()); + let mut guard = self + .audio_player_state_shared + .lock() + .unwrap_or_else(|e| e.into_inner()); guard.new_state = Some(state.clone()); guard.state = state; } diff --git a/src/gui/update.rs b/src/gui/update.rs index c21ce46..2943295 100644 --- a/src/gui/update.rs +++ b/src/gui/update.rs @@ -77,7 +77,10 @@ impl App for SoundpadGui { // Sync audio player state { - let guard = self.audio_player_state_shared.lock().unwrap_or_else(|e| e.into_inner()); + let guard = self + .audio_player_state_shared + .lock() + .unwrap_or_else(|e| e.into_inner()); self.audio_player_state = guard.clone(); } diff --git a/src/types/audio_player.rs b/src/types/audio_player.rs index 885f528..1937fb3 100644 --- a/src/types/audio_player.rs +++ b/src/types/audio_player.rs @@ -280,16 +280,18 @@ impl AudioPlayer { ) -> Result> { let path_buf = file_path.to_path_buf(); - let decoder_result = tokio::task::spawn_blocking(move || -> Result<_, Box> { - if !path_buf.exists() { - return Err(format!("File does not exist: {}", path_buf.display()).into()); - } + let decoder_result = + tokio::task::spawn_blocking(move || -> Result<_, Box> { + if !path_buf.exists() { + return Err(format!("File does not exist: {}", path_buf.display()).into()); + } - let file = fs::File::open(&path_buf)?; - let decoder = Decoder::try_from(file).map_err(|e| Box::new(e) as Box)?; - Ok(decoder) - }) - .await?; + let file = fs::File::open(&path_buf)?; + let decoder = Decoder::try_from(file) + .map_err(|e| Box::new(e) as Box)?; + Ok(decoder) + }) + .await?; match decoder_result { Ok(source) => {