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):
pass
def play(self, songid):
pass
# Current/single playlist methods
def playlist_changes(self, version):
return None

View File

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

View File

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