diff --git a/mopidy/core/actor.py b/mopidy/core/actor.py index 251f6e2c..ed1c33ab 100644 --- a/mopidy/core/actor.py +++ b/mopidy/core/actor.py @@ -5,7 +5,7 @@ import itertools import pykka -from mopidy import audio, backend, mixer, models +from mopidy import audio, backend, mixer from mopidy.audio import PlaybackState from mopidy.core.history import HistoryController from mopidy.core.library import LibraryController @@ -124,8 +124,9 @@ class Core( if not tags or 'title' not in tags or not tags['title']: return - self.playback._stream_ref = models.Ref.track(name=tags['title'][0]) - CoreListener.send('stream_changed') + title = tags['title'][0] + self.playback._stream_title = title + CoreListener.send('stream_title_changed', title=title) class Backends(list): diff --git a/mopidy/core/listener.py b/mopidy/core/listener.py index f013fa18..3ae03925 100644 --- a/mopidy/core/listener.py +++ b/mopidy/core/listener.py @@ -164,9 +164,9 @@ class CoreListener(listener.Listener): """ pass - def stream_changed(self): + def stream_title_changed(self, title): """ - Called whenever the currently playing stream changes. + Called whenever the currently playing stream title changes. *MAY* be implemented by actor. """ diff --git a/mopidy/core/playback.py b/mopidy/core/playback.py index 6314442b..e92563dd 100644 --- a/mopidy/core/playback.py +++ b/mopidy/core/playback.py @@ -20,7 +20,7 @@ class PlaybackController(object): self.core = core self._current_tl_track = None - self._stream_ref = None + self._stream_title = None self._state = PlaybackState.STOPPED def _get_backend(self): @@ -73,23 +73,9 @@ class PlaybackController(object): Use :meth:`get_current_track` instead. """ - def get_stream_reference(self): - """ - Get additional information about the current stream. - - For most cases this value won't be set, but for radio streams it will - contain a reference with the name of the currently playing track or - program. Clients should show this when available. - - The :class:`mopidy.models.Ref` instance may or may not have an URI set. - If present you can call ``lookup`` on it to get the full metadata for - the URI. - - Returns a :class:`mopidy.models.Ref` instance representing the current - stream. If nothing is playing, or no stream info is available this will - return :class:`None`. - """ - return self._stream_ref + def get_stream_title(self): + """Get the current stream title or :class:`None`.""" + return self._stream_title def get_state(self): """Get The playback state.""" @@ -248,7 +234,7 @@ class PlaybackController(object): self.set_current_tl_track(None) def on_stream_changed(self, uri): - self._stream_ref = None + self._stream_title = None def next(self): """ diff --git a/mopidy/mpd/actor.py b/mopidy/mpd/actor.py index 2c63bcb2..2aecb6d1 100644 --- a/mopidy/mpd/actor.py +++ b/mopidy/mpd/actor.py @@ -74,5 +74,5 @@ class MpdFrontend(pykka.ThreadingActor, CoreListener): def mute_changed(self, mute): self.send_idle('output') - def stream_changed(self): + def stream_title_changed(self, title): self.send_idle('playlist') diff --git a/mopidy/mpd/protocol/current_playlist.py b/mopidy/mpd/protocol/current_playlist.py index fdd65bde..d8e1a9d8 100644 --- a/mopidy/mpd/protocol/current_playlist.py +++ b/mopidy/mpd/protocol/current_playlist.py @@ -282,14 +282,14 @@ def plchanges(context, version): elif version == tracklist_version: # A version match could indicate this is just a metadata update, so # check for a stream ref and let the client know about the change. - stream_ref = context.core.playback.get_stream_reference().get() - if stream_ref is None: + stream_title = context.core.playback.get_stream_title().get() + if stream_title is None: return None tl_track = context.core.playback.current_tl_track.get() position = context.core.tracklist.index(tl_track).get() return translator.track_to_mpd_format( - tl_track, position=position, stream=stream_ref) + tl_track, position=position, stream_title=stream_title) @protocol.commands.add('plchangesposid', version=protocol.INT) diff --git a/mopidy/mpd/protocol/status.py b/mopidy/mpd/protocol/status.py index e2e73e6f..aa78b387 100644 --- a/mopidy/mpd/protocol/status.py +++ b/mopidy/mpd/protocol/status.py @@ -35,11 +35,11 @@ def currentsong(context): identified in status). """ tl_track = context.core.playback.current_tl_track.get() - stream = context.core.playback.get_stream_reference().get() + stream_title = context.core.playback.get_stream_title().get() if tl_track is not None: position = context.core.tracklist.index(tl_track).get() return translator.track_to_mpd_format( - tl_track, position=position, stream=stream) + tl_track, position=position, stream_title=stream_title) @protocol.commands.add('idle', list_command=False) diff --git a/mopidy/mpd/translator.py b/mopidy/mpd/translator.py index 37c1493b..10207a69 100644 --- a/mopidy/mpd/translator.py +++ b/mopidy/mpd/translator.py @@ -15,7 +15,7 @@ def normalize_path(path, relative=False): return '/'.join(parts) -def track_to_mpd_format(track, position=None, stream=None): +def track_to_mpd_format(track, position=None, stream_title=None): """ Format track for output to MPD client. @@ -23,10 +23,8 @@ def track_to_mpd_format(track, position=None, stream=None): :type track: :class:`mopidy.models.Track` or :class:`mopidy.models.TlTrack` :param position: track's position in playlist :type position: integer - :param key: if we should set key - :type key: boolean - :param mtime: if we should set mtime - :type mtime: boolean + :param stream_title: The current streams title. + :type position: string :rtype: list of two-tuples """ if isinstance(track, TlTrack): @@ -42,8 +40,8 @@ def track_to_mpd_format(track, position=None, stream=None): ('Album', track.album and track.album.name or ''), ] - if stream and stream.name != track.name: - result.append(('Name', stream.name)) + if stream_title: + result.append(('Name', stream_title)) if track.date: result.append(('Date', track.date)) diff --git a/tests/core/test_playback.py b/tests/core/test_playback.py index 15d2d5f8..80efc38a 100644 --- a/tests/core/test_playback.py +++ b/tests/core/test_playback.py @@ -571,45 +571,43 @@ class TestStream(unittest.TestCase): event, kwargs = self.events.pop(0) self.core.on_event(event, **kwargs) - def test_get_stream_reference_before_playback(self): - self.assertEqual(self.playback.get_stream_reference(), None) + def test_get_stream_title_before_playback(self): + self.assertEqual(self.playback.get_stream_title(), None) - def test_get_stream_reference_during_playback(self): + def test_get_stream_title_during_playback(self): self.core.playback.play() self.replay_audio_events() - self.assertEqual(self.playback.get_stream_reference(), None) + self.assertEqual(self.playback.get_stream_title(), None) - def test_get_stream_reference_during_playback_with_tags_change(self): + def test_get_stream_title_during_playback_with_tags_change(self): self.core.playback.play() self.audio.trigger_fake_tags_changed({'title': ['foobar']}).get() self.replay_audio_events() - expected = Ref.track(name='foobar') - self.assertEqual(self.playback.get_stream_reference(), expected) + self.assertEqual(self.playback.get_stream_title(), 'foobar') - def test_get_stream_reference_after_next(self): + def test_get_stream_title_after_next(self): self.core.playback.play() self.audio.trigger_fake_tags_changed({'title': ['foobar']}).get() self.core.playback.next() self.replay_audio_events() - self.assertEqual(self.playback.get_stream_reference(), None) + self.assertEqual(self.playback.get_stream_title(), None) - def test_get_stream_reference_after_next_with_tags_change(self): + def test_get_stream_title_after_next_with_tags_change(self): self.core.playback.play() self.audio.trigger_fake_tags_changed({'title': ['foo']}).get() self.core.playback.next() self.audio.trigger_fake_tags_changed({'title': ['bar']}).get() self.replay_audio_events() - expected = Ref.track(name='bar') - self.assertEqual(self.playback.get_stream_reference(), expected) + self.assertEqual(self.playback.get_stream_title(), 'bar') - def test_get_stream_reference_after_stop(self): + def test_get_stream_title_after_stop(self): self.core.playback.play() self.audio.trigger_fake_tags_changed({'title': ['foobar']}).get() self.core.playback.stop() self.replay_audio_events() - self.assertEqual(self.playback.get_stream_reference(), None) + self.assertEqual(self.playback.get_stream_title(), None)