From 72574c1ae0c57e77a97eb585a252e3a62a0e553d Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Wed, 21 Nov 2012 00:32:46 +0100 Subject: [PATCH] mpd: listplaylists should not return playlists without a name --- docs/changes.rst | 3 +++ mopidy/frontends/mpd/protocol/stored_playlists.py | 7 +++++++ tests/frontends/mpd/protocol/stored_playlists_test.py | 9 +++++++++ 3 files changed, 19 insertions(+) diff --git a/docs/changes.rst b/docs/changes.rst index eef62a1f..295bf8fd 100644 --- a/docs/changes.rst +++ b/docs/changes.rst @@ -79,6 +79,9 @@ long time been our most requested feature. Finally, it's here! - The MPD commands ``search`` and ``find`` now allows the key ``file``, which is used by ncmpcpp instead of ``filename``. +- The MPD command ``listplaylists`` will no longer return playlists without a + name. This could crash ncmpcpp. + **MPRIS frontend** - The MPRIS playlists interface is now supported by our MPRIS frontend. This diff --git a/mopidy/frontends/mpd/protocol/stored_playlists.py b/mopidy/frontends/mpd/protocol/stored_playlists.py index de2b267e..a7be2399 100644 --- a/mopidy/frontends/mpd/protocol/stored_playlists.py +++ b/mopidy/frontends/mpd/protocol/stored_playlists.py @@ -70,9 +70,16 @@ def listplaylists(context): Last-Modified: 2010-02-06T02:10:25Z playlist: b Last-Modified: 2010-02-06T02:11:08Z + + *Clarifications:* + + - ncmpcpp 0.5.10 segfaults if we return 'playlist: ' on a line, so we must + ignore playlists without names, which isn't very useful anyway. """ result = [] for playlist in context.core.playlists.playlists.get(): + if not playlist.name: + continue result.append(('playlist', playlist.name)) last_modified = ( playlist.last_modified or dt.datetime.now()).isoformat() diff --git a/tests/frontends/mpd/protocol/stored_playlists_test.py b/tests/frontends/mpd/protocol/stored_playlists_test.py index cf1b8cd0..414f0b25 100644 --- a/tests/frontends/mpd/protocol/stored_playlists_test.py +++ b/tests/frontends/mpd/protocol/stored_playlists_test.py @@ -64,6 +64,15 @@ class PlaylistsHandlerTest(protocol.BaseTestCase): self.assertInResponse('Last-Modified: 2001-03-17T13:41:17Z') self.assertInResponse('OK') + def test_listplaylists_ignores_playlists_without_name(self): + last_modified = datetime.datetime(2001, 3, 17, 13, 41, 17, 12345) + self.backend.playlists.playlists = [ + Playlist(name='', last_modified=last_modified)] + + self.sendRequest('listplaylists') + self.assertNotInResponse('playlist: ') + self.assertInResponse('OK') + def test_load_known_playlist_appends_to_tracklist(self): self.core.tracklist.add([Track(uri='a'), Track(uri='b')]) self.assertEqual(len(self.core.tracklist.tracks.get()), 2)