From d25ca041474732f9e4e030a1795e9686783b7ecd Mon Sep 17 00:00:00 2001 From: Kubat <mael.martin31@gmail.com> Date: Tue, 16 Jun 2020 17:41:07 +0200 Subject: [PATCH] Implement client side listplaylist and listplaylists --- src/commands.c | 3 ++- src/main/lkt.c | 46 +++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 47 insertions(+), 2 deletions(-) diff --git a/src/commands.c b/src/commands.c index 383e0a98..41338656 100644 --- a/src/commands.c +++ b/src/commands.c @@ -437,7 +437,8 @@ bool lkt_callback_send_list_plts(struct lkt_state *srv, size_t c, const char *plt_name) { struct lkt_message *out = lkt_message_new(); - out->data_len = safe_snprintf(out->data, LKT_MESSAGE_MAX, "%s\n", plt_name); + /* If the playlist is named OK or ACK... */ + out->data_len = safe_snprintf(out->data, LKT_MESSAGE_MAX, "name: %s\n", plt_name); lkt_state_send(srv, c, out); return true; } diff --git a/src/main/lkt.c b/src/main/lkt.c index 8a1f5c37..d82a024b 100644 --- a/src/main/lkt.c +++ b/src/main/lkt.c @@ -819,6 +819,50 @@ stickers_delete__(struct lkt_cmd_args *args) /* Search functions. */ +noreturn void +__continuation_calls(const char *cmd) +{ + char buff[LKT_MESSAGE_MAX]; + int continuation = 0; + FILE *sock = NULL; +redo: + sock = lkt_connect(); + + write_socket(sock, "%d %s\n", continuation, cmd); + for (;;) { + memset(buff, 0, LKT_MESSAGE_MAX * sizeof(char)); + read_socket(sock, buff, LKT_MESSAGE_MAX - 1); + + if (STR_NMATCH(buff, "continue:", strlen("continue:"))) { + continuation = atoi(lkt_skip_key(buff)); + fclose(sock); + goto redo; + } + + if (STR_NMATCH(buff, "OK", 2)) + exit(EXIT_SUCCESS); + else if (STR_NMATCH(buff, "ACK", 3)) + exit(EXIT_FAILURE); + + fprintf(stdout, "%s", buff); + } +} + +noreturn void +list_plt__(struct lkt_cmd_args *args) +{ + fail_if(args->argc != 1, "Invalid argument number"); + __continuation_calls("listplaylist"); +} + +noreturn void +list_plt_content__(struct lkt_cmd_args *args) +{ + fail_if(args->argc != 0, "Invalid argument number"); + __continuation_calls("listplaylists"); + exit(EXIT_FAILURE); +} + noreturn void search_with_cmd__(struct lkt_cmd_args *args, const char *cmd) { @@ -886,7 +930,7 @@ search_plt__(struct lkt_cmd_args *args) redo: sock = lkt_connect(); - write_socket(sock, "%d listplaylist %s %s://", continuation, + write_socket(sock, "%d listplaylistinfo %s %s://", continuation, args->argv[0], args->argv[1]); for (i = 2; i < args->argc - 1; ++i) write_socket(sock, "%s ", args->argv[i]); -- GitLab