PA_MODULE_AUTHOR("Lennart Poettering");
PA_MODULE_DESCRIPTION("Bluetooth Proximity Volume Control");
PA_MODULE_VERSION(PACKAGE_VERSION);
-PA_MODULE_LOAD_ONCE(TRUE);
+PA_MODULE_LOAD_ONCE(true);
PA_MODULE_USAGE(
"sink=<sink name> "
"hci=<hci device> "
static const char* const valid_modargs[] = {
"sink",
- "rssi",
"hci",
NULL,
};
unsigned n_found;
unsigned n_unknown;
- pa_bool_t muted;
+ bool muted:1;
+ bool filter_added:1;
};
static void update_volume(struct userdata *u) {
if (u->muted && u->n_found > 0) {
pa_sink *s;
- u->muted = FALSE;
+ u->muted = false;
if (!(s = pa_namereg_get(u->module->core, u->sink_name, PA_NAMEREG_SINK))) {
pa_log_warn("Sink device '%s' not available for unmuting.", pa_strnull(u->sink_name));
}
pa_log_info("Found %u BT devices, unmuting.", u->n_found);
- pa_sink_set_mute(s, FALSE);
+ pa_sink_set_mute(s, false, false);
} else if (!u->muted && (u->n_found+u->n_unknown) <= 0) {
pa_sink *s;
- u->muted = TRUE;
+ u->muted = true;
if (!(s = pa_namereg_get(u->module->core, u->sink_name, PA_NAMEREG_SINK))) {
pa_log_warn("Sink device '%s' not available for muting.", pa_strnull(u->sink_name));
}
pa_log_info("No BT devices found, muting.");
- pa_sink_set_mute(s, TRUE);
+ pa_sink_set_mute(s, true, false);
} else
pa_log_info("%u devices now active, %u with unknown state.", u->n_found, u->n_unknown);
goto fail;
}
- if (strcmp(class, "phone")) {
+ if (!pa_streq(class, "phone")) {
pa_log_info("Found device '%s' of class '%s', ignoring.", a, class);
goto fail;
}
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
}
-static int add_matches(struct userdata *u, pa_bool_t add) {
+static int update_matches(struct userdata *u, bool add) {
char *filter1, *filter2;
DBusError e;
int r = -1;
goto finish;
}
} else
- dbus_bus_remove_match(pa_dbus_connection_get(u->dbus_connection), filter1, &e);
-
+ dbus_bus_remove_match(pa_dbus_connection_get(u->dbus_connection), filter1, NULL);
if (add) {
dbus_bus_add_match(pa_dbus_connection_get(u->dbus_connection), filter2, &e);
if (dbus_error_is_set(&e)) {
pa_log("dbus_bus_add_match(%s) failed: %s", filter2, e.message);
- dbus_bus_remove_match(pa_dbus_connection_get(u->dbus_connection), filter2, &e);
+ dbus_bus_remove_match(pa_dbus_connection_get(u->dbus_connection), filter1, NULL);
goto finish;
}
} else
- dbus_bus_remove_match(pa_dbus_connection_get(u->dbus_connection), filter2, &e);
+ dbus_bus_remove_match(pa_dbus_connection_get(u->dbus_connection), filter2, NULL);
- if (add)
+ if (add) {
pa_assert_se(dbus_connection_add_filter(pa_dbus_connection_get(u->dbus_connection), filter_func, u, NULL));
- else
+ u->filter_added = true;
+ } else if (u->filter_added)
dbus_connection_remove_filter(pa_dbus_connection_get(u->dbus_connection), filter_func, u);
r = 0;
u->sink_name = pa_xstrdup(pa_modargs_get_value(ma, "sink", NULL));
u->hci = pa_xstrdup(pa_modargs_get_value(ma, "hci", DEFAULT_HCI));
u->hci_path = pa_sprintf_malloc("/org/bluez/%s", u->hci);
- u->n_found = u->n_unknown = 0;
- u->muted = FALSE;
-
- u->bondings = pa_hashmap_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func);
+ u->bondings = pa_hashmap_new_full(pa_idxset_string_hash_func, pa_idxset_string_compare_func, NULL, (pa_free_cb_t) bonding_free);
if (!(u->dbus_connection = pa_dbus_bus_get(m->core, DBUS_BUS_SYSTEM, &e))) {
pa_log("Failed to get D-Bus connection: %s", e.message);
goto fail;
}
- if (add_matches(u, TRUE) < 0)
+ if (update_matches(u, true) < 0)
goto fail;
pa_assert_se(msg = dbus_message_new_method_call("org.bluez", u->hci_path, "org.bluez.Adapter", "ListBondings"));
if (!(u = m->userdata))
return;
- if (u->bondings) {
- struct bonding *b;
-
- while ((b = pa_hashmap_steal_first(u->bondings)))
- bonding_free(b);
-
- pa_hashmap_free(u->bondings, NULL, NULL);
- }
+ if (u->bondings)
+ pa_hashmap_free(u->bondings);
if (u->dbus_connection) {
- add_matches(u, FALSE);
+ update_matches(u, false);
pa_dbus_connection_unref(u->dbus_connection);
}