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
|
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):
|
||||||
|
|||||||
@ -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):
|
||||||
|
|||||||
@ -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)
|
||||||
|
|||||||
@ -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()
|
||||||
|
|
||||||
|
|||||||
@ -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)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user