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.
This commit is contained in:
Stein Magnus Jodal 2013-10-09 23:52:46 +02:00
parent 447864774e
commit 863f7e0430
4 changed files with 23 additions and 0 deletions

View File

@ -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.

View File

@ -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)

View File

@ -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')

View File

@ -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)