MPD gets metadata's updates from stream
This commit is contained in:
parent
e4dd04cfb7
commit
7ee1935315
@ -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')
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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):
|
||||
|
||||
Loading…
Reference in New Issue
Block a user