loads spotify playlists and plays songs

This commit is contained in:
Johannes Knutsen 2009-12-25 16:08:50 +01:00
parent f15967bcf3
commit be7a3de9af
3 changed files with 49 additions and 17 deletions

View File

@ -35,6 +35,9 @@ class BaseBackend(object):
def stop(self): def stop(self):
pass pass
def play(self, songid):
pass
# Current/single playlist methods # Current/single playlist methods
def playlist_changes(self, version): def playlist_changes(self, version):
return None return None

View File

@ -10,22 +10,51 @@ class SpotifyBackend(BaseBackend):
settings.SPOTIFY_USERNAME.encode('utf-8'), settings.SPOTIFY_USERNAME.encode('utf-8'),
settings.SPOTIFY_PASSWORD.encode('utf-8')) settings.SPOTIFY_PASSWORD.encode('utf-8'))
self._playlist_load_cache = None self._playlist_load_cache = None
self.current_playlist = []
self.current_playlist_version = 0
def playlist_load(self, name): def playlist_load(self, name):
if not self._playlist_load_cache: for playlist in self.spotify.stored_playlists:
for playlist in self.spotify.stored_playlists: if playlist.name == name:
if playlist.name == name: self.current_playlist = playlist.tracks
tracks = [] self.current_playlist_version += len(playlist.tracks)
for track in playlist.tracks: break
tracks.append(u'add %s\n' % track.file_id)
self._playlist_load_cache = tracks
break
return self._playlist_load_cache
def playlists_list(self): def playlists_list(self):
playlists = [] if self._playlist_load_cache is None:
for playlist in self.spotify.stored_playlists: self._playlist_load_cache = []
playlists.append(u'playlist: %s' % playlist.name.decode('utf-8')) for playlist in self.spotify.stored_playlists:
return 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

View File

@ -107,7 +107,7 @@ class MpdHandler(object):
def _listplaylists(self): def _listplaylists(self):
return self.backend.playlists_list() return self.backend.playlists_list()
@register(r'^load (?P<name>.+)$') @register(r'^load "(?P<name>.+)"$')
def _load(self, name): def _load(self, name):
return self.backend.playlist_load(name) return self.backend.playlist_load(name)
@ -142,13 +142,13 @@ class MpdHandler(object):
def _ping(self): def _ping(self):
pass pass
@register(r'^play (?P<songpos>.+)$') @register(r'^play "(?P<songpos>\d+)"$')
def _play(self, songpos): def _play(self, songpos):
pass # TODO pass # TODO
@register(r'^playid (?P<songid>.+)$') @register(r'^playid "(?P<songid>\d+)"$')
def _playid(self, songid): def _playid(self, songid):
pass # TODO return self.backend.play_id(int(songid))
@register(r'^playlist$') @register(r'^playlist$')
def _playlist(self): def _playlist(self):