feat: Add play/pause and prev track function
Signed-off-by: Matthias Blankertz <matthias@blankertz.org>
This commit is contained in:
@@ -57,6 +57,7 @@ class PlayerApp:
|
|||||||
self.buttons = deps.buttons(self) if deps.buttons is not None else None
|
self.buttons = deps.buttons(self) if deps.buttons is not None else None
|
||||||
self.mp3file = None
|
self.mp3file = None
|
||||||
self.volume_pos = 3
|
self.volume_pos = 3
|
||||||
|
self.paused = False
|
||||||
self.player.set_volume(VOLUME_CURVE[self.volume_pos])
|
self.player.set_volume(VOLUME_CURVE[self.volume_pos])
|
||||||
self._onIdle()
|
self._onIdle()
|
||||||
|
|
||||||
@@ -96,6 +97,10 @@ class PlayerApp:
|
|||||||
self.player.set_volume(VOLUME_CURVE[self.volume_pos])
|
self.player.set_volume(VOLUME_CURVE[self.volume_pos])
|
||||||
elif what == self.buttons.NEXT:
|
elif what == self.buttons.NEXT:
|
||||||
self._play_next()
|
self._play_next()
|
||||||
|
elif what == self.buttons.PREV:
|
||||||
|
self._play_prev()
|
||||||
|
elif what == self.buttons.PLAY_PAUSE:
|
||||||
|
self._pause_toggle()
|
||||||
|
|
||||||
def onPlaybackDone(self):
|
def onPlaybackDone(self):
|
||||||
assert self.mp3file is not None
|
assert self.mp3file is not None
|
||||||
@@ -136,6 +141,15 @@ class PlayerApp:
|
|||||||
self.playlist = None
|
self.playlist = None
|
||||||
self.playing_tag = None
|
self.playing_tag = None
|
||||||
|
|
||||||
|
def _play_prev(self):
|
||||||
|
if self.playlist is None:
|
||||||
|
return
|
||||||
|
filename = self.playlist.getPrevPath()
|
||||||
|
self._play(filename)
|
||||||
|
if filename is None:
|
||||||
|
self.playlist = None
|
||||||
|
self.playing_tag = None
|
||||||
|
|
||||||
def _play(self, filename: bytes | None, offset=0):
|
def _play(self, filename: bytes | None, offset=0):
|
||||||
if self.mp3file is not None:
|
if self.mp3file is not None:
|
||||||
self.player.stop()
|
self.player.stop()
|
||||||
@@ -146,8 +160,19 @@ class PlayerApp:
|
|||||||
print(f'Playing {filename!r}')
|
print(f'Playing {filename!r}')
|
||||||
self.mp3file = open(filename, 'rb')
|
self.mp3file = open(filename, 'rb')
|
||||||
self.player.play(self.mp3file, offset)
|
self.player.play(self.mp3file, offset)
|
||||||
|
self.paused = False
|
||||||
self._onActive()
|
self._onActive()
|
||||||
|
|
||||||
|
def _pause_toggle(self):
|
||||||
|
if self.playlist is None:
|
||||||
|
return
|
||||||
|
if self.paused:
|
||||||
|
self._play(self.playlist.getCurrentPath(), self.pause_offset)
|
||||||
|
else:
|
||||||
|
self.pause_offset = self.player.stop()
|
||||||
|
self.paused = True
|
||||||
|
self._onIdle()
|
||||||
|
|
||||||
def _onIdle(self):
|
def _onIdle(self):
|
||||||
self.timer_manager.schedule(time.ticks_ms() + self.idle_timeout_ms, self.onIdleTimeout)
|
self.timer_manager.schedule(time.ticks_ms() + self.idle_timeout_ms, self.onIdleTimeout)
|
||||||
self.leds.set_state(self.leds.IDLE)
|
self.leds.set_state(self.leds.IDLE)
|
||||||
|
|||||||
@@ -107,6 +107,17 @@ class BTreeDB(IPlaylistDB):
|
|||||||
self.setPlaybackOffset(0)
|
self.setPlaybackOffset(0)
|
||||||
return self.getCurrentPath()
|
return self.getCurrentPath()
|
||||||
|
|
||||||
|
def getPrevPath(self):
|
||||||
|
"""
|
||||||
|
Select prev track and return path.
|
||||||
|
"""
|
||||||
|
if self.pos > 0:
|
||||||
|
self.pos -= 1
|
||||||
|
if self.persist != BTreeDB.PERSIST_NO:
|
||||||
|
self.parent._setPlaylistPos(self.tag, self.pos)
|
||||||
|
self.setPlaybackOffset(0)
|
||||||
|
return self.getCurrentPath()
|
||||||
|
|
||||||
def setPlaybackOffset(self, offset):
|
def setPlaybackOffset(self, offset):
|
||||||
"""
|
"""
|
||||||
Store the current position in the track for PERSIST_OFFSET mode
|
Store the current position in the track for PERSIST_OFFSET mode
|
||||||
|
|||||||
Reference in New Issue
Block a user