e: Port mixer to edbus

Patch by: José Roberto de Souza  <zehortigoza@profusion.mobi>



SVN revision: 82015
This commit is contained in:
José Roberto de Souza 2013-01-02 20:38:30 +00:00 committed by Lucas De Marchi
parent 9631258de4
commit 2f5703e370
1 changed files with 29 additions and 43 deletions

View File

@ -1,7 +1,6 @@
#include "e_mod_main.h"
#include "Pulse.h"
#define PULSE_BUS "org.PulseAudio.Core1"
#define PULSE_PATH "/org/pulseaudio/core1"
#define PULSE_INTERFACE "org.PulseAudio.Core1"
@ -17,8 +16,8 @@ static Eina_List *sources = NULL;
static Ecore_Poller *pulse_poller = NULL;
static Eina_Hash *queue_states = NULL;
static E_DBus_Connection *dbus = NULL;
static E_DBus_Signal_Handler *dbus_handler = NULL;
static EDBus_Connection *dbus = NULL;
static EDBus_Signal_Handler *dbus_handler = NULL;
static Ecore_Timer *disc_timer = NULL;
static unsigned int disc_count = 0;
@ -37,54 +36,43 @@ _pulse_poller_cb(void *d __UNUSED__)
}
static void
_dbus_poll(void *data __UNUSED__,
DBusMessage *msg)
_dbus_poll(void *data EINA_UNUSED, const EDBus_Message *msg)
{
DBusError err;
const char *name, *from, *to;
if (edbus_message_arguments_get(msg, "sss", &name, &from, &to))
{
if (!strcmp(name, PULSE_BUS))
e_mixer_pulse_init();
}
dbus_error_init(&err);
if (!dbus_message_get_args(msg, &err,
DBUS_TYPE_STRING, &name,
DBUS_TYPE_STRING, &from,
DBUS_TYPE_STRING, &to,
DBUS_TYPE_INVALID))
dbus_error_free(&err);
//printf("name: %s\nfrom: %s\nto: %s\n", name, from, to);
if ((name) && !strcmp(name, PULSE_BUS))
e_mixer_pulse_init();
if (dbus_handler)
{
e_dbus_signal_handler_del(dbus, dbus_handler);
edbus_signal_handler_del(dbus_handler);
dbus_handler = NULL;
}
if (dbus)
{
e_dbus_connection_close(dbus);
edbus_connection_unref(dbus);
dbus = NULL;
e_dbus_shutdown();
edbus_shutdown();
}
}
static void
_dbus_test(void *data __UNUSED__,
DBusMessage *msg __UNUSED__,
DBusError *error)
_dbus_test(void *data EINA_UNUSED, const EDBus_Message *msg, EDBus_Pending *pending EINA_UNUSED)
{
if ((error) && (dbus_error_is_set(error)))
if (edbus_message_error_get(msg, NULL, NULL))
{
dbus_error_free(error);
if (dbus_handler)
{
e_dbus_signal_handler_del(dbus, dbus_handler);
edbus_signal_handler_del(dbus_handler);
dbus_handler = NULL;
}
if (dbus)
{
e_dbus_connection_close(dbus);
edbus_connection_unref(dbus);
dbus = NULL;
e_dbus_shutdown();
edbus_shutdown();
}
e_mod_mixer_pulse_ready(EINA_FALSE);
return;
@ -350,15 +338,15 @@ e_mixer_pulse_init(void)
if (dbus) goto error;
if ((!conn) || (!pulse_connect(conn)))
{
DBusMessage *msg;
EDBus_Message *msg;
double interval;
e_dbus_init();
dbus = e_dbus_bus_get(DBUS_BUS_SESSION);
edbus_init();
dbus = edbus_connection_get(EDBUS_CONNECTION_TYPE_SESSION);
if (!dbus)
{
e_dbus_shutdown();
edbus_shutdown();
return EINA_FALSE;
}
@ -369,14 +357,13 @@ e_mixer_pulse_init(void)
pulse_poller = ecore_poller_add(ECORE_POLLER_CORE, 5.0 / interval, _pulse_poller_cb, NULL);
}
if (!dbus_handler)
dbus_handler = e_dbus_signal_handler_add(dbus,
E_DBUS_FDO_BUS, E_DBUS_FDO_PATH,
E_DBUS_FDO_INTERFACE,
"NameOwnerChanged", (E_DBus_Signal_Cb)_dbus_poll, NULL);
dbus_handler = edbus_signal_handler_add(dbus, EDBUS_FDO_BUS,
EDBUS_FDO_PATH,
EDBUS_FDO_INTERFACE, "NameOwnerChanged", _dbus_poll, NULL);
msg = dbus_message_new_method_call(PULSE_BUS, PULSE_PATH, PULSE_INTERFACE, "suuuuuup");
e_dbus_method_call_send(dbus, msg, NULL, (E_DBus_Callback_Func)_dbus_test, NULL, -1, NULL); /* test for not running pulse */
dbus_message_unref(msg);
msg = edbus_message_method_call_new(PULSE_BUS, PULSE_PATH, PULSE_INTERFACE, "suuuuuup");
edbus_connection_send(dbus, msg, _dbus_test, NULL, -1); /* test for not running pulse */
edbus_message_unref(msg);
pulse_free(conn);
conn = NULL;
pulse_shutdown();
@ -421,14 +408,14 @@ e_mixer_pulse_shutdown(void)
queue_states = NULL;
if (dbus_handler)
{
e_dbus_signal_handler_del(dbus, dbus_handler);
edbus_signal_handler_del(dbus_handler);
dbus_handler = NULL;
}
if (dbus)
{
e_dbus_connection_close(dbus);
edbus_connection_unref(dbus);
dbus = NULL;
e_dbus_shutdown();
edbus_shutdown();
}
pulse_shutdown();
}
@ -649,4 +636,3 @@ e_mixer_pulse_has_capture(E_Mixer_System *self __UNUSED__, E_Mixer_Channel *chan
{
return 0;
}