From 344a55f8f348caa8d991d76fbaa5325af9536de0 Mon Sep 17 00:00:00 2001 From: Kubat <mael.martin31@gmail.com> Date: Wed, 15 Apr 2020 09:58:59 +0200 Subject: [PATCH] Restore C files --- src/commands.c | 79 ++++++++++++++++++++++++++------------------ src/database/find.c | 62 ++++++++++++++-------------------- src/database/queue.c | 6 ++-- 3 files changed, 73 insertions(+), 74 deletions(-) diff --git a/src/commands.c b/src/commands.c index de185efe..1c525462 100644 --- a/src/commands.c +++ b/src/commands.c @@ -522,28 +522,42 @@ command_noidle(struct lkt_state *srv, size_t c) /* Functions for the searchadd and the search mpd commands */ static bool -lkt_callback_send_row(struct _client_trace_t *args, int id, int id_len, const char *sql_row) +lkt_callback_print_row_v1(void *args, int id, int id_len, const char *sql_row) { - struct lkt_message *out = lkt_message_new(); - out->data_len = snprintf(out->data, LKT_MESSAGE_MAX, "%*d %s\n", id_len, id, sql_row); - lkt_state_send(args->srv, args->c, out); + printf(" . from client %ld:\t%*d:%s\n", ((struct _client_trace_t *) args)->c, + id_len, id, sql_row); return true; } static bool -lkt_callback_insert(struct _client_trace_t *args, int id, int id_len, const char *sql_row) +lkt_callback_none(void *args, int id, int id_len, const char *sql_row) { - (void) sql_row; + (void) args; + (void) id; (void) id_len; - return database_queue_add_id(args->srv->db, id, 5); + (void) sql_row; + return true; +} + +static bool +lkt_callback_send_row_v1(void *_args, int id, int id_len, const char *sql_row) +{ + 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, "%*d %s\n", id_len, id, sql_row); + lkt_state_send(args->srv, args->c, out); + return true; } static bool -lkt_callback_add(struct _client_trace_t *args, int id, int id_len, const char *sql_row) +lkt_callback_insert_v1(void *_args, int id, int id_len, const char *sql_row) { (void) sql_row; (void) id_len; - return database_queue_add_id(args->srv->db, id, 1); + struct _client_trace_t *args = (struct _client_trace_t *) _args; + return database_queue_add_id(args->srv->db, id, 5); } bool @@ -555,13 +569,9 @@ command_find(struct lkt_state *srv, sqlite3_stmt *stmt; char rgx[PATH_MAX], *col_name, *mpd_tag; bool once, free_stmt; - struct _client_trace_t args = { - .srv = srv, - .c = c, - }; + struct _client_trace_t args; struct lkt_message *not_found_msg; - struct database_callback callback = { .type = database_callback_db }; - + database_search_callback_t callback; // Check args // if (cmd_args == NULL || cmd_args[0] == NULL) { @@ -572,19 +582,23 @@ command_find(struct lkt_state *srv, // Select callback // switch (action) { case LKT_FND_ACT_RESPOND: - callback.call = lkt_callback_send_row; + callback = lkt_callback_send_row_v1; + args.srv = srv; + args.c = c; break; - case LKT_FND_ACT_INSERT: - callback.call = lkt_callback_add; - srv->mpd_idle_events |= MPD_IDLE_PLAYLIST; + case LKT_FND_ACT_PRINT: + callback = lkt_callback_print_row_v1; break; - case LKT_FND_ACT_INSERT: - callback.call = lkt_callback_insert; + case LKT_FND_ACT_ENQUEUE: + callback = lkt_callback_insert_v1; srv->mpd_idle_events |= MPD_IDLE_PLAYLIST; + args.srv = srv; + args.c = c; break; + case LKT_FND_ACT_NONE: default: - fprintf(stderr, " ! command_find: Find action not implemented\n"); - return false; + callback = lkt_callback_none; + break; } // Select the right column // @@ -594,7 +608,7 @@ command_find(struct lkt_state *srv, !strcasecmp("all", mpd_tag) || !strcasecmp("a", mpd_tag)) col_name = LKT_DATABASE_KARA_COLUMNT_ANY; - else if (!strcasecmp("author", mpd_tag) || !(strcasecmp("auth", mpd_tag))) + else if (!strcasecmp("author", mpd_tag)) col_name = LKT_DATABASE_NAME_KAUTHOR; else if (!strcasecmp("source", mpd_tag)) col_name = LKT_DATABASE_NAME_KNAME; @@ -623,7 +637,7 @@ command_find(struct lkt_state *srv, } // Make the search langand do the right action // - if (!database_search_database_init(srv->db, col_name, rgx, &stmt)) { + if (!database_search_init(srv->db, col_name, rgx, &stmt)) { fprintf(stderr, " ! command_find: Failed to init the search\n"); return false; } @@ -642,7 +656,6 @@ no_rgx: LKT_MESSAGE_MAX, "No kara found with regex\n"); lkt_state_send(srv, c, not_found_msg); - return false; } return true; @@ -918,11 +931,9 @@ command_queue_list(struct lkt_state *srv, size_t c, unsigned int from, to, tmp_switch; long val; char *endptr, *str; - void ** call_args = { &srv, c }; - struct lkt_callback callback = { - .args = call_args, - .type = callback_queue, - .call = lkt_callback_send_row, + struct _client_trace_t callback_args = { + .srv = srv, + .c = c, }; if (!args || !args[0] || strlen(args[0]) == 0) { @@ -987,11 +998,13 @@ command_queue_list(struct lkt_state *srv, size_t c, /* The command is used in its relative forme, display elements from the current one. */ is_relative: - return database_queue_list_from(srv->db, count, &callback_args, lkt_callback_send_row); + return database_queue_list_from(srv->db, count, &callback_args, + lkt_callback_send_row_v1); /* The command is used with a range specifier. */ is_absolute: - return database_queue_list_abs(srv->db, from, to, &callback_args, lkt_callback_send_row); + return database_queue_list_abs(srv->db, from, to, &callback_args, + lkt_callback_send_row_v1); } bool diff --git a/src/database/find.c b/src/database/find.c index 7a64e076..f9c8a62d 100644 --- a/src/database/find.c +++ b/src/database/find.c @@ -8,7 +8,7 @@ #include <string.h> bool -database_search_database_init(sqlite3 *db, const char *col_name, const char *rgx, struct lkt_search_iterator *ret) +database_search_init(sqlite3 *db, char *col_name, char *rgx, sqlite3_stmt **ret) { if (ret == NULL) { fprintf(stderr, " ! database_search_init: Exit because return pointer is NULL\n"); @@ -25,28 +25,27 @@ database_search_database_init(sqlite3 *db, const char *col_name, const char *rgx snprintf(SQL_STMT, LKT_MAX_SQLITE_STATEMENT - 1, SQL_STMT_TEMPLATE, col_name); SQL_STMT[LKT_MAX_SQLITE_STATEMENT - 1] = 0; - SQLITE_PREPARE(db, ret->iter, SQL_STMT, error); - SQLITE_BIND_TEXT(db, ret->iter, 1, rgx, error); + SQLITE_PREPARE(db, *ret, SQL_STMT, error); + SQLITE_BIND_TEXT(db, *ret, 1, rgx, error); return true; error: - sqlite3_finalize(ret->iter); + sqlite3_finalize(*ret); + *ret = NULL; return false; } -//bool -//database_search_plt_init(sqlite3 *db, const char *plt_name, char *col_name, char *rgx, sqlite3_stmt **ret) -//{ -//} - bool -database_search_iter(struct lkt_search_iterator *item, void **ret, size_t *len) +database_search_iter(sqlite3 *db, + sqlite3_stmt *item, + void *args, + database_search_callback_t callback, + bool *need_free) { - int code; - - if (*len < 3) - goto to_small; + const char *sql_row; + int id, code, id_len; - code = sqlite3_step(item->iter); + *need_free = true; + code = sqlite3_step(item); if (item == NULL) { fprintf(stderr, " * database_search_iter: Exit function because the sqlite3_stmt* is NULL\n"); @@ -54,31 +53,18 @@ database_search_iter(struct lkt_search_iterator *item, void **ret, size_t *len) } if (code == SQLITE_DONE) - goto done; - - if (code != SQLITE_ROW) - goto error; - - switch (item->type) { - case callback_database: - * (int *) ret[0] = sqlite3_column_int(item->iter, 0); - ret[1] = (char *) sqlite3_column_text(item->iter, 1); - * (int *) ret[2] = sqlite3_column_int(item->iter, 2); - return true; + goto error_or_done; - default: - break; + if (code == SQLITE_ROW) { + id = sqlite3_column_int(item, 0); + sql_row = (const char *) sqlite3_column_text(item, 1); + id_len = sqlite3_column_int(item, 2); + return callback(args, id, id_len, sql_row); } -to_small: - fprintf(stderr, " . database_search_iter: length of ret is to small, should be at least 3\n"); - return false; -error: - fprintf(stderr, " ! database_search_iter: sqlite3_step failed: %s\n", sqlite3_errmsg(item->db)); - sqlite3_finalize(item->iter); - return false; -done: - sqlite3_finalize(item->iter); - *len = 0; + fprintf(stderr, " ! database_search_iter: sqlite3_step failed: %s\n", sqlite3_errmsg(db)); +error_or_done: + sqlite3_finalize(item); + *need_free = false; return false; } diff --git a/src/database/queue.c b/src/database/queue.c index d68b24a1..1ec0e429 100644 --- a/src/database/queue.c +++ b/src/database/queue.c @@ -320,7 +320,7 @@ database_queue_del_id(sqlite3 *db, int id) " WHEN current IS NULL THEN NULL" " ELSE (SELECT pos FROM before) " "END WHERE current > (SELECT position FROM queue_ WHERE kara_id = %d);" - "DELETE FROM queue WHERE kara_id = %d LIMIT 1;" + "DELETE FROM queue WHERE kara_id = %d;" "COMMIT TRANSACTION;"; char SQL[LKT_MAX_SQLITE_STATEMENT]; snprintf(SQL, LKT_MAX_SQLITE_STATEMENT - 1, SQL_TEMPLATE, id, id, id); @@ -674,7 +674,7 @@ error: bool database_queue_list_abs(sqlite3 *db, unsigned int from, unsigned int to, void *args, - database_callback callback) + database_search_callback_t callback) { const char *SQL_STMT = "WITH content AS (" @@ -724,7 +724,7 @@ error: bool database_queue_list_from(sqlite3 *db, unsigned int count, void *args, - database_callback callback) + database_search_callback_t callback) { const char *SQL_TEMPLATE = "WITH content AS (" -- GitLab