From 8975e72b349e5d87e5ddcd8b4a99659562033a97 Mon Sep 17 00:00:00 2001 From: Danilo Bargen Date: Sat, 25 Jul 2015 18:01:56 +0200 Subject: [PATCH] Implemented playlist_deleted event --- docs/changelog.rst | 2 ++ mopidy/core/listener.py | 11 +++++++++++ mopidy/core/playlists.py | 5 +++-- mopidy/m3u/playlists.py | 1 + tests/core/test_events.py | 7 ++++--- tests/core/test_listener.py | 3 +++ 6 files changed, 24 insertions(+), 5 deletions(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index 320c776a..e5b478d2 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -36,6 +36,8 @@ Core API - Add `max_tracklist_length` config and limitation. (Fixes: :issue:`997` PR: :issue:`1225`) +- Added ``playlist_deleted`` event (Fixes: :issue:`996`) + Models ------ diff --git a/mopidy/core/listener.py b/mopidy/core/listener.py index 45109bba..79040052 100644 --- a/mopidy/core/listener.py +++ b/mopidy/core/listener.py @@ -123,6 +123,17 @@ class CoreListener(listener.Listener): """ pass + def playlist_deleted(self, uri): + """ + Called whenever a playlist is deleted. + + *MAY* be implemented by actor. + + :param uri: the uri of the deleted playlist + :type uri: string + """ + pass + def options_changed(self): """ Called whenever an option is changed. diff --git a/mopidy/core/playlists.py b/mopidy/core/playlists.py index 086806cc..0ea78f26 100644 --- a/mopidy/core/playlists.py +++ b/mopidy/core/playlists.py @@ -178,11 +178,12 @@ class PlaylistsController(object): uri_scheme = urlparse.urlparse(uri).scheme backend = self.backends.with_playlists.get(uri_scheme, None) if not backend: - return + return None # TODO: error reporting to user with _backend_error_handling(backend): backend.playlists.delete(uri).get() - # TODO: emit playlist changed? + # TODO: error detection and reporting to user + listener.CoreListener.send('playlist_deleted', uri=uri) # TODO: return value? diff --git a/mopidy/m3u/playlists.py b/mopidy/m3u/playlists.py index bd8b8bfd..b1e1bfe8 100644 --- a/mopidy/m3u/playlists.py +++ b/mopidy/m3u/playlists.py @@ -54,6 +54,7 @@ class M3UPlaylistsProvider(backend.PlaylistsProvider): logger.warning( 'Trying to delete missing playlist file %s', path) del self._playlists[uri] + logger.info('Deleted playlist %s', uri) else: logger.warning('Trying to delete unknown playlist %s', uri) diff --git a/tests/core/test_events.py b/tests/core/test_events.py index 9a439084..be47d506 100644 --- a/tests/core/test_events.py +++ b/tests/core/test_events.py @@ -99,10 +99,11 @@ class BackendEventsTest(unittest.TestCase): self.assertEqual(send.call_args[0][0], 'playlist_changed') - @unittest.SkipTest def test_playlists_delete_sends_playlist_deleted_event(self, send): - # TODO We should probably add a playlist_deleted event - pass + playlist = self.core.playlists.create('foo').get() + self.core.playlists.delete(playlist.uri).get() + + self.assertEqual(send.call_args[0][0], 'playlist_deleted') def test_playlists_save_sends_playlist_changed_event(self, send): playlist = self.core.playlists.create('foo').get() diff --git a/tests/core/test_listener.py b/tests/core/test_listener.py index 95c4da51..f78b061b 100644 --- a/tests/core/test_listener.py +++ b/tests/core/test_listener.py @@ -47,6 +47,9 @@ class CoreListenerTest(unittest.TestCase): def test_listener_has_default_impl_for_playlist_changed(self): self.listener.playlist_changed(Playlist()) + def test_listener_has_default_impl_for_playlist_deleted(self): + self.listener.playlist_deleted(Playlist()) + def test_listener_has_default_impl_for_options_changed(self): self.listener.options_changed()