[pulseaudio-discuss] [PATCH 2/2] pactl: Add subcommands to the list command
Maarten Bosmans
mkbosmans at gmail.com
Thu Mar 24 05:40:54 PDT 2011
---
src/utils/pactl.c | 62 +++++++++++++++++++++++++++++++++++++++++++---------
1 files changed, 51 insertions(+), 11 deletions(-)
diff --git a/src/utils/pactl.c b/src/utils/pactl.c
index 672bfbb..11ddcb3 100644
--- a/src/utils/pactl.c
+++ b/src/utils/pactl.c
@@ -48,6 +48,7 @@ static pa_context *context = NULL;
static pa_mainloop_api *mainloop_api = NULL;
static char
+ *list_type = NULL,
*sample_name = NULL,
*sink_name = NULL,
*source_name = NULL,
@@ -834,15 +835,37 @@ static void context_state_callback(pa_context *c, void *userdata) {
break;
case LIST:
- actions = 8;
- pa_operation_unref(pa_context_get_module_info_list(c, get_module_info_callback, NULL));
- pa_operation_unref(pa_context_get_sink_info_list(c, get_sink_info_callback, NULL));
- pa_operation_unref(pa_context_get_source_info_list(c, get_source_info_callback, NULL));
- pa_operation_unref(pa_context_get_sink_input_info_list(c, get_sink_input_info_callback, NULL));
- pa_operation_unref(pa_context_get_source_output_info_list(c, get_source_output_info_callback, NULL));
- pa_operation_unref(pa_context_get_client_info_list(c, get_client_info_callback, NULL));
- pa_operation_unref(pa_context_get_sample_info_list(c, get_sample_info_callback, NULL));
- pa_operation_unref(pa_context_get_card_info_list(c, get_card_info_callback, NULL));
+ if (list_type) {
+ actions = 1;
+ if (pa_streq(list_type, "modules"))
+ pa_operation_unref(pa_context_get_module_info_list(c, get_module_info_callback, NULL));
+ else if (pa_streq(list_type, "sinks"))
+ pa_operation_unref(pa_context_get_sink_info_list(c, get_sink_info_callback, NULL));
+ else if (pa_streq(list_type, "sources"))
+ pa_operation_unref(pa_context_get_source_info_list(c, get_source_info_callback, NULL));
+ else if (pa_streq(list_type, "sink-inputs"))
+ pa_operation_unref(pa_context_get_sink_input_info_list(c, get_sink_input_info_callback, NULL));
+ else if (pa_streq(list_type, "source-outputs"))
+ pa_operation_unref(pa_context_get_source_output_info_list(c, get_source_output_info_callback, NULL));
+ else if (pa_streq(list_type, "clients"))
+ pa_operation_unref(pa_context_get_client_info_list(c, get_client_info_callback, NULL));
+ else if (pa_streq(list_type, "samples"))
+ pa_operation_unref(pa_context_get_sample_info_list(c, get_sample_info_callback, NULL));
+ else if (pa_streq(list_type, "cards"))
+ pa_operation_unref(pa_context_get_card_info_list(c, get_card_info_callback, NULL));
+ else
+ pa_assert_not_reached();
+ } else {
+ actions = 8;
+ pa_operation_unref(pa_context_get_module_info_list(c, get_module_info_callback, NULL));
+ pa_operation_unref(pa_context_get_sink_info_list(c, get_sink_info_callback, NULL));
+ pa_operation_unref(pa_context_get_source_info_list(c, get_source_info_callback, NULL));
+ pa_operation_unref(pa_context_get_sink_input_info_list(c, get_sink_input_info_callback, NULL));
+ pa_operation_unref(pa_context_get_source_output_info_list(c, get_source_output_info_callback, NULL));
+ pa_operation_unref(pa_context_get_client_info_list(c, get_client_info_callback, NULL));
+ pa_operation_unref(pa_context_get_sample_info_list(c, get_sample_info_callback, NULL));
+ pa_operation_unref(pa_context_get_card_info_list(c, get_card_info_callback, NULL));
+ }
break;
case MOVE_SINK_INPUT:
@@ -1013,7 +1036,7 @@ static int parse_volume(const char *vol_spec, pa_volume_t *vol) {
static void help(const char *argv0) {
printf(_("%s [options] stat\n"
- "%s [options] list\n"
+ "%s [options] list [TYPE]\n"
"%s [options] exit\n"
"%s [options] upload-sample FILENAME [NAME]\n"
"%s [options] play-sample NAME [SINK]\n"
@@ -1050,7 +1073,7 @@ enum {
};
int main(int argc, char *argv[]) {
- pa_mainloop* m = NULL;
+ pa_mainloop *m = NULL;
int ret = 1, c;
char *server = NULL, *bn;
@@ -1114,10 +1137,25 @@ int main(int argc, char *argv[]) {
if (optind < argc) {
if (pa_streq(argv[optind], "stat"))
action = STAT;
+
else if (pa_streq(argv[optind], "exit"))
action = EXIT;
+
else if (pa_streq(argv[optind], "list"))
action = LIST;
+
+ if (optind+1 < argc) {
+ if (!pa_streq(argv[optind+1], "modules") && !pa_streq(argv[optind+1], "clients") &&
+ !pa_streq(argv[optind+1], "sinks") && !pa_streq(argv[optind+1], "sink-inputs") &&
+ !pa_streq(argv[optind+1], "sources") && !pa_streq(argv[optind+1], "source-outputs") &&
+ !pa_streq(argv[optind+1], "samples") && !pa_streq(argv[optind+1], "cards")) {
+ pa_log(_("Specify nothing, or one of: %s"), "modules, sinks, sources, sink-inputs, source-outputs, clients, samples, cards");
+ goto quit;
+ }
+
+ list_type = pa_xstrdup(argv[optind+1]);
+ }
+
else if (pa_streq(argv[optind], "upload-sample")) {
struct SF_INFO sfi;
action = UPLOAD_SAMPLE;
@@ -1442,12 +1480,14 @@ quit:
}
pa_xfree(server);
+ pa_xfree(list_type);
pa_xfree(sample_name);
pa_xfree(sink_name);
pa_xfree(source_name);
pa_xfree(module_args);
pa_xfree(card_name);
pa_xfree(profile_name);
+ pa_xfree(port_name);
if (sndfile)
sf_close(sndfile);
--
1.7.1
More information about the pulseaudio-discuss
mailing list