Replace handlers of deprecated Connected signals with new PropertyChanged.

This commit is contained in:
Luiz Augusto von Dentz 2008-10-03 12:15:26 -03:00
parent b205fcc17c
commit 0c998b0891

View file

@ -381,18 +381,51 @@ static DBusHandlerResult filter_cb(DBusConnection *bus, DBusMessage *msg, void *
} }
} }
} else if (dbus_message_is_signal(msg, "org.bluez.Headset", "Connected") || } else if (dbus_message_is_signal(msg, "org.bluez.Headset", "PropertyChanged") ||
dbus_message_is_signal(msg, "org.bluez.AudioSink", "Connected")) { dbus_message_is_signal(msg, "org.bluez.AudioSink", "PropertyChanged")) {
struct device *d; struct device *d;
const char *profile; const char *profile;
DBusMessageIter variant_i;
if (!dbus_message_iter_init(msg, &arg_i)) {
pa_log("dbus: message has no parameters");
goto done;
}
if (dbus_message_iter_get_arg_type(&arg_i) != DBUS_TYPE_STRING) {
pa_log("Property name not a string.");
goto done;
}
dbus_message_iter_get_basic(&arg_i, &value);
if (!dbus_message_iter_next(&arg_i)) {
pa_log("Property value missing");
goto done;
}
if (dbus_message_iter_get_arg_type(&arg_i) != DBUS_TYPE_VARIANT) {
pa_log("Property value not a variant.");
goto done;
}
dbus_message_iter_recurse(&arg_i, &variant_i);
if (dbus_message_iter_get_arg_type(&variant_i) == DBUS_TYPE_BOOLEAN) {
dbus_bool_t connected;
dbus_message_iter_get_basic(&variant_i, &connected);
if (!pa_streq(value, "Connected") || !connected)
goto done;
}
if (!(d = device_find(u, dbus_message_get_path(msg)))) { if (!(d = device_find(u, dbus_message_get_path(msg)))) {
d = device_new(dbus_message_get_path(msg)); d = device_new(dbus_message_get_path(msg));
PA_LLIST_PREPEND(struct device, u->device_list, d); PA_LLIST_PREPEND(struct device, u->device_list, d);
} }
if (dbus_message_is_signal(msg, "org.bluez.Headset", "Connected")) if (dbus_message_is_signal(msg, "org.bluez.Headset", "PropertyChanged"))
profile = "hsp"; profile = "hsp";
else else
profile = "a2dp"; profile = "a2dp";
@ -400,6 +433,7 @@ static DBusHandlerResult filter_cb(DBusConnection *bus, DBusMessage *msg, void *
load_module_for_device(u, d, profile); load_module_for_device(u, d, profile);
} }
done:
dbus_error_free(&err); dbus_error_free(&err);
return DBUS_HANDLER_RESULT_HANDLED; return DBUS_HANDLER_RESULT_HANDLED;
} }
@ -454,13 +488,13 @@ int pa__init(pa_module* m) {
goto fail; goto fail;
} }
dbus_bus_add_match(pa_dbus_connection_get(u->conn), "type='signal',sender='org.bluez',interface='org.bluez.Headset',member='Connected'", &err); dbus_bus_add_match(pa_dbus_connection_get(u->conn), "type='signal',sender='org.bluez',interface='org.bluez.Headset',member='PropertyChanged'", &err);
if (dbus_error_is_set(&err)) { if (dbus_error_is_set(&err)) {
pa_log_error("Unable to subscribe to org.bluez.Headset signals: %s: %s", err.name, err.message); pa_log_error("Unable to subscribe to org.bluez.Headset signals: %s: %s", err.name, err.message);
goto fail; goto fail;
} }
dbus_bus_add_match(pa_dbus_connection_get(u->conn), "type='signal',sender='org.bluez',interface='org.bluez.AudioSink',member='Connected'", &err); dbus_bus_add_match(pa_dbus_connection_get(u->conn), "type='signal',sender='org.bluez',interface='org.bluez.AudioSink',member='PropertyChanged'", &err);
if (dbus_error_is_set(&err)) { if (dbus_error_is_set(&err)) {
pa_log_error("Unable to subscribe to org.bluez.AudioSink signals: %s: %s", err.name, err.message); pa_log_error("Unable to subscribe to org.bluez.AudioSink signals: %s: %s", err.name, err.message);
goto fail; goto fail;