diff --git a/src/bin/daemon.rs b/src/bin/daemon.rs index 5492e6a..d48d1a3 100644 --- a/src/bin/daemon.rs +++ b/src/bin/daemon.rs @@ -126,5 +126,22 @@ async fn commands_loop(listener: UnixListener) -> Result<(), Box> { } async fn player_loop() { - loop {} + loop { + let mut audio_player = get_audio_player().await.lock().await; + + // Start playback again if loop is enabled + let should_play = audio_player.get_state() == PlayerState::Stopped + && audio_player.current_file_path.is_some() + && audio_player.looped; + + if should_play { + let file_path = audio_player.current_file_path.clone().unwrap(); + audio_player + .play(&file_path) + .await + .expect("Something went wrong while trying to play the file"); + } + + sleep(Duration::from_millis(100)).await; + } } diff --git a/src/types/audio_player.rs b/src/types/audio_player.rs index e490a29..c9c5144 100644 --- a/src/types/audio_player.rs +++ b/src/types/audio_player.rs @@ -33,6 +33,8 @@ pub struct AudioPlayer { pub duration: Option, pub current_file_path: Option, + + pub looped: bool, } impl AudioPlayer { @@ -62,6 +64,8 @@ impl AudioPlayer { duration: None, current_file_path: None, + + looped: false, }; if default_input_device.is_some() { @@ -222,7 +226,7 @@ impl AudioPlayer { } pub fn get_current_file_path(&mut self) -> &Option { - if self.get_state() == PlayerState::Stopped { + if self.get_state() == PlayerState::Stopped && !self.looped { self.current_file_path = None; } &self.current_file_path