diff --git a/mopidy/backends/spotify/playback.py b/mopidy/backends/spotify/playback.py index b02c2d9f..f4db490c 100644 --- a/mopidy/backends/spotify/playback.py +++ b/mopidy/backends/spotify/playback.py @@ -21,6 +21,7 @@ class SpotifyPlaybackProvider(BasePlaybackProvider): Link.from_string(track.uri).as_track()) self.backend.spotify.session.play(1) self.backend.output.play_uri('appsrc://') + self.backend.output.set_metadata(track) return True except SpotifyError as e: logger.warning('Play %s failed: %s', track.uri, e) diff --git a/mopidy/outputs/base.py b/mopidy/outputs/base.py index fbc86688..f81fe905 100644 --- a/mopidy/outputs/base.py +++ b/mopidy/outputs/base.py @@ -89,3 +89,17 @@ class BaseOutput(object): :rtype: :class:`True` if successful, else :class:`False` """ raise NotImplementedError + + def set_metadata(self, track): + """ + Set track metadata for currently playing song. + + Only needs to be called by sources such as appsrc which don't already + inject tags in pipeline. + + *MUST be implemented by subclass.* + + :param track: Track containing metadata for current song. + :type track: :class:`mopidy.modes.Track` + """ + raise NotImplementedError diff --git a/mopidy/outputs/gstreamer.py b/mopidy/outputs/gstreamer.py index f5e7a1a3..c92e51d4 100644 --- a/mopidy/outputs/gstreamer.py +++ b/mopidy/outputs/gstreamer.py @@ -197,3 +197,12 @@ class GStreamerOutput(ThreadingActor, BaseOutput): """Set volume in range [0..100]""" self.gst_volume.set_property('volume', volume / 100.0) return True + + def set_metadata(self, track): + tags = u'artist="%(artist)s",title="%(title)s",album="%(album)s"' % { + 'artist': u', '.join([a.name for a in track.artists]), + 'title': track.name, + 'album': track.album.name, + } + logger.debug('Setting tags to: %s', tags) + self.gst_taginject.set_property('tags', tags)