diff --git a/mopidy/core/actor.py b/mopidy/core/actor.py index 15a94665..4ad38cb6 100644 --- a/mopidy/core/actor.py +++ b/mopidy/core/actor.py @@ -7,6 +7,7 @@ import pykka from mopidy import audio, backend, mixer from mopidy.audio import PlaybackState +from mopidy.audio.utils import convert_tags_to_track from mopidy.core.history import HistoryController from mopidy.core.library import LibraryController from mopidy.core.listener import CoreListener @@ -111,7 +112,8 @@ class Core( # Request available metadata and put in playback future = audio_proxy.get_current_tags() - self.playback.current_metadata = future.get() + mtdata = future.get() + self.playback.current_md_track = convert_tags_to_track(mtdata) # Send event to frontends CoreListener.send('current_metadata_changed') diff --git a/mopidy/core/playback.py b/mopidy/core/playback.py index 4b5f4b77..ad99e6ec 100644 --- a/mopidy/core/playback.py +++ b/mopidy/core/playback.py @@ -126,12 +126,13 @@ class PlaybackController(object): mute = property(get_mute, set_mute) """Mute state as a :class:`True` if muted, :class:`False` otherwise""" - def get_current_metadata(self): - return self.current_metadata + def get_current_metadata_track(self): + return self.current_md_track - current_metadata = None + current_md_track = None """ - The currently playing metadata :class:`dict`, or :class:`None`. + The currently playing metadata :class:`mopidy.models.Track`, + or :class:`None`. """ # Methods diff --git a/mopidy/mpd/protocol/current_playlist.py b/mopidy/mpd/protocol/current_playlist.py index 09121df1..d5464791 100644 --- a/mopidy/mpd/protocol/current_playlist.py +++ b/mopidy/mpd/protocol/current_playlist.py @@ -278,10 +278,10 @@ def plchanges(context, version): if int(version) < context.core.tracklist.version.get(): return translator.tracks_to_mpd_format( context.core.tracklist.tl_tracks.get()) - elif int(version) == context.core.tracklist.version.get(): + else: return translator.metadata_track_to_mpd_format( context.core.playback.current_tl_track.get(), - context.core.playback.current_metadata.get()) + context.core.playback.current_md_track.get()) @protocol.commands.add('plchangesposid', version=protocol.INT) diff --git a/mopidy/mpd/translator.py b/mopidy/mpd/translator.py index 95b1b263..0788b2d6 100644 --- a/mopidy/mpd/translator.py +++ b/mopidy/mpd/translator.py @@ -2,7 +2,7 @@ from __future__ import absolute_import, unicode_literals import re -from mopidy.models import TlTrack +from mopidy.models import TlTrack, Track # TODO: special handling of local:// uri scheme normalize_path_re = re.compile(r'[^/]+') @@ -87,25 +87,24 @@ def track_to_mpd_format(track, position=None): def metadata_track_to_mpd_format(track, metadata): - # TODO: replace track data with metadata - result = [] - if track: - if isinstance(track, TlTrack): - (tlid, track) = track - else: - (tlid, track) = (None, track) - result = [ - ('file', track.uri or ''), - ('Time', track.length and (track.length // 1000) or 0), - ('Artist', artists_to_mpd_format(track.artists)), - ('Album', track.album and track.album.name or ''), - ] - if metadata and 'title' in metadata: - result.append(('Title', metadata['title'])) - else: - result.append(('Title', track.name or '')) + """ + Create new Track with a mix of track and metadata + and convert it to mpd format + """ + # Sanity check + if track is None or metadata is None: + return None - return result + # + if isinstance(track, TlTrack): + (tlid, track) = track + + track_kwargs = {k: v for k, v in track.__dict__.items() if v} + for k, v in metadata.__dict__.items(): + if v: + track_kwargs[k] = v + result_track = Track(**track_kwargs) + return track_to_mpd_format(result_track) def artists_to_mpd_format(artists):