core: Include the TlTrack in track_playback_* events
This commit is contained in:
parent
e176425b91
commit
ea37cf1a44
@ -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)
|
||||
====================
|
||||
|
||||
@ -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
|
||||
"""
|
||||
|
||||
@ -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')
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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'])
|
||||
|
||||
@ -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)])
|
||||
|
||||
@ -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(
|
||||
|
||||
@ -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'), {}),
|
||||
|
||||
Loading…
Reference in New Issue
Block a user