From 419f4a0af61493fd3ff657828a1f44e2e7c5ef99 Mon Sep 17 00:00:00 2001 From: Kubat <mael.martin31@gmail.com> Date: Wed, 15 Apr 2020 10:17:08 +0200 Subject: [PATCH] WIP: Change the callback type --- inc/lektor/database.h | 16 +++++++++------- src/commands.c | 32 ++++++++++---------------------- src/database/find.c | 9 +++------ src/database/queue.c | 10 ++++------ 4 files changed, 26 insertions(+), 41 deletions(-) diff --git a/inc/lektor/database.h b/inc/lektor/database.h index 475206c5..41ef160a 100644 --- a/inc/lektor/database.h +++ b/inc/lektor/database.h @@ -74,18 +74,20 @@ bool database_queue_play(sqlite3 *db, int pos); bool database_queue_stop(sqlite3 *db); /* A search callback to be called after each matched row */ -typedef bool (*database_search_callback_t)(void *args, int id, int id_len, const char *sql_row); +struct lkt_callback { + bool (*call)(void *args, int id, int id_len, const char *sql_row); + struct lkt_state *srv; + size_t c; +}; /* List the content of the queue */ -bool database_queue_list_from(sqlite3 *db, unsigned int count, void *args, - database_search_callback_t callback); -bool database_queue_list_abs(sqlite3 *db, unsigned int from, unsigned int to, void *args, - database_search_callback_t callback); +bool database_queue_list_from(sqlite3 *db, unsigned int count, struct lkt_callback *callback); +bool database_queue_list_abs(sqlite3 *db, unsigned int from, unsigned int to, struct lkt_callback *callback); /* Search the database */ -bool database_search_init(sqlite3 *db, char *col_name, char *rgx, sqlite3_stmt **ret); +bool database_search_queue_init(sqlite3 *db, char *col_name, char *rgx, sqlite3_stmt **ret); bool database_search_iter(sqlite3 *db, sqlite3_stmt *item, void *args, - database_search_callback_t callback, bool *need_free); + struct lkt_callback callback, bool *need_free); /* Next and prev operation on the queue. */ bool database_queue_next(sqlite3 *db, char filepath[PATH_MAX]); diff --git a/src/commands.c b/src/commands.c index 1c525462..11b8f1f4 100644 --- a/src/commands.c +++ b/src/commands.c @@ -529,16 +529,6 @@ lkt_callback_print_row_v1(void *args, int id, int id_len, const char *sql_row) return true; } -static bool -lkt_callback_none(void *args, int id, int id_len, const char *sql_row) -{ - (void) args; - (void) id; - (void) id_len; - (void) sql_row; - return true; -} - static bool lkt_callback_send_row_v1(void *_args, int id, int id_len, const char *sql_row) { @@ -571,7 +561,7 @@ command_find(struct lkt_state *srv, bool once, free_stmt; struct _client_trace_t args; struct lkt_message *not_found_msg; - database_search_callback_t callback; + struct lkt_callback callback; // Check args // if (cmd_args == NULL || cmd_args[0] == NULL) { @@ -582,23 +572,22 @@ command_find(struct lkt_state *srv, // Select callback // switch (action) { case LKT_FND_ACT_RESPOND: - callback = lkt_callback_send_row_v1; + callback.call = lkt_callback_send_row_v1; args.srv = srv; args.c = c; break; case LKT_FND_ACT_PRINT: - callback = lkt_callback_print_row_v1; + callback.call = lkt_callback_print_row_v1; break; case LKT_FND_ACT_ENQUEUE: - callback = lkt_callback_insert_v1; + callback.call = lkt_callback_insert_v1; srv->mpd_idle_events |= MPD_IDLE_PLAYLIST; args.srv = srv; args.c = c; break; case LKT_FND_ACT_NONE: default: - callback = lkt_callback_none; - break; + return false; } // Select the right column // @@ -637,7 +626,7 @@ command_find(struct lkt_state *srv, } // Make the search langand do the right action // - if (!database_search_init(srv->db, col_name, rgx, &stmt)) { + if (!database_search_queue_init(srv->db, col_name, rgx, &stmt)) { fprintf(stderr, " ! command_find: Failed to init the search\n"); return false; } @@ -931,7 +920,8 @@ command_queue_list(struct lkt_state *srv, size_t c, unsigned int from, to, tmp_switch; long val; char *endptr, *str; - struct _client_trace_t callback_args = { + struct lkt_callback callback = { + .call = lkt_callback_send_row_v1, .srv = srv, .c = c, }; @@ -998,13 +988,11 @@ 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_v1); + return database_queue_list_from(srv->db, count, &callback); /* 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_v1); + return database_queue_list_abs(srv->db, from, to, &callback); } bool diff --git a/src/database/find.c b/src/database/find.c index f9c8a62d..cdccbb42 100644 --- a/src/database/find.c +++ b/src/database/find.c @@ -8,7 +8,7 @@ #include <string.h> bool -database_search_init(sqlite3 *db, char *col_name, char *rgx, sqlite3_stmt **ret) +database_search_queue_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"); @@ -35,10 +35,7 @@ error: } bool -database_search_iter(sqlite3 *db, - sqlite3_stmt *item, - void *args, - database_search_callback_t callback, +database_search_iter(sqlite3 *db, sqlite3_stmt *item, void *args, struct lkt_callback callback, bool *need_free) { const char *sql_row; @@ -59,7 +56,7 @@ database_search_iter(sqlite3 *db, 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); + return callback.call(args, id, id_len, sql_row); } fprintf(stderr, " ! database_search_iter: sqlite3_step failed: %s\n", sqlite3_errmsg(db)); diff --git a/src/database/queue.c b/src/database/queue.c index 1ec0e429..5e042014 100644 --- a/src/database/queue.c +++ b/src/database/queue.c @@ -673,8 +673,7 @@ error: } bool -database_queue_list_abs(sqlite3 *db, unsigned int from, unsigned int to, void *args, - database_search_callback_t callback) +database_queue_list_abs(sqlite3 *db, unsigned int from, unsigned int to, struct lkt_callback *callback) { const char *SQL_STMT = "WITH content AS (" @@ -702,7 +701,7 @@ database_queue_list_abs(sqlite3 *db, unsigned int from, unsigned int to, void *a id = sqlite3_column_int(stmt, 0); row = (const char *) sqlite3_column_text(stmt, 1); id_len = sqlite3_column_int(stmt, 2); - if (callback(args, id, id_len, row)) + if (callback->call(callback, id, id_len, row)) continue; else break; @@ -723,8 +722,7 @@ error: } bool -database_queue_list_from(sqlite3 *db, unsigned int count, void *args, - database_search_callback_t callback) +database_queue_list_from(sqlite3 *db, unsigned int count, struct lkt_callback *callback) { const char *SQL_TEMPLATE = "WITH content AS (" @@ -755,7 +753,7 @@ database_queue_list_from(sqlite3 *db, unsigned int count, void *args, id = sqlite3_column_int(stmt, 0); row = (const char *) sqlite3_column_text(stmt, 1); id_len = sqlite3_column_int(stmt, 2); - if (callback(args, id, id_len, row)) + if (callback->call(callback, id, id_len, row)) continue; else break; -- GitLab