MPD gets metadata's updates from stream

This commit is contained in:
Alexandre Petitjean 2015-01-16 23:45:07 +01:00
parent e4dd04cfb7
commit 7ee1935315
4 changed files with 28 additions and 26 deletions

View File

@ -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')

View File

@ -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

View File

@ -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)

View File

@ -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):