From b0319d1f70e9064c311699308950fbc1fd020fff Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Sun, 9 Oct 2011 00:43:20 +0200 Subject: [PATCH 01/12] Prepare for v0.7 development --- docs/changes.rst | 12 ++++++++++++ mopidy/__init__.py | 2 +- tests/version_test.py | 5 +++-- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/docs/changes.rst b/docs/changes.rst index 445e7984..cc3deacc 100644 --- a/docs/changes.rst +++ b/docs/changes.rst @@ -5,6 +5,18 @@ Changes This change log is used to track all major changes to Mopidy. +v0.7.0 (in development) +======================= + +**Important changes** + +- Nothing so far + +**Changes** + +- Nothing so far + + v0.6.0 (2011-10-09) =================== diff --git a/mopidy/__init__.py b/mopidy/__init__.py index 1d820fd0..ced47e07 100644 --- a/mopidy/__init__.py +++ b/mopidy/__init__.py @@ -8,7 +8,7 @@ import os from subprocess import PIPE, Popen -VERSION = (0, 6, 0) +VERSION = (0, 7, 0) DATA_PATH = os.path.join(glib.get_user_data_dir(), 'mopidy') CACHE_PATH = os.path.join(glib.get_user_cache_dir(), 'mopidy') diff --git a/tests/version_test.py b/tests/version_test.py index 4544349d..bd9ba7b9 100644 --- a/tests/version_test.py +++ b/tests/version_test.py @@ -22,8 +22,9 @@ class VersionTest(unittest.TestCase): self.assert_(SV('0.3.1') < SV('0.4.0')) self.assert_(SV('0.4.0') < SV('0.4.1')) self.assert_(SV('0.4.1') < SV('0.5.0')) - self.assert_(SV('0.5.0') < SV(get_plain_version())) - self.assert_(SV(get_plain_version()) < SV('0.6.1')) + self.assert_(SV('0.5.0') < SV('0.6.0')) + self.assert_(SV('0.6.0') < SV(get_plain_version())) + self.assert_(SV(get_plain_version()) < SV('0.7.1')) def test_get_platform_contains_platform(self): self.assert_(platform.platform() in get_platform()) From 20cd11eb30d92635199fffe944277dbf954b3a23 Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Wed, 19 Oct 2011 19:12:03 +0200 Subject: [PATCH 02/12] Update to async version of Google Analytics tracking --- docs/_templates/layout.html | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/_templates/layout.html b/docs/_templates/layout.html index d6cb00e9..14113da6 100644 --- a/docs/_templates/layout.html +++ b/docs/_templates/layout.html @@ -3,13 +3,13 @@ {% block footer %} {{ super() }} - {% endblock %} From a9a7f239212fb5ce99a4ad8ad20080d310160757 Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Mon, 31 Oct 2011 12:31:17 +0100 Subject: [PATCH 03/12] Fix typo --- mopidy/backends/spotify/session_manager.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mopidy/backends/spotify/session_manager.py b/mopidy/backends/spotify/session_manager.py index 5261f0cf..aeb33b91 100644 --- a/mopidy/backends/spotify/session_manager.py +++ b/mopidy/backends/spotify/session_manager.py @@ -163,5 +163,5 @@ class SpotifySessionManager(BaseThread, PyspotifySessionManager): def logout(self): """Log out from spotify""" - logger.debug(u'Logging out from spotify') + logger.debug(u'Logging out from Spotify') self.session.logout() From 9ce6a155af626e0e207da45312a9ce0104cdc42d Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Tue, 1 Nov 2011 08:44:57 +0100 Subject: [PATCH 04/12] Only logout if we have a session to log out from --- mopidy/backends/spotify/session_manager.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mopidy/backends/spotify/session_manager.py b/mopidy/backends/spotify/session_manager.py index aeb33b91..711c924b 100644 --- a/mopidy/backends/spotify/session_manager.py +++ b/mopidy/backends/spotify/session_manager.py @@ -164,4 +164,5 @@ class SpotifySessionManager(BaseThread, PyspotifySessionManager): def logout(self): """Log out from spotify""" logger.debug(u'Logging out from Spotify') - self.session.logout() + if self.session: + self.session.logout() From 98756d837e85ba03b1d72d344ff25419da92fd2c Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Tue, 1 Nov 2011 08:46:06 +0100 Subject: [PATCH 05/12] Replace loop and filter with more Pythonic list comprehension --- mopidy/backends/spotify/session_manager.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/mopidy/backends/spotify/session_manager.py b/mopidy/backends/spotify/session_manager.py index 711c924b..f9ff083b 100644 --- a/mopidy/backends/spotify/session_manager.py +++ b/mopidy/backends/spotify/session_manager.py @@ -139,11 +139,11 @@ class SpotifySessionManager(BaseThread, PyspotifySessionManager): def refresh_stored_playlists(self): """Refresh the stored playlists in the backend with fresh meta data from Spotify""" - playlists = [] - for spotify_playlist in self.session.playlist_container(): - playlists.append( - SpotifyTranslator.to_mopidy_playlist(spotify_playlist)) - playlists = filter(None, playlists) + playlists = [playlist + for playlist in + [SpotifyTranslator.to_mopidy_playlist(spotify_playlist) + for spotify_playlist in self.session.playlist_container()] + if playlist is not None] self.backend.stored_playlists.playlists = playlists logger.debug(u'Refreshed %d stored playlist(s)', len(playlists)) From ce4e681e7b03629f147e0cd8562e171a0b045a30 Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Tue, 1 Nov 2011 08:46:43 +0100 Subject: [PATCH 06/12] Use new method in playlists to check if they are playlists or folder boundaries --- mopidy/backends/spotify/translator.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/mopidy/backends/spotify/translator.py b/mopidy/backends/spotify/translator.py index 95287d77..cc72aecd 100644 --- a/mopidy/backends/spotify/translator.py +++ b/mopidy/backends/spotify/translator.py @@ -51,9 +51,8 @@ class SpotifyTranslator(object): def to_mopidy_playlist(cls, spotify_playlist): if not spotify_playlist.is_loaded(): return Playlist(name=u'[loading...]') - # FIXME Replace this try-except with a check on the playlist type, - # which is currently not supported by pyspotify, to avoid handling - # playlist folder boundaries like normal playlists. + if spotify_playlist.type() != 'playlist': + return try: return Playlist( uri=str(Link.from_playlist(spotify_playlist)), @@ -63,5 +62,4 @@ class SpotifyTranslator(object): if str(Link.from_track(t, 0))], ) except SpotifyError, e: - logger.info(u'Failed translating Spotify playlist ' - '(probably a playlist folder boundary): %s', e) + logger.warning(u'Failed translating Spotify playlist: %s', e) From 5c194b9c378ec3fc9f3bcb34d1915fa5f86d5735 Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Tue, 1 Nov 2011 08:47:37 +0100 Subject: [PATCH 07/12] Watching for changes to PlaylistFolder objects doesn't work --- mopidy/backends/spotify/container_manager.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/mopidy/backends/spotify/container_manager.py b/mopidy/backends/spotify/container_manager.py index 520cfb68..deabc7d2 100644 --- a/mopidy/backends/spotify/container_manager.py +++ b/mopidy/backends/spotify/container_manager.py @@ -13,13 +13,15 @@ class SpotifyContainerManager(PyspotifyContainerManager): def container_loaded(self, container, userdata): """Callback used by pyspotify""" logger.debug(u'Callback called: playlist container loaded') + self.session_manager.refresh_stored_playlists() - playlist_container = self.session_manager.session.playlist_container() - for playlist in playlist_container: + playlists = [playlist + for playlist in self.session_manager.session.playlist_container() + if playlist.type() == 'playlist'] + for playlist in playlists: self.session_manager.playlist_manager.watch(playlist) - logger.debug(u'Watching %d playlist(s) for changes', - len(playlist_container)) + logger.debug(u'Watching %d playlist(s) for changes', len(playlists)) def playlist_added(self, container, playlist, position, userdata): """Callback used by pyspotify""" From f0f10e43749fb79523bc280328099cb0aa92caad Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Tue, 1 Nov 2011 18:27:07 +0100 Subject: [PATCH 08/12] Refactor from for-if-for to just for-if --- mopidy/backends/spotify/container_manager.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/mopidy/backends/spotify/container_manager.py b/mopidy/backends/spotify/container_manager.py index deabc7d2..3ff11072 100644 --- a/mopidy/backends/spotify/container_manager.py +++ b/mopidy/backends/spotify/container_manager.py @@ -16,11 +16,9 @@ class SpotifyContainerManager(PyspotifyContainerManager): self.session_manager.refresh_stored_playlists() - playlists = [playlist - for playlist in self.session_manager.session.playlist_container() - if playlist.type() == 'playlist'] - for playlist in playlists: - self.session_manager.playlist_manager.watch(playlist) + for playlist in self.session_manager.session.playlist_container(): + if playlist.type() == 'playlist': + self.session_manager.playlist_manager.watch(playlist) logger.debug(u'Watching %d playlist(s) for changes', len(playlists)) def playlist_added(self, container, playlist, position, userdata): From 7fa46f1aced86e490c0e2f87f6bf84542ca2a3f2 Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Tue, 1 Nov 2011 18:35:34 +0100 Subject: [PATCH 09/12] Refactor from nested list comprehensions to map/filter --- mopidy/backends/spotify/session_manager.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/mopidy/backends/spotify/session_manager.py b/mopidy/backends/spotify/session_manager.py index f9ff083b..4b81db1f 100644 --- a/mopidy/backends/spotify/session_manager.py +++ b/mopidy/backends/spotify/session_manager.py @@ -139,11 +139,9 @@ class SpotifySessionManager(BaseThread, PyspotifySessionManager): def refresh_stored_playlists(self): """Refresh the stored playlists in the backend with fresh meta data from Spotify""" - playlists = [playlist - for playlist in - [SpotifyTranslator.to_mopidy_playlist(spotify_playlist) - for spotify_playlist in self.session.playlist_container()] - if playlist is not None] + playlists = map(SpotifyTranslator.to_mopidy_playlist, + self.session.playlist_container()) + playlists = filter(None, playlists) self.backend.stored_playlists.playlists = playlists logger.debug(u'Refreshed %d stored playlist(s)', len(playlists)) From f8ac134d48fb525533340493a2d89e4dd079171e Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Tue, 1 Nov 2011 18:38:34 +0100 Subject: [PATCH 10/12] We still need the number of watched playlists for the log --- mopidy/backends/spotify/container_manager.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/mopidy/backends/spotify/container_manager.py b/mopidy/backends/spotify/container_manager.py index 3ff11072..27a4d78a 100644 --- a/mopidy/backends/spotify/container_manager.py +++ b/mopidy/backends/spotify/container_manager.py @@ -16,10 +16,12 @@ class SpotifyContainerManager(PyspotifyContainerManager): self.session_manager.refresh_stored_playlists() + count = 0 for playlist in self.session_manager.session.playlist_container(): if playlist.type() == 'playlist': self.session_manager.playlist_manager.watch(playlist) - logger.debug(u'Watching %d playlist(s) for changes', len(playlists)) + count += 1 + logger.debug(u'Watching %d playlist(s) for changes', count) def playlist_added(self, container, playlist, position, userdata): """Callback used by pyspotify""" From ba842d344d24e158a19094ada3ae6f7bd15b8ebb Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Wed, 2 Nov 2011 09:28:34 +0100 Subject: [PATCH 11/12] Update changelog wrt. merge of pyspotify 1.5 support --- docs/changes.rst | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/changes.rst b/docs/changes.rst index cc3deacc..d39d6fc2 100644 --- a/docs/changes.rst +++ b/docs/changes.rst @@ -10,11 +10,13 @@ v0.7.0 (in development) **Important changes** -- Nothing so far +- pyspotify 1.5 or greater is required. **Changes** -- Nothing so far +- Spotify playlist folder boundaries are now properly detected. In other words, + if you use playlist folders, you will no longer get lots of log messages + about bad playlists. v0.6.0 (2011-10-09) From 5528edd3ad59ba60c45ca9d374be56e866ad2c50 Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Wed, 28 Dec 2011 21:45:08 +0100 Subject: [PATCH 12/12] Update changelog for v0.6.1 release --- docs/changes.rst | 8 ++++++-- mopidy/__init__.py | 2 +- tests/version_test.py | 2 +- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/docs/changes.rst b/docs/changes.rst index d39d6fc2..5c6c070c 100644 --- a/docs/changes.rst +++ b/docs/changes.rst @@ -5,8 +5,12 @@ Changes This change log is used to track all major changes to Mopidy. -v0.7.0 (in development) -======================= +v0.6.1 (2011-12-28) +=================== + +This is a maintenance release to make Mopidy 0.6 work with pyspotify >= 1.5, +which Mopidy's develop branch have supported for a long time. This should also +make the Debian packages work out of the box again. **Important changes** diff --git a/mopidy/__init__.py b/mopidy/__init__.py index ced47e07..caef51fa 100644 --- a/mopidy/__init__.py +++ b/mopidy/__init__.py @@ -8,7 +8,7 @@ import os from subprocess import PIPE, Popen -VERSION = (0, 7, 0) +VERSION = (0, 6, 1) DATA_PATH = os.path.join(glib.get_user_data_dir(), 'mopidy') CACHE_PATH = os.path.join(glib.get_user_cache_dir(), 'mopidy') diff --git a/tests/version_test.py b/tests/version_test.py index bd9ba7b9..1a2ca102 100644 --- a/tests/version_test.py +++ b/tests/version_test.py @@ -24,7 +24,7 @@ class VersionTest(unittest.TestCase): self.assert_(SV('0.4.1') < SV('0.5.0')) self.assert_(SV('0.5.0') < SV('0.6.0')) self.assert_(SV('0.6.0') < SV(get_plain_version())) - self.assert_(SV(get_plain_version()) < SV('0.7.1')) + self.assert_(SV(get_plain_version()) < SV('0.7.0')) def test_get_platform_contains_platform(self): self.assert_(platform.platform() in get_platform())