Tighten up player handling (mitigate for issue #11)

This commit is contained in:
Keith Edmunds 2021-06-06 20:01:28 +01:00
parent 6310dfd5c7
commit 987db155a1

View File

@ -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