From 863f7e0430cde72c0bfef89c362b11e662f0129d Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Wed, 9 Oct 2013 23:52:46 +0200 Subject: [PATCH] mpd: Trigger 'output' idle event on mute_changed() This is required for e.g. ncmpcpp to detect that an enableoutput/disableoutput command worked, making it possible to toggle the output back without restarting ncmpcpp. --- mopidy/core/listener.py | 11 +++++++++++ mopidy/core/playback.py | 6 ++++++ mopidy/frontends/mpd/actor.py | 3 +++ tests/core/listener_test.py | 3 +++ 4 files changed, 23 insertions(+) diff --git a/mopidy/core/listener.py b/mopidy/core/listener.py index 5afb3f4f..40c78540 100644 --- a/mopidy/core/listener.py +++ b/mopidy/core/listener.py @@ -143,6 +143,17 @@ class CoreListener(object): """ pass + def mute_changed(self, mute): + """ + Called whenever the mute state is changed. + + *MAY* be implemented by actor. + + :param mute: the new mute state + :type mute: boolean + """ + pass + def seeked(self, time_position): """ Called whenever the time position changes by an unexpected amount, e.g. diff --git a/mopidy/core/playback.py b/mopidy/core/playback.py index a9561894..3dc6d0aa 100644 --- a/mopidy/core/playback.py +++ b/mopidy/core/playback.py @@ -304,6 +304,8 @@ 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""" @@ -537,6 +539,10 @@ class PlaybackController(object): 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) diff --git a/mopidy/frontends/mpd/actor.py b/mopidy/frontends/mpd/actor.py index f1fefae4..4d983b73 100644 --- a/mopidy/frontends/mpd/actor.py +++ b/mopidy/frontends/mpd/actor.py @@ -55,3 +55,6 @@ class MpdFrontend(pykka.ThreadingActor, CoreListener): def volume_changed(self, volume): self.send_idle('mixer') + + def mute_changed(self, mute): + self.send_idle('output') diff --git a/tests/core/listener_test.py b/tests/core/listener_test.py index d1773a12..3678451d 100644 --- a/tests/core/listener_test.py +++ b/tests/core/listener_test.py @@ -51,5 +51,8 @@ class CoreListenerTest(unittest.TestCase): def test_listener_has_default_impl_for_volume_changed(self): self.listener.volume_changed(70) + def test_listener_has_default_impl_for_mute_changed(self): + self.listener.mute_changed(True) + def test_listener_has_default_impl_for_seeked(self): self.listener.seeked(0)