qpaeq: Try to load equalizer module before failing, better error messages

This fixes bug 38728 [1]. When equalizer features are unavailable in running
pulseaudio daemon, try to load relevant module. If this fails, following error
is printed on stderr instead of a confusing traceback:

It seems that running pulseaudio does not support equalizer features and
loading module-equalizer-sink module failed. Exiting...

[1] https://bugs.freedesktop.org/show_bug.cgi?id=38728

Signed-off-by: Matěj Laitl <matej@laitl.cz>
This commit is contained in:
Matěj Laitl 2012-03-19 22:44:30 +01:00 committed by Tanu Kaskinen
parent 7b8681de07
commit f36148a82e

View file

@ -49,7 +49,7 @@ def connect():
except Exception as e:
sys.stderr.write('There was an error connecting to pulseaudio, '
'please make sure you have the pulseaudio dbus '
'and equalizer modules loaded, exiting...\n')
'module loaded, exiting...\n')
sys.exit(-1)
@ -67,6 +67,8 @@ class QPaeq(QtGui.QWidget):
manager_iface='org.PulseAudio.Ext.Equalizing1.Manager'
core_iface='org.PulseAudio.Core1'
core_path='/org/pulseaudio/core1'
module_name='module-equalizer-sink'
def __init__(self):
QtGui.QWidget.__init__(self)
self.setWindowTitle('qpaeq')
@ -226,9 +228,25 @@ class QPaeq(QtGui.QWidget):
#)
def set_connection(self):
self.connection=connect()
self.manager_obj=self.connection.get_object(object_path=self.manager_path)
manager_props=dbus.Interface(self.manager_obj,dbus_interface=prop_iface)
self.sinks=manager_props.Get(self.manager_iface,'EqualizedSinks')
try:
self.sinks=manager_props.Get(self.manager_iface,'EqualizedSinks')
except dbus.exceptions.DBusException:
# probably module not yet loaded, try to load it:
try:
core=self.connection.get_object(object_path=self.core_path)
core.LoadModule(self.module_name,{},dbus_interface=self.core_iface)
# yup, we don't need to re-create manager_obj and manager_props,
# these are late-bound
self.sinks=manager_props.Get(self.manager_iface,'EqualizedSinks')
except dbus.exceptions.DBusException:
sys.stderr.write('It seems that running pulseaudio does not support '
'equalizer features and loading %s module failed.\n'
'Exiting...\n' % self.module_name)
sys.exit(-1)
def set_callbacks(self):
manager=dbus.Interface(self.manager_obj,dbus_interface=self.manager_iface)
manager.connect_to_signal('ProfilesChanged',self.update_profiles)