From bafabbade2d032063eb2c32e927948b019e45cea Mon Sep 17 00:00:00 2001 From: Kubat <mael.martin31@gmail.com> Date: Fri, 8 May 2020 18:58:48 +0200 Subject: [PATCH] lkt update --- src/commands.c | 28 ++++++++++++++-------- src/main/lkt.c | 65 ++++++++++++++++++++++---------------------------- 2 files changed, 47 insertions(+), 46 deletions(-) diff --git a/src/commands.c b/src/commands.c index 495e0c19..f248ff3c 100644 --- a/src/commands.c +++ b/src/commands.c @@ -777,8 +777,8 @@ command_sticker_get(struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARGS /* Simple list {type} {uri} command */ if (argv[0] != NULL && argv[1] != NULL && argv[2] == NULL) { callback.st_uri = atoi(argv[1]); - if (database_search_sticker_init(srv->db, &callback)) - goto iter; + if (!database_search_sticker_init(srv->db, &callback)) + return false; } /* list {type} {uri} {name} command */ @@ -786,8 +786,8 @@ command_sticker_get(struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARGS argv[2] != NULL && argv[3] == NULL) { callback.name = argv[2]; callback.st_uri = atoi(argv[1]); - if (database_search_sticker_init(srv->db, &callback)) - goto iter; + if (!database_search_sticker_init(srv->db, &callback)) + return false; } /* list {type} {uri} {name} `op` {value} command */ @@ -798,20 +798,20 @@ command_sticker_get(struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARGS callback.st_uri = atoi(argv[1]); callback.st_op = argv[3][0]; callback.st_value = atoi(argv[4]); - if (database_search_sticker_init(srv->db, &callback)) - goto iter; + if (!database_search_sticker_init(srv->db, &callback)) + return false; } /* Just list all stickers */ else if ( (argv[0] != NULL && argv[1] == NULL) || argv[0] == NULL ) { - if (database_search_sticker_init(srv->db, &callback)) - goto iter; + if (!database_search_sticker_init(srv->db, &callback)) + return false; } else goto unknown; -iter: + /* Send results */ while (database_search_iter(&callback)) continue; return true; @@ -825,8 +825,16 @@ bool command_sticker_delete(struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARGS_MAX]) { UNUSED(c); - RETURN_UNLESS(argv[0] && argv[1], "Invalid argument", false); + RETURN_UNLESS(argv[0] && argv[1] && argv[2], "Invalid argument", false); int uri = atoi(argv[1]); srv->mpd_idle_events |= MPD_IDLE_STICKER; return database_sticker_delete_specify(srv->db, argv[0], uri, argv[2]); } + +bool +command_sticker_destroy(struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARGS_MAX]) +{ + UNUSED(c); + RETURN_UNLESS(argv[0], "Invalid argument", false); + return database_sticker_delete(srv->db, argv[0]); +} diff --git a/src/main/lkt.c b/src/main/lkt.c index 79c89590..2618b4e0 100644 --- a/src/main/lkt.c +++ b/src/main/lkt.c @@ -170,6 +170,20 @@ send_cmd_with_uri(FILE *sock, char *cmd, int argc, const char **argv) /* Functions implementing options. */ +#define just_send_one_arg(func, cmd) \ +noreturn void func (struct lkt_cmd_args *args) { \ + fail_if(args->argc != 1, "Invalid argument"); \ + FILE *sock = lkt_connect(); \ + char buff[2]; \ + write_socket(sock, cmd " %s\n", args->argv[0]); \ + exit_with_status(sock, buff); \ +} +just_send_one_arg(stickers_create__, "sticker __create") +just_send_one_arg(stickers_destroy__, "sticker __destroy") +just_send_one_arg(plt_destroy__, "rm") +just_send_one_arg(plt_create__, "playlistadd") +#undef just_send_one_arg + #define just_send(func, msg) /* Just send a simple string functions */ \ noreturn void func (struct lkt_cmd_args *args) { \ fail_if(args->argc, "This command takes no arguments"); \ @@ -188,9 +202,11 @@ simple_send_with_password__(const char *cmd) { if (!password) fail("Password not provided"); - static const char cmd__[] = "password %s\n%s\n"; FILE *sock = lkt_connect(); - write_socket(sock, cmd__, password, cmd); + write_socket(sock, "command_list_begin\n"); + write_socket(sock, "password %s\n", password); + write_socket(sock, "%s\n", cmd); + write_socket(sock, "command_list_end\n"); exit(EXIT_SUCCESS); } @@ -220,15 +236,22 @@ rescan_or_update__(struct lkt_cmd_args *args, const char *cmd) int i; /* All the db */ - if (args->argc == 0) - write_socket(sock, "password %s\n%s\n", password, cmd); + if (args->argc == 0) { + write_socket(sock, "command_list_begin\n"); + write_socket(sock, "password %s\n", password); + write_socket(sock, "%s\n", cmd); + write_socket(sock, "command_list_end\n"); + } /* With a query */ else { memset(buff, 0, LKT_MESSAGE_MAX * sizeof(char)); for (i = 0; i < args->argc; ++i) strncat(buff, args->argv[i], LKT_MESSAGE_MAX - 1); - write_socket(sock, "password %s\n%s %s\n", password, cmd, buff); + write_socket(sock, "command_list_begin\n"); + write_socket(sock, "password %s\n", password); + write_socket(sock, "%s %s\n", cmd, buff); + write_socket(sock, "command_list_end\n"); } exit(EXIT_SUCCESS); @@ -670,27 +693,6 @@ plt_delete__(struct lkt_cmd_args *args) exit_with_status(sock, buff); } -noreturn void -plt_destroy__(struct lkt_cmd_args *args) -{ - fail_if(args->argc != 1, "Invalid argument"); - FILE *sock = lkt_connect(); - char buff[2]; - write_socket(sock, "rm %s\n", args->argv[0]); - exit_with_status(sock, buff); -} - -noreturn void -plt_create__(struct lkt_cmd_args *args) -{ - fail_if(args->argc != 1, "Invalid argument"); - - FILE *sock = lkt_connect(); - char buff[2]; - write_socket(sock, "playlistadd %s\n", args->argv[0]); - exit_with_status(sock, buff); -} - noreturn void stickers_get__(struct lkt_cmd_args *args) { @@ -729,16 +731,6 @@ stickers_set__(struct lkt_cmd_args *args) exit_with_status(sock, buff); } -noreturn void -stickers_create__(struct lkt_cmd_args *args) -{ - fail_if(args->argc != 1, "Invalid argument"); - FILE *sock = lkt_connect(); - char buff[2]; - write_socket(sock, "sticker __create %s\n", args->argv[0]); - exit_with_status(sock, buff); -} - noreturn void stickers_delete__(struct lkt_cmd_args *args) { @@ -845,6 +837,7 @@ static struct lkt_cmd_opt options_stickers[] = { { .name = "set", .call = stickers_set__ }, { .name = "delete", .call = stickers_delete__ }, { .name = "create", .call = stickers_create__ }, + { .name = "destroy", .call = stickers_destroy__ }, LKT_OPT_NULL, }; -- GitLab