From c58de5aa7548bf8457e4123db18099f4207d3be2 Mon Sep 17 00:00:00 2001 From: alzeih Date: Sun, 28 Jul 2013 16:42:16 +1200 Subject: [PATCH 1/3] workaround for mopidy/mopidy#62 - appends folder names to playlist --- mopidy/backends/spotify/session_manager.py | 9 +++++++-- mopidy/backends/spotify/translator.py | 5 ++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/mopidy/backends/spotify/session_manager.py b/mopidy/backends/spotify/session_manager.py index c0592ea7..980ce9f8 100644 --- a/mopidy/backends/spotify/session_manager.py +++ b/mopidy/backends/spotify/session_manager.py @@ -173,12 +173,17 @@ class SpotifySessionManager(process.BaseThread, PyspotifySessionManager): logger.debug('Still getting data; skipped refresh of playlists') return playlists = [] + folders = [] for spotify_playlist in self.session.playlist_container(): + if spotify_playlist.type() == 'folder_start': + folders.append(spotify_playlist) + if spotify_playlist.type() == 'folder_end': + folders.pop() playlists.append(translator.to_mopidy_playlist( - spotify_playlist, + spotify_playlist, folders, bitrate=self.bitrate, username=self.username)) playlists.append(translator.to_mopidy_playlist( - self.session.starred(), + self.session.starred(), None, bitrate=self.bitrate, username=self.username)) playlists = filter(None, playlists) self.backend.playlists.playlists = playlists diff --git a/mopidy/backends/spotify/translator.py b/mopidy/backends/spotify/translator.py index 60961cf8..beec45a3 100644 --- a/mopidy/backends/spotify/translator.py +++ b/mopidy/backends/spotify/translator.py @@ -67,7 +67,7 @@ def to_mopidy_track(spotify_track, bitrate=None): return track_cache[uri] -def to_mopidy_playlist(spotify_playlist, bitrate=None, username=None): +def to_mopidy_playlist(spotify_playlist, spotify_folders, bitrate=None, username=None): if spotify_playlist is None or spotify_playlist.type() != 'playlist': return try: @@ -78,6 +78,9 @@ def to_mopidy_playlist(spotify_playlist, bitrate=None, username=None): if not spotify_playlist.is_loaded(): return Playlist(uri=uri, name='[loading...]') name = spotify_playlist.name() + if spotify_folders is not None: + folder_names = unicode.join('', ['[' + folder.name() + ']' for folder in spotify_folders]) + name = folder_names + ' ' + name tracks = [ to_mopidy_track(spotify_track, bitrate=bitrate) for spotify_track in spotify_playlist From c4dcef81b4b894446eb4f26d01d99bdfbeb21a43 Mon Sep 17 00:00:00 2001 From: alzeih Date: Sun, 28 Jul 2013 22:42:15 +1200 Subject: [PATCH 2/3] - use path separators instead of square brackets - use generator expression instead of list comprehension - fix bug for empty but not None list of folders --- mopidy/backends/spotify/translator.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mopidy/backends/spotify/translator.py b/mopidy/backends/spotify/translator.py index beec45a3..f0c3df65 100644 --- a/mopidy/backends/spotify/translator.py +++ b/mopidy/backends/spotify/translator.py @@ -78,9 +78,9 @@ def to_mopidy_playlist(spotify_playlist, spotify_folders, bitrate=None, username if not spotify_playlist.is_loaded(): return Playlist(uri=uri, name='[loading...]') name = spotify_playlist.name() - if spotify_folders is not None: - folder_names = unicode.join('', ['[' + folder.name() + ']' for folder in spotify_folders]) - name = folder_names + ' ' + name + if spotify_folders: + folder_names = '/'.join(folder.name() for folder in spotify_folders) + name = folder_names + '/' + name tracks = [ to_mopidy_track(spotify_track, bitrate=bitrate) for spotify_track in spotify_playlist From 47c26acf573871a81e841dc261628c8e7d4cfb83 Mon Sep 17 00:00:00 2001 From: alzeih Date: Sun, 28 Jul 2013 23:53:47 +1200 Subject: [PATCH 3/3] spotify folders not necessary as a positional arg - rename to folders - remove confusing None for starred playlists --- mopidy/backends/spotify/session_manager.py | 4 ++-- mopidy/backends/spotify/translator.py | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/mopidy/backends/spotify/session_manager.py b/mopidy/backends/spotify/session_manager.py index 980ce9f8..8f520896 100644 --- a/mopidy/backends/spotify/session_manager.py +++ b/mopidy/backends/spotify/session_manager.py @@ -180,10 +180,10 @@ class SpotifySessionManager(process.BaseThread, PyspotifySessionManager): if spotify_playlist.type() == 'folder_end': folders.pop() playlists.append(translator.to_mopidy_playlist( - spotify_playlist, folders, + spotify_playlist, folders=folders, bitrate=self.bitrate, username=self.username)) playlists.append(translator.to_mopidy_playlist( - self.session.starred(), None, + self.session.starred(), bitrate=self.bitrate, username=self.username)) playlists = filter(None, playlists) self.backend.playlists.playlists = playlists diff --git a/mopidy/backends/spotify/translator.py b/mopidy/backends/spotify/translator.py index f0c3df65..5813f880 100644 --- a/mopidy/backends/spotify/translator.py +++ b/mopidy/backends/spotify/translator.py @@ -67,7 +67,7 @@ def to_mopidy_track(spotify_track, bitrate=None): return track_cache[uri] -def to_mopidy_playlist(spotify_playlist, spotify_folders, bitrate=None, username=None): +def to_mopidy_playlist(spotify_playlist, folders=None, bitrate=None, username=None): if spotify_playlist is None or spotify_playlist.type() != 'playlist': return try: @@ -78,8 +78,8 @@ def to_mopidy_playlist(spotify_playlist, spotify_folders, bitrate=None, username if not spotify_playlist.is_loaded(): return Playlist(uri=uri, name='[loading...]') name = spotify_playlist.name() - if spotify_folders: - folder_names = '/'.join(folder.name() for folder in spotify_folders) + if folders: + folder_names = '/'.join(folder.name() for folder in folders) name = folder_names + '/' + name tracks = [ to_mopidy_track(spotify_track, bitrate=bitrate)