mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-10-29 05:40:23 -04:00
rygel: fix itemCount property for sources
Fixes http://pulseaudio.org/ticket/721
This commit is contained in:
parent
9f415841f5
commit
231417c867
1 changed files with 34 additions and 11 deletions
|
|
@ -464,8 +464,18 @@ static char **child_array(struct userdata *u, const char *path, unsigned *n) {
|
||||||
|
|
||||||
if (pa_streq(path, OBJECT_SINKS))
|
if (pa_streq(path, OBJECT_SINKS))
|
||||||
m = pa_idxset_size(u->core->sinks);
|
m = pa_idxset_size(u->core->sinks);
|
||||||
else
|
else {
|
||||||
|
unsigned k;
|
||||||
|
|
||||||
m = pa_idxset_size(u->core->sources);
|
m = pa_idxset_size(u->core->sources);
|
||||||
|
k = pa_idxset_size(u->core->sinks);
|
||||||
|
|
||||||
|
pa_assert(m >= k);
|
||||||
|
|
||||||
|
/* Subtract the monitor sources from the numbers of
|
||||||
|
* sources. There is one monitor source for each sink */
|
||||||
|
m -= k;
|
||||||
|
}
|
||||||
|
|
||||||
array = pa_xnew(char*, m);
|
array = pa_xnew(char*, m);
|
||||||
*n = 0;
|
*n = 0;
|
||||||
|
|
@ -473,14 +483,20 @@ static char **child_array(struct userdata *u, const char *path, unsigned *n) {
|
||||||
if (pa_streq(path, OBJECT_SINKS)) {
|
if (pa_streq(path, OBJECT_SINKS)) {
|
||||||
pa_sink *sink;
|
pa_sink *sink;
|
||||||
|
|
||||||
PA_IDXSET_FOREACH(sink, u->core->sinks, idx)
|
PA_IDXSET_FOREACH(sink, u->core->sinks, idx) {
|
||||||
|
pa_assert((*n) < m);
|
||||||
array[(*n)++] = pa_sprintf_malloc(OBJECT_SINKS "/%u", sink->index);
|
array[(*n)++] = pa_sprintf_malloc(OBJECT_SINKS "/%u", sink->index);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
pa_source *source;
|
pa_source *source;
|
||||||
|
|
||||||
PA_IDXSET_FOREACH(source, u->core->sources, idx)
|
PA_IDXSET_FOREACH(source, u->core->sources, idx) {
|
||||||
if (!source->monitor_of)
|
|
||||||
|
if (!source->monitor_of) {
|
||||||
|
pa_assert((*n) < m);
|
||||||
array[(*n)++] = pa_sprintf_malloc(OBJECT_SOURCES "/%u", source->index);
|
array[(*n)++] = pa_sprintf_malloc(OBJECT_SOURCES "/%u", source->index);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pa_assert((*n) <= m);
|
pa_assert((*n) <= m);
|
||||||
|
|
@ -529,16 +545,20 @@ static DBusHandlerResult sinks_and_sources_handler(DBusConnection *c, DBusMessag
|
||||||
free_child_array(array, n);
|
free_child_array(array, n);
|
||||||
|
|
||||||
} else if (message_is_property_get(m, "org.gnome.UPnP.MediaContainer1", "ItemCount")) {
|
} else if (message_is_property_get(m, "org.gnome.UPnP.MediaContainer1", "ItemCount")) {
|
||||||
|
unsigned n, k;
|
||||||
|
|
||||||
|
n = pa_idxset_size(u->core->sinks);
|
||||||
|
k = pa_idxset_size(u->core->sources);
|
||||||
|
pa_assert(k >= n);
|
||||||
|
|
||||||
pa_assert_se(r = dbus_message_new_method_return(m));
|
pa_assert_se(r = dbus_message_new_method_return(m));
|
||||||
append_variant_unsigned(r, NULL,
|
append_variant_unsigned(r, NULL,
|
||||||
pa_streq(path, OBJECT_SINKS) ?
|
pa_streq(path, OBJECT_SINKS) ? n : k - n);
|
||||||
pa_idxset_size(u->core->sinks) :
|
|
||||||
pa_idxset_size(u->core->sources));
|
|
||||||
|
|
||||||
} else if (message_is_property_get_all(m, "org.gnome.UPnP.MediaContainer1")) {
|
} else if (message_is_property_get_all(m, "org.gnome.UPnP.MediaContainer1")) {
|
||||||
DBusMessageIter iter, sub;
|
DBusMessageIter iter, sub;
|
||||||
char **array;
|
char **array;
|
||||||
unsigned n;
|
unsigned n, k;
|
||||||
|
|
||||||
pa_assert_se(r = dbus_message_new_method_return(m));
|
pa_assert_se(r = dbus_message_new_method_return(m));
|
||||||
dbus_message_iter_init_append(r, &iter);
|
dbus_message_iter_init_append(r, &iter);
|
||||||
|
|
@ -550,10 +570,13 @@ static DBusHandlerResult sinks_and_sources_handler(DBusConnection *c, DBusMessag
|
||||||
array = child_array(u, path, &n);
|
array = child_array(u, path, &n);
|
||||||
append_property_dict_entry_object_array(r, &sub, "Items", (const char**) array, n);
|
append_property_dict_entry_object_array(r, &sub, "Items", (const char**) array, n);
|
||||||
free_child_array(array, n);
|
free_child_array(array, n);
|
||||||
|
|
||||||
|
n = pa_idxset_size(u->core->sinks);
|
||||||
|
k = pa_idxset_size(u->core->sources);
|
||||||
|
pa_assert(k >= n);
|
||||||
|
|
||||||
append_property_dict_entry_unsigned(r, &sub, "ItemCount",
|
append_property_dict_entry_unsigned(r, &sub, "ItemCount",
|
||||||
pa_streq(path, OBJECT_SINKS) ?
|
pa_streq(path, OBJECT_SINKS) ? n : k - n);
|
||||||
pa_idxset_size(u->core->sinks) :
|
|
||||||
pa_idxset_size(u->core->sources));
|
|
||||||
|
|
||||||
pa_assert_se(dbus_message_iter_close_container(&iter, &sub));
|
pa_assert_se(dbus_message_iter_close_container(&iter, &sub));
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue