diff --git a/docs/changelog.rst b/docs/changelog.rst index f8a04d00..182db916 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -27,6 +27,9 @@ Core API ``tl_track`` versions of the calls. (Fixes: :issue:`1131` PR: :issue:`1136`, :issue:`1140`) +- Add :meth:`mopidy.core.playback.PlaybackController.get_current_tlid`. + (Part of: :issue:`1137`) + - Update core to handle backend crashes and bad data. (Fixes: :issue:`1161`) Models diff --git a/mopidy/core/playback.py b/mopidy/core/playback.py index 3605db0f..5836ff68 100644 --- a/mopidy/core/playback.py +++ b/mopidy/core/playback.py @@ -61,9 +61,7 @@ class PlaybackController(object): Returns a :class:`mopidy.models.Track` or :class:`None`. """ - tl_track = self.get_current_tl_track() - if tl_track is not None: - return tl_track.track + return getattr(self.get_current_tl_track(), 'track', None) current_track = deprecation.deprecated_property(get_current_track) """ @@ -71,6 +69,18 @@ class PlaybackController(object): Use :meth:`get_current_track` instead. """ + def get_current_tlid(self): + """ + Get the currently playing or selected TLID. + + Extracted from :meth:`get_current_tl_track` for convenience. + + Returns a :class:`int` or :class:`None`. + + .. versionadded:: 1.1 + """ + return getattr(self.get_current_tl_track(), 'tlid', None) + def get_stream_title(self): """Get the current stream title or :class:`None`.""" return self._stream_title diff --git a/tests/core/test_playback.py b/tests/core/test_playback.py index 7896ed4e..4b81dd8b 100644 --- a/tests/core/test_playback.py +++ b/tests/core/test_playback.py @@ -121,6 +121,17 @@ class CorePlaybackTest(unittest.TestCase): self.assertEqual( self.core.playback.get_current_track(), self.tracks[0]) + def test_get_current_tlid_none(self): + self.set_current_tl_track(None) + + self.assertEqual(self.core.playback.get_current_tlid(), None) + + def test_get_current_tlid_play(self): + self.core.playback.play(self.tl_tracks[0]) + + self.assertEqual( + self.core.playback.get_current_tlid(), self.tl_tracks[0].tlid) + # TODO Test state def test_play_selects_dummy1_backend(self):