From 987db155a1fafe6fcf14f08fe6026e2089444583 Mon Sep 17 00:00:00 2001 From: Keith Edmunds Date: Sun, 6 Jun 2021 20:01:28 +0100 Subject: [PATCH] Tighten up player handling (mitigate for issue #11) --- app/music.py | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/app/music.py b/app/music.py index 7426d94..d437278 100644 --- a/app/music.py +++ b/app/music.py @@ -35,6 +35,9 @@ class Music: if not self.playing(): return None + # Only allow one track to fade at a time + if self.fading: + return self.fading = True thread = threading.Thread(target=self._fade) @@ -47,6 +50,7 @@ class Music: # Take a copy of current player to allow another track to be # started without interfering here + p = self.player DEBUG(f"music._fade(), {self.player=}", True) @@ -69,9 +73,7 @@ class Music: p.audio_set_volume(int(self.max_volume * volume_factor)) sleep(sleep_time) - p.stop() - DEBUG(f"Releasing play {p=}", True) - p.release() + self.stop(p) self.fading = False def get_playtime(self): @@ -138,20 +140,24 @@ class Music: self.max_volume = volume self.player.audio_set_volume(volume) - def stop(self): + def stop(self, player=None): "Immediately stop playing" - DEBUG("music.stop()", True) + DEBUG(f"music.stop(), {player=}", True) - if not self.player: - return None + if not player: + if not self.player: + return + player = self.player - position = self.player.get_position() - self.player.stop() - p = self.player + DEBUG(f"music.stop({player=})") + + position = player.get_position() + player.stop() + p = player # Ensure we don't reference player after release - self.player = None - DEBUG(f"Releasing play {p=}", True) + player = None + DEBUG(f"Releasing player {p=}", True) p.release() return position