From 5fbb6328d64c8a540dc3670c7b5e115f585c9467 Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Wed, 21 Nov 2012 00:48:08 +0100 Subject: [PATCH] mpd: list shouldn't return blank artist names, album names, or dates --- docs/changes.rst | 3 +++ mopidy/backends/dummy.py | 6 +++-- mopidy/frontends/mpd/protocol/music_db.py | 7 +++--- tests/frontends/mpd/protocol/music_db_test.py | 25 +++++++++++++++++++ 4 files changed, 36 insertions(+), 5 deletions(-) diff --git a/docs/changes.rst b/docs/changes.rst index 295bf8fd..485ac0fd 100644 --- a/docs/changes.rst +++ b/docs/changes.rst @@ -82,6 +82,9 @@ long time been our most requested feature. Finally, it's here! - The MPD command ``listplaylists`` will no longer return playlists without a name. This could crash ncmpcpp. +- The MPD command ``list`` will no longer return artist names, album names, or + dates that are blank. + **MPRIS frontend** - The MPRIS playlists interface is now supported by our MPRIS frontend. This diff --git a/mopidy/backends/dummy.py b/mopidy/backends/dummy.py index 62ac8e8f..39180bbb 100644 --- a/mopidy/backends/dummy.py +++ b/mopidy/backends/dummy.py @@ -37,9 +37,11 @@ class DummyLibraryProvider(base.BaseLibraryProvider): def __init__(self, *args, **kwargs): super(DummyLibraryProvider, self).__init__(*args, **kwargs) self.dummy_library = [] + self.dummy_find_exact_result = [] + self.dummy_search_result = [] def find_exact(self, **query): - return [] + return self.dummy_find_exact_result def lookup(self, uri): return filter(lambda t: uri == t.uri, self.dummy_library) @@ -48,7 +50,7 @@ class DummyLibraryProvider(base.BaseLibraryProvider): pass def search(self, **query): - return [] + return self.dummy_search_result class DummyPlaybackProvider(base.BasePlaybackProvider): diff --git a/mopidy/frontends/mpd/protocol/music_db.py b/mopidy/frontends/mpd/protocol/music_db.py index 26371364..8f41b199 100644 --- a/mopidy/frontends/mpd/protocol/music_db.py +++ b/mopidy/frontends/mpd/protocol/music_db.py @@ -250,7 +250,8 @@ def _list_artist(context, query): tracks = context.core.library.find_exact(**query).get() for track in tracks: for artist in track.artists: - artists.add(('Artist', artist.name)) + if artist.name: + artists.add(('Artist', artist.name)) return artists @@ -258,7 +259,7 @@ def _list_album(context, query): albums = set() tracks = context.core.library.find_exact(**query).get() for track in tracks: - if track.album is not None: + if track.album and track.album.name: albums.add(('Album', track.album.name)) return albums @@ -267,7 +268,7 @@ def _list_date(context, query): dates = set() tracks = context.core.library.find_exact(**query).get() for track in tracks: - if track.date is not None: + if track.date: dates.add(('Date', track.date)) return dates diff --git a/tests/frontends/mpd/protocol/music_db_test.py b/tests/frontends/mpd/protocol/music_db_test.py index 9a233e40..44999a4f 100644 --- a/tests/frontends/mpd/protocol/music_db_test.py +++ b/tests/frontends/mpd/protocol/music_db_test.py @@ -1,5 +1,7 @@ from __future__ import unicode_literals +from mopidy.models import Album, Artist, Track + from tests.frontends.mpd import protocol @@ -181,6 +183,14 @@ class MusicDatabaseListTest(protocol.BaseTestCase): self.sendRequest('list "artist" "artist" ""') self.assertInResponse('OK') + def test_list_artist_should_not_return_artists_without_names(self): + self.backend.library.dummy_find_exact_result = [ + Track(artists=[Artist(name='')])] + + self.sendRequest('list "artist"') + self.assertNotInResponse('Artist: ') + self.assertInResponse('OK') + ### Album def test_list_album_with_quotes(self): @@ -232,6 +242,14 @@ class MusicDatabaseListTest(protocol.BaseTestCase): self.sendRequest('list "album" "artist" ""') self.assertInResponse('OK') + def test_list_album_should_not_return_albums_without_names(self): + self.backend.library.dummy_find_exact_result = [ + Track(album=Album(name=''))] + + self.sendRequest('list "album"') + self.assertNotInResponse('Album: ') + self.assertInResponse('OK') + ### Date def test_list_date_with_quotes(self): @@ -279,6 +297,13 @@ class MusicDatabaseListTest(protocol.BaseTestCase): self.sendRequest('list "date" "artist" ""') self.assertInResponse('OK') + def test_list_date_should_not_return_blank_dates(self): + self.backend.library.dummy_find_exact_result = [Track(date='')] + + self.sendRequest('list "date"') + self.assertNotInResponse('Date: ') + self.assertInResponse('OK') + ### Genre def test_list_genre_with_quotes(self):