One step beyond
This commit is contained in:
parent
ec94449a63
commit
e4dd04cfb7
@ -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):
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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.
|
||||
|
||||
@ -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')
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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.
|
||||
|
||||
Loading…
Reference in New Issue
Block a user