From f49a3160b908a36a16dfcb654f5d60473e942a07 Mon Sep 17 00:00:00 2001 From: Kubat <mael.martin31@gmail.com> Date: Fri, 10 Apr 2020 16:32:11 +0200 Subject: [PATCH] sticker get command --- inc/lektor/commands.h | 5 ++++ src/commands.c | 62 +++++++++++++++++++++++++++++++++++++++++ src/database/stickers.c | 4 +-- 3 files changed, 69 insertions(+), 2 deletions(-) diff --git a/inc/lektor/commands.h b/inc/lektor/commands.h index 424e6524..a884de21 100644 --- a/inc/lektor/commands.h +++ b/inc/lektor/commands.h @@ -98,3 +98,8 @@ bool command_user_add(sqlite3 *db, char *argv[LKT_MESSAGE_ARGS_MAX]); bool command_restart(struct lkt_state *srv, size_t c); bool command_kill(struct lkt_state *srv, size_t c); bool command_rescan(struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARGS_MAX]); + +/* Sticker management */ +bool command_sticker_get(struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARGS_MAX]); +bool command_sticker_set(struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARGS_MAX]); +bool command_sticker_delete(struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARGS_MAX]); diff --git a/src/commands.c b/src/commands.c index 23792ffc..3518613e 100644 --- a/src/commands.c +++ b/src/commands.c @@ -1074,3 +1074,65 @@ command_user_add(sqlite3 *db, char *argv[LKT_MESSAGE_ARGS_MAX]) return false; fprintf(stderr, " . command_user_add: Failed to add user %s\n", argv[0]); } + +static bool +sticker_send_one_value(void *_args, const char *sticker, const char *type, int uri, int value) +{ + struct _client_trace_t *args = (struct _client_trace_t *) _args; + struct lkt_message *out; + (void) sticker; + (void) type; + (void) uri; + + out = lkt_message_new(); + out->data_len = snprintf(out->data, LKT_MESSAGE_MAX, "value: %d\n", value); + lkt_state_send(args->srv, args->c, out); + return false; +} + +static bool +sticker_send_all(void *_args, const char *sticker, const char *type, int uri, int value) +{ + struct _client_trace_t *args = (struct _client_trace_t *) _args; + struct lkt_message *out; + + out = lkt_message_new(); + out->data_len = snprintf(out->data, LKT_MESSAGE_MAX, "%s: %d\nsticker: %s\nvalue: %d\n", + type, uri, sticker, value); + lkt_state_send(args->srv, args->c, out); + return false; +} + +bool +command_sticker_get(struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARGS_MAX]) +{ + if (argv[0] == NULL || argv[1] == NULL || argv[2] == NULL || argv[3] != NULL) { + fprintf(stderr, " ! command_sticker_get: Invalid argument, need only 3 arguments\n"); + return false; + } + + int uri = atoi(argv[1]); /* FIXME: Use strtol. */ + struct _client_trace_t args = { + .srv = srv, + .c = c, + }; + + if (!database_sticker_get(srv->db, argv[0], argv[2], uri, &args, sticker_send_one_value)) { + fprintf(stderr, " . command_sticker_get: Failed to get sticker '%s' for object %s(%d)\n", + argv[2], argv[0], uri); + return false; + } + + return true; +} + +// bool +// command_sticker_set(struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARGS_MAX]) +// { +// } +// +// bool +// command_sticker_delete(struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARGS_MAX]) +// { +// } +// diff --git a/src/database/stickers.c b/src/database/stickers.c index 0100955c..1c0a4ab7 100644 --- a/src/database/stickers.c +++ b/src/database/stickers.c @@ -113,7 +113,7 @@ database_sticker_list(sqlite3 *db, const char *type, void *args, uri = sqlite3_column_int(stmt, 1); value = sqlite3_column_int(stmt, 2); if (!call(args, sticker, type, uri, value)) - goto error; + goto end_loop; continue; case SQLITE_DONE: @@ -213,7 +213,7 @@ database_sticker_get(sqlite3 *db, const char *type, const char *name, int uri, v case SQLITE_ROW: value = sqlite3_column_int(stmt, 1); if (!call(args, name, type, uri, value)) - goto error; + goto end_loop; continue; case SQLITE_DONE: -- GitLab