One step beyond

This commit is contained in:
Alexandre Petitjean 2015-01-16 21:41:55 +01:00
parent ec94449a63
commit e4dd04cfb7
6 changed files with 41 additions and 13 deletions

View File

@ -109,18 +109,12 @@ class Core(
if audios and len(audios) == 1:
audio_proxy = audios[0].proxy()
# Gets metadata
# Request available metadata and put in playback
future = audio_proxy.get_current_tags()
tags_data = future.get()
if not tags_data or not isinstance(tags_data, dict):
return
# Convert to track and set playback
track = audio.utils.convert_tags_to_track(tags_data)
self.playback.current_track = track
self.playback.current_metadata = future.get()
# Send event to frontends
CoreListener.send('track_metadata_changed', track_metadata=track)
CoreListener.send('current_metadata_changed')
class Backends(list):

View File

@ -164,13 +164,10 @@ class CoreListener(listener.Listener):
"""
pass
def track_metadata_changed(self, track_metadata):
def current_metadata_changed(self):
"""
Called whenever current track's metadata changed
*MAY* be implemented by actor.
:param track_metadata: the track with metadata
:type track_metadata: :class:`mopidy.models.Track`
"""
pass

View File

@ -126,6 +126,14 @@ 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
current_metadata = None
"""
The currently playing metadata :class:`dict`, or :class:`None`.
"""
# Methods
# TODO: remove this.

View File

@ -71,3 +71,6 @@ class MpdFrontend(pykka.ThreadingActor, CoreListener):
def mute_changed(self, mute):
self.send_idle('output')
def current_metadata_changed(self):
self.send_idle('playlist')

View File

@ -278,6 +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():
return translator.metadata_track_to_mpd_format(
context.core.playback.current_tl_track.get(),
context.core.playback.current_metadata.get())
@protocol.commands.add('plchangesposid', version=protocol.INT)

View File

@ -86,6 +86,28 @@ def track_to_mpd_format(track, position=None):
return result
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 ''))
return result
def artists_to_mpd_format(artists):
"""
Format track artists for output to MPD client.