diff --git a/mopidy/backends/base.py b/mopidy/backends/base.py index 801523fe..99858f28 100644 --- a/mopidy/backends/base.py +++ b/mopidy/backends/base.py @@ -35,6 +35,9 @@ class BaseBackend(object): def stop(self): pass + def play(self, songid): + pass + # Current/single playlist methods def playlist_changes(self, version): return None diff --git a/mopidy/backends/spotify.py b/mopidy/backends/spotify.py index 1b9e6866..11a5488c 100644 --- a/mopidy/backends/spotify.py +++ b/mopidy/backends/spotify.py @@ -10,22 +10,51 @@ class SpotifyBackend(BaseBackend): settings.SPOTIFY_USERNAME.encode('utf-8'), settings.SPOTIFY_PASSWORD.encode('utf-8')) self._playlist_load_cache = None + self.current_playlist = [] + self.current_playlist_version = 0 def playlist_load(self, name): - if not self._playlist_load_cache: - for playlist in self.spotify.stored_playlists: - if playlist.name == name: - tracks = [] - for track in playlist.tracks: - tracks.append(u'add %s\n' % track.file_id) - self._playlist_load_cache = tracks - break - return self._playlist_load_cache + for playlist in self.spotify.stored_playlists: + if playlist.name == name: + self.current_playlist = playlist.tracks + self.current_playlist_version += len(playlist.tracks) + break def playlists_list(self): - playlists = [] - for playlist in self.spotify.stored_playlists: - playlists.append(u'playlist: %s' % playlist.name.decode('utf-8')) - return playlists + if self._playlist_load_cache is None: + self._playlist_load_cache = [] + for playlist in self.spotify.stored_playlists: + self._playlist_load_cache.append(u'playlist: %s' % playlist.name.decode('utf-8')) + return self._playlist_load_cache + def status_playlist_length(self): + return len(self.current_playlist) + def playlist_changes(self, songpos): + tracks = [] + pos = 0 + id = 0 + + for track in self.current_playlist: + tracks.append(u'file: %s' % track.track_id) + tracks.append(u'Time: %d' % (track.length/1000)) + tracks.append(u'Artist: %s' % track.artists[0].name) + tracks.append(u'Title: %s' % track.title) + tracks.append(u'Album: %s' % track.album) + tracks.append(u'Track: %s' % track.tracknumber) + tracks.append(u'Pos: %d' % pos) + tracks.append(u'Id: %d' % id) + + pos += 1 + id += 1 + return tracks + + def play_id(self, songid): + track = self.current_playlist[songid] + self.spotify.play(track) + + def stop(self): + self.spotify.stop() + + def status_playlist(self): + return self.current_playlist_version diff --git a/mopidy/handler.py b/mopidy/handler.py index 03f06d45..7599d3a5 100644 --- a/mopidy/handler.py +++ b/mopidy/handler.py @@ -107,7 +107,7 @@ class MpdHandler(object): def _listplaylists(self): return self.backend.playlists_list() - @register(r'^load (?P.+)$') + @register(r'^load "(?P.+)"$') def _load(self, name): return self.backend.playlist_load(name) @@ -142,13 +142,13 @@ class MpdHandler(object): def _ping(self): pass - @register(r'^play (?P.+)$') + @register(r'^play "(?P\d+)"$') def _play(self, songpos): pass # TODO - @register(r'^playid (?P.+)$') + @register(r'^playid "(?P\d+)"$') def _playid(self, songid): - pass # TODO + return self.backend.play_id(int(songid)) @register(r'^playlist$') def _playlist(self):