commit 8ff9231f014b105cce3b220d9afede547f153d6e from: Omar Polo date: Wed Feb 16 20:07:28 2022 UTC print status for `add' command commit - 7ad394ad295618bff7dfcaaddf419e2ec6b58920 commit + 8ff9231f014b105cce3b220d9afede547f153d6e blob - 786a76debc3c4310400ca69fa83a257edc3ddddf blob + 72a0a507cfe62b913fe1369d572579e508a8ee37 --- ctl.c +++ ctl.c @@ -130,12 +130,55 @@ enqueue_tracks(char **files) return enq == 0; } +static void +print_error_message(const char *prfx, struct imsg *imsg) +{ + size_t datalen; + char *msg; + + datalen = IMSG_DATA_SIZE(*imsg); + if ((msg = calloc(1, datalen)) == NULL) + fatal("calloc %zu", datalen); + memcpy(msg, imsg->data, datalen); + if (datalen == 0 || msg[datalen-1] != '\0') + fatalx("malformed error message"); + + log_warnx("%s: %s", prfx, msg); + free(msg); +} + static int +show_add(struct imsg *imsg, int *ret, char ***files) +{ + if (**files == NULL) { + log_warnx("received more replies than file sent"); + *ret = 1; + return 1; + } + + if (imsg->hdr.type == IMSG_CTL_ERR) + print_error_message(**files, imsg); + else if (imsg->hdr.type == IMSG_CTL_ADD) + log_debug("enqueued %s", **files); + else + fatalx("got invalid message %d", imsg->hdr.type); + + (*files)++; + return (**files) == NULL; +} + +static int show_complete(struct imsg *imsg, int *ret) { size_t datalen; char path[PATH_MAX]; + if (imsg->hdr.type == IMSG_CTL_ERR) { + print_error_message("show failed", imsg); + *ret = 1; + return 1; + } + datalen = IMSG_DATA_SIZE(*imsg); if (datalen == 0) return 1; @@ -156,6 +199,7 @@ ctlaction(struct parse_result *res) struct imsg imsg; ssize_t n; int ret = 0, done = 1; + char **files; switch (res->action) { case PLAY: @@ -174,6 +218,8 @@ ctlaction(struct parse_result *res) imsg_compose(ibuf, IMSG_CTL_RESTART, 0, 0, -1, NULL, 0); break; case ADD: + done = 0; + files = res->files; ret = enqueue_tracks(res->files); break; case FLUSH: @@ -207,6 +253,9 @@ ctlaction(struct parse_result *res) break; switch (res->action) { + case ADD: + done = show_add(&imsg, &ret, &files); + break; case SHOW: done = show_complete(&imsg, &ret); break;