From 8d9d003dc9e0fadb5831153b57d4a0edb5cf54f5 Mon Sep 17 00:00:00 2001 From: danielwerg <35052399+danielwerg@users.noreply.github.com> Date: Sat, 12 Oct 2024 11:54:32 +0300 Subject: [PATCH] feat: add `play` and `pause` messages (#24) --- src/player.rs | 12 ++++++++++++ src/player/mpris.rs | 9 ++++++--- src/player/ui.rs | 2 +- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/player.rs b/src/player.rs index 89e07bc..3bee653 100644 --- a/src/player.rs +++ b/src/player.rs @@ -48,6 +48,12 @@ pub enum Messages { /// Similar to Next, but specific to the first track. Init, + /// Unpause the [Sink]. + Play, + + /// Pauses the [Sink]. + Pause, + /// Pauses the [Sink]. This will also unpause it if it is paused. PlayPause, @@ -305,6 +311,12 @@ impl Player { // as to not block the main audio thread. task::spawn(Self::handle_next(player.clone(), itx.clone(), tx.clone())); } + Messages::Play => { + player.sink.play(); + } + Messages::Pause => { + player.sink.pause(); + } Messages::PlayPause => { if player.sink.is_paused() { player.sink.play(); diff --git a/src/player/mpris.rs b/src/player/mpris.rs index 15e859e..bcd624f 100644 --- a/src/player/mpris.rs +++ b/src/player/mpris.rs @@ -78,7 +78,7 @@ impl PlayerInterface for Player { async fn pause(&self) -> fdo::Result<()> { self.sender - .send(Messages::PlayPause) + .send(Messages::Pause) .await .map_err(|_| ERROR) } @@ -91,11 +91,14 @@ impl PlayerInterface for Player { } async fn stop(&self) -> fdo::Result<()> { - self.play_pause().await + self.pause().await } async fn play(&self) -> fdo::Result<()> { - self.play_pause().await + self.sender + .send(Messages::Play) + .await + .map_err(|_| ERROR) } async fn seek(&self, _offset: Time) -> fdo::Result<()> { diff --git a/src/player/ui.rs b/src/player/ui.rs index 29f0d50..dc92af8 100644 --- a/src/player/ui.rs +++ b/src/player/ui.rs @@ -88,7 +88,7 @@ async fn input(sender: Sender) -> eyre::Result<()> { event::MediaKeyCode::Play => Messages::PlayPause, event::MediaKeyCode::Pause => Messages::PlayPause, event::MediaKeyCode::PlayPause => Messages::PlayPause, - event::MediaKeyCode::Stop => Messages::PlayPause, + event::MediaKeyCode::Stop => Messages::Pause, event::MediaKeyCode::TrackNext => Messages::Next, event::MediaKeyCode::LowerVolume => Messages::ChangeVolume(-0.1), event::MediaKeyCode::RaiseVolume => Messages::ChangeVolume(0.1),