core: Include the TlTrack in track_playback_* events

This commit is contained in:
Stein Magnus Jodal 2012-12-19 17:06:04 +01:00
parent e176425b91
commit ea37cf1a44
8 changed files with 53 additions and 40 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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'), {}),