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

View File

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

View File

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

View File

@ -20,11 +20,23 @@ class BackendEventsTest(unittest.TestCase):
def tearDown(self): def tearDown(self):
pykka.ActorRegistry.stop_all() 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.core.playlists_loaded().get()
self.assertEqual(send.call_args[0][0], 'playlists_loaded') 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): def test_tracklist_add_sends_tracklist_changed_event(self, send):
send.reset_mock() send.reset_mock()

View File

@ -376,17 +376,16 @@ class CorePlaybackTest(unittest.TestCase):
# TODO Test on_tracklist_change # TODO Test on_tracklist_change
# TODO Test volume def test_volume(self):
self.assertEqual(self.core.playback.volume, None)
@mock.patch( self.core.playback.volume = 30
'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.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): def test_mute(self):
self.assertEqual(self.core.playback.mute, False) self.assertEqual(self.core.playback.mute, False)