From 81063995986f8efe85de2e05f093ce78d83b00e3 Mon Sep 17 00:00:00 2001 From: Mark Greenwood Date: Sun, 26 Jul 2015 12:55:46 +0100 Subject: [PATCH 1/4] Simplify the whole thing by using taglist types and not bothering with the config option or command to switch it on --- mopidy/mpd/protocol/tagtype_list.py | 2 ++ mopidy/mpd/translator.py | 6 ++++++ tests/mpd/test_translator.py | 7 +++++-- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/mopidy/mpd/protocol/tagtype_list.py b/mopidy/mpd/protocol/tagtype_list.py index 575b1aaf..d9dee145 100644 --- a/mopidy/mpd/protocol/tagtype_list.py +++ b/mopidy/mpd/protocol/tagtype_list.py @@ -19,4 +19,6 @@ TAGTYPE_LIST = [ 'MUSICBRAINZ_ALBUMID', 'MUSICBRAINZ_ALBUMARTISTID', 'MUSICBRAINZ_TRACKID', + 'X-AlbumUri', + 'X-AlbumImage', ] diff --git a/mopidy/mpd/translator.py b/mopidy/mpd/translator.py index ef16ed28..4aa4bdb9 100644 --- a/mopidy/mpd/translator.py +++ b/mopidy/mpd/translator.py @@ -97,6 +97,12 @@ def track_to_mpd_format(track, position=None, stream_title=None): if track.musicbrainz_id is not None: result.append(('MUSICBRAINZ_TRACKID', track.musicbrainz_id)) + if track.album and track.album.uri: + result.append(('X-AlbumUri', track.album.uri)) + if track.album and track.album.images: + images = ';'.join(i for i in track.album.images if i is not '') + result.append(('X-AlbumImage', images)) + result = [element for element in result if _has_value(*element)] return result diff --git a/tests/mpd/test_translator.py b/tests/mpd/test_translator.py index 57477a51..6a3767af 100644 --- a/tests/mpd/test_translator.py +++ b/tests/mpd/test_translator.py @@ -14,7 +14,8 @@ class TrackMpdFormatTest(unittest.TestCase): name='a name', album=Album( name='an album', num_tracks=13, - artists=[Artist(name='an other artist')]), + artists=[Artist(name='an other artist')], + uri='urischeme:album:12345', images=['image1', 'image2']), track_no=7, composers=[Artist(name='a composer')], performers=[Artist(name='a performer')], @@ -76,8 +77,10 @@ class TrackMpdFormatTest(unittest.TestCase): self.assertIn(('Disc', 1), result) self.assertIn(('Pos', 9), result) self.assertIn(('Id', 122), result) + self.assertIn(('X-AlbumUri', 'urischeme:album:12345'), result) + self.assertIn(('X-AlbumImage', 'image2;image1'), result) self.assertNotIn(('Comment', 'a comment'), result) - self.assertEqual(len(result), 14) + self.assertEqual(len(result), 16) def test_track_to_mpd_format_with_last_modified(self): track = self.track.replace(last_modified=995303899000) From 310fcdf0ef680fbdef09b311a4a88e87d02aa63e Mon Sep 17 00:00:00 2001 From: Mark Greenwood Date: Sun, 26 Jul 2015 13:04:33 +0100 Subject: [PATCH 2/4] Unexpected test failure fixed --- tests/mpd/test_translator.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/mpd/test_translator.py b/tests/mpd/test_translator.py index 6a3767af..dc58bac2 100644 --- a/tests/mpd/test_translator.py +++ b/tests/mpd/test_translator.py @@ -78,7 +78,7 @@ class TrackMpdFormatTest(unittest.TestCase): self.assertIn(('Pos', 9), result) self.assertIn(('Id', 122), result) self.assertIn(('X-AlbumUri', 'urischeme:album:12345'), result) - self.assertIn(('X-AlbumImage', 'image2;image1'), result) + self.assertIn(('X-AlbumImage', 'image1;image2'), result) self.assertNotIn(('Comment', 'a comment'), result) self.assertEqual(len(result), 16) From c6a831b40a0ea2798dee08618995bd0645c31415 Mon Sep 17 00:00:00 2001 From: Mark Greenwood Date: Sun, 26 Jul 2015 13:18:30 +0100 Subject: [PATCH 3/4] Update changelog for protocol extensions --- docs/changelog.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/changelog.rst b/docs/changelog.rst index fb587c6c..71ae42cf 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -116,6 +116,9 @@ MPD frontend - Exclude empty tags fields from metadata output. (Fixes: :issue:`1045`, PR: :issue:`1235`) +- Implement protocol extensions to output Album URIs and Album Images when + outputting track data to clients. (PR: :issue:`1230`) + Stream backend -------------- From 9649dc07774ed35a7e0c0da5d8e37b2db8e33e7a Mon Sep 17 00:00:00 2001 From: Mark Greenwood Date: Sun, 26 Jul 2015 13:57:46 +0100 Subject: [PATCH 4/4] list order in python is not deterministic, hence had to change the test --- tests/mpd/test_translator.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/mpd/test_translator.py b/tests/mpd/test_translator.py index dc58bac2..65c80bbb 100644 --- a/tests/mpd/test_translator.py +++ b/tests/mpd/test_translator.py @@ -15,7 +15,7 @@ class TrackMpdFormatTest(unittest.TestCase): album=Album( name='an album', num_tracks=13, artists=[Artist(name='an other artist')], - uri='urischeme:album:12345', images=['image1', 'image2']), + uri='urischeme:album:12345', images=['image1']), track_no=7, composers=[Artist(name='a composer')], performers=[Artist(name='a performer')], @@ -78,7 +78,7 @@ class TrackMpdFormatTest(unittest.TestCase): self.assertIn(('Pos', 9), result) self.assertIn(('Id', 122), result) self.assertIn(('X-AlbumUri', 'urischeme:album:12345'), result) - self.assertIn(('X-AlbumImage', 'image1;image2'), result) + self.assertIn(('X-AlbumImage', 'image1'), result) self.assertNotIn(('Comment', 'a comment'), result) self.assertEqual(len(result), 16)