raop: Allow for nice sink descriptions to be set (interpolated from avahi)

This commit is contained in:
Colin Guthrie 2009-03-01 18:10:35 +00:00
parent 8fc9b19cb3
commit d293f08442
2 changed files with 29 additions and 7 deletions

View file

@ -152,11 +152,18 @@ static void resolver_cb(
if (event != AVAHI_RESOLVER_FOUND) if (event != AVAHI_RESOLVER_FOUND)
pa_log("Resolving of '%s' failed: %s", name, avahi_strerror(avahi_client_errno(u->client))); pa_log("Resolving of '%s' failed: %s", name, avahi_strerror(avahi_client_errno(u->client)));
else { else {
char *device = NULL, *dname, *vname, *args; char *device = NULL, *nicename, *dname, *vname, *args;
char at[AVAHI_ADDRESS_STR_MAX]; char at[AVAHI_ADDRESS_STR_MAX];
AvahiStringList *l; AvahiStringList *l;
pa_module *m; pa_module *m;
if ((nicename = strstr(name, "@"))) {
++nicename;
if (strlen(nicename) > 0) {
pa_log_debug("Found RAOP: %s", nicename);
}
}
for (l = txt; l; l = l->next) { for (l = txt; l; l = l->next) {
char *key, *value; char *key, *value;
pa_assert_se(avahi_string_list_get_pair(l, &key, &value, NULL) == 0); pa_assert_se(avahi_string_list_get_pair(l, &key, &value, NULL) == 0);
@ -190,10 +197,20 @@ static void resolver_cb(
"sink_name=%s", "sink_name=%s",
avahi_address_snprint(at, sizeof(at), a), port, avahi_address_snprint(at, sizeof(at), a), port,
vname);*/ vname);*/
args = pa_sprintf_malloc("server=%s " if (nicename) {
"sink_name=%s", args = pa_sprintf_malloc("server=%s "
avahi_address_snprint(at, sizeof(at), a), "sink_name=%s "
vname); "description=\"%s\"",
avahi_address_snprint(at, sizeof(at), a),
vname,
nicename);
} else {
args = pa_sprintf_malloc("server=%s "
"sink_name=%s",
avahi_address_snprint(at, sizeof(at), a),
vname);
}
pa_log_debug("Loading module-raop-sink with arguments '%s'", args); pa_log_debug("Loading module-raop-sink with arguments '%s'", args);

View file

@ -72,6 +72,7 @@ PA_MODULE_VERSION(PACKAGE_VERSION);
PA_MODULE_LOAD_ONCE(FALSE); PA_MODULE_LOAD_ONCE(FALSE);
PA_MODULE_USAGE( PA_MODULE_USAGE(
"sink_name=<name for the sink> " "sink_name=<name for the sink> "
"description=<description for the sink> "
"server=<address> " "server=<address> "
"format=<sample format> " "format=<sample format> "
"channels=<number of channels> " "channels=<number of channels> "
@ -122,6 +123,7 @@ static const char* const valid_modargs[] = {
"format", "format",
"channels", "channels",
"sink_name", "sink_name",
"description",
NULL NULL
}; };
@ -502,7 +504,7 @@ int pa__init(pa_module*m) {
struct userdata *u = NULL; struct userdata *u = NULL;
pa_sample_spec ss; pa_sample_spec ss;
pa_modargs *ma = NULL; pa_modargs *ma = NULL;
const char *server; const char *server, *desc;
pa_sink_new_data data; pa_sink_new_data data;
pa_assert(m); pa_assert(m);
@ -564,7 +566,10 @@ int pa__init(pa_module*m) {
pa_sink_new_data_set_name(&data, pa_modargs_get_value(ma, "sink_name", DEFAULT_SINK_NAME)); pa_sink_new_data_set_name(&data, pa_modargs_get_value(ma, "sink_name", DEFAULT_SINK_NAME));
pa_sink_new_data_set_sample_spec(&data, &ss); pa_sink_new_data_set_sample_spec(&data, &ss);
pa_proplist_sets(data.proplist, PA_PROP_DEVICE_STRING, server); pa_proplist_sets(data.proplist, PA_PROP_DEVICE_STRING, server);
pa_proplist_setf(data.proplist, PA_PROP_DEVICE_DESCRIPTION, "RAOP sink '%s'", server); if ((desc = pa_modargs_get_value(ma, "description", NULL)))
pa_proplist_sets(data.proplist, PA_PROP_DEVICE_DESCRIPTION, desc);
else
pa_proplist_setf(data.proplist, PA_PROP_DEVICE_DESCRIPTION, "RAOP sink '%s'", server);
u->sink = pa_sink_new(m->core, &data, PA_SINK_LATENCY|PA_SINK_NETWORK); u->sink = pa_sink_new(m->core, &data, PA_SINK_LATENCY|PA_SINK_NETWORK);
pa_sink_new_data_done(&data); pa_sink_new_data_done(&data);