core: Forward {volume,mute}_changed events, don't trigger them ourselves
This commit is contained in:
parent
84ad6db546
commit
a3dc763b29
@ -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):
|
||||
|
||||
@ -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):
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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()
|
||||
|
||||
|
||||
@ -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)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user