From 32afe4c1037bc73cf2a0f475fc4a13f27655bae8 Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Wed, 10 Feb 2010 12:14:45 +0100 Subject: [PATCH] Add next_track and previous_track to BasePlaybackController API. Pass track object to internal _next() and _previous() methods. --- mopidy/backends/__init__.py | 34 +++++++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/mopidy/backends/__init__.py b/mopidy/backends/__init__.py index 210e8c19..1706c0f6 100644 --- a/mopidy/backends/__init__.py +++ b/mopidy/backends/__init__.py @@ -249,6 +249,15 @@ class BasePlaybackController(object): self._state = self.STOPPED self.state = self.STOPPED + @property + def next_track(self): + """The next track in the playlist.""" + try: + return self.backend.current_playlist.playlist.tracks[ + self.playlist_position + 1] + except IndexError: + return None + @property def playlist_position(self): """The position in the current playlist.""" @@ -260,6 +269,15 @@ class BasePlaybackController(object): except ValueError: return None + @property + def previous_track(self): + """The previous track in the playlist.""" + try: + return self.backend.current_playlist.playlist.tracks[ + self.playlist_position - 1] + except IndexError: + return None + @property def state(self): """ @@ -314,10 +332,11 @@ class BasePlaybackController(object): def next(self): """Play the next track.""" self.stop() - if self._next(): + if self.next_track is not None and self._next(self.next_track): + self.current_track = self.next_track self.state = self.PLAYING - def _next(self): + def _next(self, track): raise NotImplementedError def pause(self): @@ -337,10 +356,9 @@ class BasePlaybackController(object): """ if self.state == self.PAUSED and track is None: return self.resume() - if track is not None: - self.current_track = track self.stop() - if self._play(track): + if track is not None and self._play(track): + self.current_track = track self.state = self.PLAYING def _play(self, track): @@ -349,10 +367,12 @@ class BasePlaybackController(object): def previous(self): """Play the previous track.""" self.stop() - if self._previous(): + if (self.previous_track is not None + and self._previous(self.previous_track)): + self.current_track = self.previous_track self.state = self.PLAYING - def _previous(self): + def _previous(self, track): raise NotImplementedError def resume(self):