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 -------------- 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..65c80bbb 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']), 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', '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)