From 92335594bce1c6eda141b6b778bc66770c7547d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Andersson?= Date: Tue, 19 Jan 2021 21:47:41 +0100 Subject: [PATCH] Restart queue if pressing play when stopped (#399) * Restart queue if pressing play when stopped * Remove FinishedTrack from match * Formatting --- src/mpris.rs | 4 ++-- src/queue.rs | 13 +++++++++++-- src/spotify.rs | 6 +----- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/mpris.rs b/src/mpris.rs index 9af298f..58a2b7f 100644 --- a/src/mpris.rs +++ b/src/mpris.rs @@ -400,9 +400,9 @@ fn run_dbus_server( }); let method_playpause = { - let spotify = spotify.clone(); + let queue = queue.clone(); f.method("PlayPause", (), move |m| { - spotify.toggleplayback(); + queue.toggleplayback(); Ok(vec![m.msg.method_return()]) }) }; diff --git a/src/queue.rs b/src/queue.rs index ae27f97..81c2634 100644 --- a/src/queue.rs +++ b/src/queue.rs @@ -7,9 +7,9 @@ use notify_rust::Notification; use rand::prelude::*; use strum_macros::Display; -use crate::config::Config; use crate::playable::Playable; use crate::spotify::Spotify; +use crate::{config::Config, spotify::PlayerEvent}; #[derive(Display, Clone, Copy, PartialEq, Debug, Serialize, Deserialize)] pub enum RepeatSetting { @@ -264,7 +264,16 @@ impl Queue { } pub fn toggleplayback(&self) { - self.spotify.toggleplayback(); + match self.spotify.get_current_status() { + PlayerEvent::Playing | PlayerEvent::Paused => { + self.spotify.toggleplayback(); + } + PlayerEvent::Stopped => match self.next_index() { + Some(_) => self.next(false), + None => self.play(0, false, false), + }, + _ => (), + } } pub fn stop(&self) { diff --git a/src/spotify.rs b/src/spotify.rs index eaf9a85..c57a6a0 100644 --- a/src/spotify.rs +++ b/src/spotify.rs @@ -890,11 +890,7 @@ impl Spotify { } pub fn toggleplayback(&self) { - let status = self - .status - .read() - .expect("could not acquire read lock on player state"); - match *status { + match self.get_current_status() { PlayerEvent::Playing => self.pause(), PlayerEvent::Paused => self.play(), _ => (),