device-manager: Rather than flagging the device as available, just include the sink/source index with PA_INVALID_INDEX meaning unavailable

This commit is contained in:
Colin Guthrie 2009-10-10 14:19:39 +01:00
parent 8ec304d2d1
commit 0ff2a6b434
3 changed files with 6 additions and 9 deletions

View file

@ -1033,13 +1033,13 @@ static int extension_cb(pa_native_protocol *p, pa_module *m, pa_native_connectio
if ((e = read_entry(u, name))) { if ((e = read_entry(u, name))) {
uint32_t idx; uint32_t idx;
char *devname; char *devname;
pa_bool_t available = FALSE; uint32_t index = PA_INVALID_INDEX;
if ((devname = get_name(name, "sink:"))) { if ((devname = get_name(name, "sink:"))) {
pa_sink* s; pa_sink* s;
PA_IDXSET_FOREACH(s, u->core->sinks, idx) { PA_IDXSET_FOREACH(s, u->core->sinks, idx) {
if (strcmp(s->name, devname) == 0) { if (strcmp(s->name, devname) == 0) {
available = TRUE; index = s->index;
break; break;
} }
} }
@ -1048,7 +1048,7 @@ static int extension_cb(pa_native_protocol *p, pa_module *m, pa_native_connectio
pa_source* s; pa_source* s;
PA_IDXSET_FOREACH(s, u->core->sources, idx) { PA_IDXSET_FOREACH(s, u->core->sources, idx) {
if (strcmp(s->name, devname) == 0) { if (strcmp(s->name, devname) == 0) {
available = TRUE; index = s->index;
break; break;
} }
} }
@ -1058,7 +1058,7 @@ static int extension_cb(pa_native_protocol *p, pa_module *m, pa_native_connectio
pa_tagstruct_puts(reply, name); pa_tagstruct_puts(reply, name);
pa_tagstruct_puts(reply, e->description); pa_tagstruct_puts(reply, e->description);
pa_tagstruct_puts(reply, e->icon); pa_tagstruct_puts(reply, e->icon);
pa_tagstruct_put_boolean(reply, available); pa_tagstruct_putu32(reply, index);
pa_tagstruct_putu32(reply, NUM_ROLES); pa_tagstruct_putu32(reply, NUM_ROLES);
for (uint32_t i = ROLE_NONE; i < NUM_ROLES; ++i) { for (uint32_t i = ROLE_NONE; i < NUM_ROLES; ++i) {

View file

@ -128,21 +128,18 @@ static void ext_device_manager_read_cb(pa_pdispatch *pd, uint32_t command, uint3
while (!pa_tagstruct_eof(t)) { while (!pa_tagstruct_eof(t)) {
pa_ext_device_manager_info i; pa_ext_device_manager_info i;
pa_bool_t available;
memset(&i, 0, sizeof(i)); memset(&i, 0, sizeof(i));
available = FALSE;
if (pa_tagstruct_gets(t, &i.name) < 0 || if (pa_tagstruct_gets(t, &i.name) < 0 ||
pa_tagstruct_gets(t, &i.description) < 0 || pa_tagstruct_gets(t, &i.description) < 0 ||
pa_tagstruct_gets(t, &i.icon) < 0 || pa_tagstruct_gets(t, &i.icon) < 0 ||
pa_tagstruct_get_boolean(t, &available) < 0 || pa_tagstruct_getu32(t, &i.index) < 0 ||
pa_tagstruct_getu32(t, &i.n_role_priorities) < 0) { pa_tagstruct_getu32(t, &i.n_role_priorities) < 0) {
pa_context_fail(o->context, PA_ERR_PROTOCOL); pa_context_fail(o->context, PA_ERR_PROTOCOL);
goto finish; goto finish;
} }
i.available = (uint8_t)available;
if (i.n_role_priorities > 0) { if (i.n_role_priorities > 0) {
uint32_t j; uint32_t j;

View file

@ -44,7 +44,7 @@ typedef struct pa_ext_device_manager_info {
const char *name; /**< Identifier string of the device. A string like "sink:" or similar followed by the name of the device. */ const char *name; /**< Identifier string of the device. A string like "sink:" or similar followed by the name of the device. */
const char *description; /**< The description of the device when it was last seen, if applicable and saved */ const char *description; /**< The description of the device when it was last seen, if applicable and saved */
const char *icon; /**< The icon given to the device */ const char *icon; /**< The icon given to the device */
uint8_t available; /**< Is the device currently available? */ uint32_t index; /**< The device index if it is currently available or PA_INVALID_INDEX */
uint32_t n_role_priorities; /**< How many role priorities do we have? */ uint32_t n_role_priorities; /**< How many role priorities do we have? */
pa_ext_device_manager_role_priority_info *role_priorities; /**< An array of role priority structures or NULL */ pa_ext_device_manager_role_priority_info *role_priorities; /**< An array of role priority structures or NULL */
} pa_ext_device_manager_info; } pa_ext_device_manager_info;