diff --git a/inc/lektor/commands.h b/inc/lektor/commands.h index 424e6524eaeba06889160cb8ed3f0c221f963b0c..a884de214c7e5340bdfff055bdd83afae98ca8dd 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 23792ffc375facddf208015c3552e3c8222d71f0..3518613e4d8b10017eb59ebad1fc43a7a62deaf0 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 0100955c498f1f495d6be2b6db23b5354bb2ece0..1c0a4ab73247b4f9ef95fc3d627c8c08a0f1e020 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: