core: Forward {volume,mute}_changed events, don't trigger them ourselves

This commit is contained in:
Stein Magnus Jodal 2014-07-10 01:15:44 +02:00
parent 84ad6db546
commit a3dc763b29
5 changed files with 34 additions and 23 deletions

View File

@ -5,7 +5,7 @@ import itertools
import pykka
from mopidy import audio, backend
from mopidy import audio, backend, mixer
from mopidy.audio import PlaybackState
from mopidy.core.library import LibraryController
from mopidy.core.listener import CoreListener
@ -15,7 +15,10 @@ from mopidy.core.tracklist import TracklistController
from mopidy.utils import versioning
class Core(pykka.ThreadingActor, audio.AudioListener, backend.BackendListener):
class Core(
pykka.ThreadingActor, audio.AudioListener, backend.BackendListener,
mixer.MixerListener):
library = None
"""The library controller. An instance of
:class:`mopidy.core.LibraryController`."""
@ -81,6 +84,14 @@ class Core(pykka.ThreadingActor, audio.AudioListener, backend.BackendListener):
# Forward event from backend to frontends
CoreListener.send('playlists_loaded')
def volume_changed(self, volume):
# Forward event from mixer to frontends
CoreListener.send('volume_changed', volume=volume)
def mute_changed(self, muted):
# Forward event from mixer to frontends
CoreListener.send('mute_changed', mute=muted)
class Backends(list):
def __init__(self, backends):

View File

@ -150,6 +150,7 @@ class CoreListener(listener.Listener):
:param mute: the new mute state
:type mute: boolean
"""
# TODO Change 'mute' arg to 'muted' next time we break this API
pass
def seeked(self, time_position):

View File

@ -101,8 +101,6 @@ class PlaybackController(object):
# For testing
self._volume = volume
self._trigger_volume_changed(volume)
volume = property(get_volume, set_volume)
"""Volume as int in range [0..100] or :class:`None`"""
@ -121,8 +119,6 @@ class PlaybackController(object):
# For testing
self._mute = value
self._trigger_mute_changed(value)
mute = property(get_mute, set_mute)
"""Mute state as a :class:`True` if muted, :class:`False` otherwise"""
@ -351,14 +347,6 @@ class PlaybackController(object):
'playback_state_changed',
old_state=old_state, new_state=new_state)
def _trigger_volume_changed(self, volume):
logger.debug('Triggering volume changed event')
listener.CoreListener.send('volume_changed', volume=volume)
def _trigger_mute_changed(self, mute):
logger.debug('Triggering mute changed event')
listener.CoreListener.send('mute_changed', mute=mute)
def _trigger_seeked(self, time_position):
logger.debug('Triggering seeked event')
listener.CoreListener.send('seeked', time_position=time_position)

View File

@ -20,11 +20,23 @@ class BackendEventsTest(unittest.TestCase):
def tearDown(self):
pykka.ActorRegistry.stop_all()
def test_backends_playlists_loaded_forwards_event_to_frontends(self, send):
def test_forwards_backend_playlists_loaded_event_to_frontends(self, send):
self.core.playlists_loaded().get()
self.assertEqual(send.call_args[0][0], 'playlists_loaded')
def test_forwards_mixer_volume_changed_event_to_frontends(self, send):
self.core.volume_changed(volume=60).get()
self.assertEqual(send.call_args[0][0], 'volume_changed')
self.assertEqual(send.call_args[1]['volume'], 60)
def test_forwards_mixer_mute_changed_event_to_frontends(self, send):
self.core.mute_changed(muted=True).get()
self.assertEqual(send.call_args[0][0], 'mute_changed')
self.assertEqual(send.call_args[1]['mute'], True)
def test_tracklist_add_sends_tracklist_changed_event(self, send):
send.reset_mock()

View File

@ -376,17 +376,16 @@ class CorePlaybackTest(unittest.TestCase):
# TODO Test on_tracklist_change
# TODO Test volume
def test_volume(self):
self.assertEqual(self.core.playback.volume, None)
@mock.patch(
'mopidy.core.playback.listener.CoreListener', spec=core.CoreListener)
def test_set_volume_emits_volume_changed_event(self, listener_mock):
self.core.playback.set_volume(10)
listener_mock.reset_mock()
self.core.playback.volume = 30
self.core.playback.set_volume(20)
self.assertEqual(self.core.playback.volume, 30)
listener_mock.send.assert_called_once_with('volume_changed', volume=20)
self.core.playback.volume = 70
self.assertEqual(self.core.playback.volume, 70)
def test_mute(self):
self.assertEqual(self.core.playback.mute, False)