From ea37cf1a447acedc1df05c8c79867ab04c18d5c6 Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Wed, 19 Dec 2012 17:06:04 +0100 Subject: [PATCH] core: Include the TlTrack in track_playback_* events --- docs/changes.rst | 3 +++ mopidy/core/listener.py | 24 ++++++++++++------------ mopidy/core/playback.py | 13 +++++++------ mopidy/frontends/lastfm.py | 6 ++++-- mopidy/frontends/mpris/actor.py | 8 ++++---- tests/core/events_test.py | 15 +++++++++++---- tests/core/listener_test.py | 14 +++++++------- tests/frontends/mpris/events_test.py | 10 +++++----- 8 files changed, 53 insertions(+), 40 deletions(-) diff --git a/docs/changes.rst b/docs/changes.rst index 8a7b2d91..96056c18 100644 --- a/docs/changes.rst +++ b/docs/changes.rst @@ -50,6 +50,9 @@ v0.11.0 (in development) - Include the new volume level in the :meth:`mopidy.core.CoreListener.volume_changed` event. +- The ``track_playback_{paused,resumed,started,ended}`` events now include a + :class:`mopidy.models.TlTrack` instead of a :class:`mopidy.models.Track`. + v0.10.0 (2012-12-12) ==================== diff --git a/mopidy/core/listener.py b/mopidy/core/listener.py index 7c4ab093..c93fc39e 100644 --- a/mopidy/core/listener.py +++ b/mopidy/core/listener.py @@ -34,51 +34,51 @@ class CoreListener(object): """ getattr(self, event)(**kwargs) - def track_playback_paused(self, track, time_position): + def track_playback_paused(self, tl_track, time_position): """ Called whenever track playback is paused. *MAY* be implemented by actor. - :param track: the track that was playing when playback paused - :type track: :class:`mopidy.models.Track` + :param tl_track: the track that was playing when playback paused + :type tl_track: :class:`mopidy.models.TlTrack` :param time_position: the time position in milliseconds :type time_position: int """ pass - def track_playback_resumed(self, track, time_position): + def track_playback_resumed(self, tl_track, time_position): """ Called whenever track playback is resumed. *MAY* be implemented by actor. - :param track: the track that was playing when playback resumed - :type track: :class:`mopidy.models.Track` + :param tl_track: the track that was playing when playback resumed + :type tl_track: :class:`mopidy.models.TlTrack` :param time_position: the time position in milliseconds :type time_position: int """ pass - def track_playback_started(self, track): + def track_playback_started(self, tl_track): """ Called whenever a new track starts playing. *MAY* be implemented by actor. - :param track: the track that just started playing - :type track: :class:`mopidy.models.Track` + :param tl_track: the track that just started playing + :type tl_track: :class:`mopidy.models.TlTrack` """ pass - def track_playback_ended(self, track, time_position): + def track_playback_ended(self, tl_track, time_position): """ Called whenever playback of a track ends. *MAY* be implemented by actor. - :param track: the track that was played before playback stopped - :type track: :class:`mopidy.models.Track` + :param tl_track: the track that was played before playback stopped + :type tl_track: :class:`mopidy.models.TlTrack` :param time_position: the time position in milliseconds :type time_position: int """ diff --git a/mopidy/core/playback.py b/mopidy/core/playback.py index 141c2e70..21f09ad2 100644 --- a/mopidy/core/playback.py +++ b/mopidy/core/playback.py @@ -482,7 +482,7 @@ class PlaybackController(object): return listener.CoreListener.send( 'track_playback_paused', - track=self.current_track, time_position=self.time_position) + tl_track=self.current_tl_track, time_position=self.time_position) def _trigger_track_playback_resumed(self): logger.debug('Triggering track playback resumed event') @@ -490,22 +490,23 @@ class PlaybackController(object): return listener.CoreListener.send( 'track_playback_resumed', - track=self.current_track, time_position=self.time_position) + tl_track=self.current_tl_track, time_position=self.time_position) def _trigger_track_playback_started(self): logger.debug('Triggering track playback started event') - if self.current_track is None: + if self.current_tl_track is None: return listener.CoreListener.send( - 'track_playback_started', track=self.current_track) + 'track_playback_started', + tl_track=self.current_tl_track) def _trigger_track_playback_ended(self): logger.debug('Triggering track playback ended event') - if self.current_track is None: + if self.current_tl_track is None: return listener.CoreListener.send( 'track_playback_ended', - track=self.current_track, time_position=self.time_position) + tl_track=self.current_tl_track, time_position=self.time_position) def _trigger_playback_state_changed(self, old_state, new_state): logger.debug('Triggering playback state change event') diff --git a/mopidy/frontends/lastfm.py b/mopidy/frontends/lastfm.py index 565e5041..61dc306c 100644 --- a/mopidy/frontends/lastfm.py +++ b/mopidy/frontends/lastfm.py @@ -66,7 +66,8 @@ class LastfmFrontend(pykka.ThreadingActor, CoreListener): logger.error('Error during Last.fm setup: %s', e) self.stop() - def track_playback_started(self, track): + def track_playback_started(self, tl_track): + track = tl_track.track artists = ', '.join([a.name for a in track.artists]) duration = track.length and track.length // 1000 or 0 self.last_start_time = int(time.time()) @@ -83,7 +84,8 @@ class LastfmFrontend(pykka.ThreadingActor, CoreListener): pylast.MalformedResponseError, pylast.WSError) as e: logger.warning('Error submitting playing track to Last.fm: %s', e) - def track_playback_ended(self, track, time_position): + def track_playback_ended(self, tl_track, time_position): + track = tl_track.track artists = ', '.join([a.name for a in track.artists]) duration = track.length and track.length // 1000 or 0 time_position = time_position // 1000 diff --git a/mopidy/frontends/mpris/actor.py b/mopidy/frontends/mpris/actor.py index 57bbd790..5e171826 100644 --- a/mopidy/frontends/mpris/actor.py +++ b/mopidy/frontends/mpris/actor.py @@ -66,20 +66,20 @@ class MprisFrontend(pykka.ThreadingActor, CoreListener): self.mpris_object.PropertiesChanged( interface, dict(props_with_new_values), []) - def track_playback_paused(self, track, time_position): + def track_playback_paused(self, tl_track, time_position): logger.debug('Received track_playback_paused event') self._emit_properties_changed(objects.PLAYER_IFACE, ['PlaybackStatus']) - def track_playback_resumed(self, track, time_position): + def track_playback_resumed(self, tl_track, time_position): logger.debug('Received track_playback_resumed event') self._emit_properties_changed(objects.PLAYER_IFACE, ['PlaybackStatus']) - def track_playback_started(self, track): + def track_playback_started(self, tl_track): logger.debug('Received track_playback_started event') self._emit_properties_changed( objects.PLAYER_IFACE, ['PlaybackStatus', 'Metadata']) - def track_playback_ended(self, track, time_position): + def track_playback_ended(self, tl_track, time_position): logger.debug('Received track_playback_ended event') self._emit_properties_changed( objects.PLAYER_IFACE, ['PlaybackStatus', 'Metadata']) diff --git a/tests/core/events_test.py b/tests/core/events_test.py index bc3cf2e2..11881db7 100644 --- a/tests/core/events_test.py +++ b/tests/core/events_test.py @@ -25,16 +25,18 @@ class BackendEventsTest(unittest.TestCase): self.assertEqual(send.call_args[0][0], 'playlists_loaded') def test_pause_sends_track_playback_paused_event(self, send): - self.core.tracklist.add([Track(uri='dummy:a')]) + tl_tracks = self.core.tracklist.add([Track(uri='dummy:a')]).get() self.core.playback.play().get() send.reset_mock() self.core.playback.pause().get() self.assertEqual(send.call_args[0][0], 'track_playback_paused') + self.assertEqual(send.call_args[1]['tl_track'], tl_tracks[0]) + self.assertEqual(send.call_args[1]['time_position'], 0) def test_resume_sends_track_playback_resumed(self, send): - self.core.tracklist.add([Track(uri='dummy:a')]) + tl_tracks = self.core.tracklist.add([Track(uri='dummy:a')]).get() self.core.playback.play() self.core.playback.pause().get() send.reset_mock() @@ -42,23 +44,28 @@ class BackendEventsTest(unittest.TestCase): self.core.playback.resume().get() self.assertEqual(send.call_args[0][0], 'track_playback_resumed') + self.assertEqual(send.call_args[1]['tl_track'], tl_tracks[0]) + self.assertEqual(send.call_args[1]['time_position'], 0) def test_play_sends_track_playback_started_event(self, send): - self.core.tracklist.add([Track(uri='dummy:a')]) + tl_tracks = self.core.tracklist.add([Track(uri='dummy:a')]).get() send.reset_mock() self.core.playback.play().get() self.assertEqual(send.call_args[0][0], 'track_playback_started') + self.assertEqual(send.call_args[1]['tl_track'], tl_tracks[0]) def test_stop_sends_track_playback_ended_event(self, send): - self.core.tracklist.add([Track(uri='dummy:a')]) + tl_tracks = self.core.tracklist.add([Track(uri='dummy:a')]).get() self.core.playback.play().get() send.reset_mock() self.core.playback.stop().get() self.assertEqual(send.call_args_list[0][0][0], 'track_playback_ended') + self.assertEqual(send.call_args_list[0][1]['tl_track'], tl_tracks[0]) + self.assertEqual(send.call_args_list[0][1]['time_position'], 0) def test_seek_sends_seeked_event(self, send): self.core.tracklist.add([Track(uri='dummy:a', length=40000)]) diff --git a/tests/core/listener_test.py b/tests/core/listener_test.py index 8aaf1234..2d7182d9 100644 --- a/tests/core/listener_test.py +++ b/tests/core/listener_test.py @@ -3,7 +3,7 @@ from __future__ import unicode_literals import mock from mopidy.core import CoreListener, PlaybackState -from mopidy.models import Playlist, Track +from mopidy.models import Playlist, TlTrack from tests import unittest @@ -16,22 +16,22 @@ class CoreListenerTest(unittest.TestCase): self.listener.track_playback_paused = mock.Mock() self.listener.on_event( - 'track_playback_paused', track=Track(), position=0) + 'track_playback_paused', track=TlTrack(), position=0) self.listener.track_playback_paused.assert_called_with( - track=Track(), position=0) + track=TlTrack(), position=0) def test_listener_has_default_impl_for_track_playback_paused(self): - self.listener.track_playback_paused(Track(), 0) + self.listener.track_playback_paused(TlTrack(), 0) def test_listener_has_default_impl_for_track_playback_resumed(self): - self.listener.track_playback_resumed(Track(), 0) + self.listener.track_playback_resumed(TlTrack(), 0) def test_listener_has_default_impl_for_track_playback_started(self): - self.listener.track_playback_started(Track()) + self.listener.track_playback_started(TlTrack()) def test_listener_has_default_impl_for_track_playback_ended(self): - self.listener.track_playback_ended(Track(), 0) + self.listener.track_playback_ended(TlTrack(), 0) def test_listener_has_default_impl_for_playback_state_changed(self): self.listener.playback_state_changed( diff --git a/tests/frontends/mpris/events_test.py b/tests/frontends/mpris/events_test.py index 60c9a783..f1add1b3 100644 --- a/tests/frontends/mpris/events_test.py +++ b/tests/frontends/mpris/events_test.py @@ -5,7 +5,7 @@ import sys import mock from mopidy.exceptions import OptionalDependencyError -from mopidy.models import Playlist, Track +from mopidy.models import Playlist, TlTrack try: from mopidy.frontends.mpris import MprisFrontend, objects @@ -25,7 +25,7 @@ class BackendEventsTest(unittest.TestCase): def test_track_playback_paused_event_changes_playback_status(self): self.mpris_object.Get.return_value = 'Paused' - self.mpris_frontend.track_playback_paused(Track(), 0) + self.mpris_frontend.track_playback_paused(TlTrack(), 0) self.assertListEqual(self.mpris_object.Get.call_args_list, [ ((objects.PLAYER_IFACE, 'PlaybackStatus'), {}), ]) @@ -34,7 +34,7 @@ class BackendEventsTest(unittest.TestCase): def test_track_playback_resumed_event_changes_playback_status(self): self.mpris_object.Get.return_value = 'Playing' - self.mpris_frontend.track_playback_resumed(Track(), 0) + self.mpris_frontend.track_playback_resumed(TlTrack(), 0) self.assertListEqual(self.mpris_object.Get.call_args_list, [ ((objects.PLAYER_IFACE, 'PlaybackStatus'), {}), ]) @@ -43,7 +43,7 @@ class BackendEventsTest(unittest.TestCase): def test_track_playback_started_changes_playback_status_and_metadata(self): self.mpris_object.Get.return_value = '...' - self.mpris_frontend.track_playback_started(Track()) + self.mpris_frontend.track_playback_started(TlTrack()) self.assertListEqual(self.mpris_object.Get.call_args_list, [ ((objects.PLAYER_IFACE, 'PlaybackStatus'), {}), ((objects.PLAYER_IFACE, 'Metadata'), {}), @@ -54,7 +54,7 @@ class BackendEventsTest(unittest.TestCase): def test_track_playback_ended_changes_playback_status_and_metadata(self): self.mpris_object.Get.return_value = '...' - self.mpris_frontend.track_playback_ended(Track(), 0) + self.mpris_frontend.track_playback_ended(TlTrack(), 0) self.assertListEqual(self.mpris_object.Get.call_args_list, [ ((objects.PLAYER_IFACE, 'PlaybackStatus'), {}), ((objects.PLAYER_IFACE, 'Metadata'), {}),