[pulseaudio-discuss] [PATCH 3/6] pacmd: Add optional argument for quiet mode
Peter Meerwald
pmeerw at pmeerw.net
Fri Jul 19 12:32:12 PDT 2013
quiet mode allows to turn off PA's welcome message and the >>> prompt
pacmd waits 100 ms; if nothing is coming from the PA daemon, it is a new
version and we actively ask for the welcome message (non-quiet mode) by sending
"hello"; in quiet mode, we send "hello quiet" to tell the daemon we are not
interested in polite messaging and prompts
if something is received from the PA daemon within 100 ms, it must be an old
version and we just continue as before; quiet is silently ignored for older
PA daemons (nothing we can do, except filter the data coming from the
server -- no)
Signed-off-by: Peter Meerwald <pmeerw at pmeerw.net>
---
src/utils/pacmd.c | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++-----
1 file changed, 56 insertions(+), 5 deletions(-)
diff --git a/src/utils/pacmd.c b/src/utils/pacmd.c
index cf0eb44..7dd3c9b 100644
--- a/src/utils/pacmd.c
+++ b/src/utils/pacmd.c
@@ -46,6 +46,7 @@
static void help(const char *argv0) {
printf("%s %s\n", argv0, "exit");
printf("%s %s\n", argv0, "help");
+ printf("%s %s\n", argv0, "hello");
printf("%s %s\n", argv0, "list-(modules|sinks|sources|clients|cards|samples)");
printf("%s %s\n", argv0, "list-(sink-inputs|source-outputs)");
printf("%s %s\n", argv0, "stat");
@@ -83,11 +84,13 @@ static void help(const char *argv0) {
printf(_("\n"
" -h, --help Show this help\n"
" --version Show version\n"
+ " --quiet Don't show welcome message\n"
"When no command is given pacmd starts in the interactive mode\n" ));
}
enum {
- ARG_VERSION = 256
+ ARG_VERSION = 256,
+ ARG_QUIET
};
int main(int argc, char*argv[]) {
@@ -102,7 +105,7 @@ int main(int argc, char*argv[]) {
bool ibuf_eof, obuf_eof, ibuf_closed, obuf_closed;
struct pollfd pollfd[3];
struct pollfd *watch_socket, *watch_stdin, *watch_stdout;
-
+ bool quiet = false;
int stdin_type = 0, stdout_type = 0, fd_type = 0;
char *bn = NULL;
@@ -110,6 +113,7 @@ int main(int argc, char*argv[]) {
static const struct option long_options[] = {
{"version", 0, NULL, ARG_VERSION},
+ {"quiet", 0, NULL, ARG_QUIET},
{"help", 0, NULL, 'h'},
{NULL, 0, NULL, 0}
};
@@ -121,7 +125,7 @@ int main(int argc, char*argv[]) {
bn = pa_path_get_filename(argv[0]);
- while ((c = getopt_long(argc, argv, "h", long_options, NULL)) != -1) {
+ while ((c = getopt_long(argc, argv, "hq", long_options, NULL)) != -1) {
switch (c) {
case 'h' :
help(bn);
@@ -136,11 +140,18 @@ int main(int argc, char*argv[]) {
pa_get_library_version());
ret = 0;
goto quit;
+ case 'q':
+ case ARG_QUIET:
+ quiet = true;
+ break;
default:
goto quit;
}
}
+ argv += optind;
+ argc -= optind;
+
if (pa_pid_file_check_running(&pid, "pulseaudio") < 0) {
pa_log(_("No PulseAudio daemon running, or not running as session daemon."));
goto quit;
@@ -192,8 +203,8 @@ int main(int argc, char*argv[]) {
ibuf_index = ibuf_length = obuf_index = obuf_length = 0;
ibuf_eof = obuf_eof = ibuf_closed = obuf_closed = false;
- if (argc > 1) {
- for (i = 1; i < argc; i++) {
+ if (argc > 0) {
+ for (i = 0; i < argc; i++) {
size_t k;
k = PA_MIN(ibuf_size - ibuf_length, strlen(argv[i]));
@@ -209,6 +220,46 @@ int main(int argc, char*argv[]) {
ibuf_eof = true;
}
+ /* wait for initial welcome */
+ for (;;) {
+ struct pollfd *p;
+ int res;
+
+ pa_zero(pollfd);
+ p = pollfd;
+
+ watch_socket = p++;
+ watch_socket->fd = fd;
+ watch_socket->events = POLLIN;
+
+ if ((res = pa_poll(pollfd, p-pollfd, 100)) < 0) {
+ if (errno == EINTR)
+ continue;
+
+ pa_log(_("poll(): %s"), strerror(errno));
+ goto quit;
+ }
+
+ /* if nothing coming from daemon quickly, it supports explicit hello */
+ if (res == 0) {
+ char buf[32];
+ ssize_t r;
+
+ /* send explicit hello */
+ sprintf(buf, "hello %s\n", quiet ? "quiet" : "");
+ if ((r = pa_write(fd, buf, strlen(buf), &fd_type)) < 0) {
+ pa_log(_("write(): %s"), strerror(errno));
+ goto quit;
+ }
+
+ break;
+ }
+
+ /* got data from the daemon, just continue */
+ if (watch_socket->revents & POLLIN)
+ break;
+ }
+
for (;;) {
struct pollfd *p;
--
1.8.3.2
More information about the pulseaudio-discuss
mailing list