diff --git a/inc/lektor/commands.h b/inc/lektor/commands.h index a447ef3604501b192301410c5a365e592b11092e..c685230874d05f8d158d6faf8ae724ebbc32b643 100644 --- a/inc/lektor/commands.h +++ b/inc/lektor/commands.h @@ -60,10 +60,11 @@ bool command_noidle(struct lkt_state *srv, size_t c); /* Find commands */ enum lkt_find_action { - LKT_FND_ACT_NONE = 0, + LKT_FND_ACT_NONE = 0, LKT_FND_ACT_RESPOND = 1, - LKT_FND_ACT_PRINT = 2, + LKT_FND_ACT_PRINT = 2, LKT_FND_ACT_ENQUEUE = 3, + LKT_FND_ACT_ADD = 4, }; /* Find and send karas in the db that match the search expression */ diff --git a/src/commands.c b/src/commands.c index 03b289c1b91fecf2d38ba0100c0adf704a1e09e0..08d54f20086830e21f77cd10329bf68d01ff7ebc 100644 --- a/src/commands.c +++ b/src/commands.c @@ -468,6 +468,13 @@ lkt_callback_insert_v1(struct lkt_state *srv, size_t c, int id, int id_len, cons return database_queue_add_id(srv->db, id, 5); } +static bool +lkt_callback_add_v1(struct lkt_state *srv, size_t c, int id, int id_len, const char *sql_row) +{ + UNUSED(sql_row, id_len, c); + return database_queue_add_id(srv->db, id, 1); +} + static bool __find(struct lkt_state *srv, size_t c, char *cmd_args[LKT_MESSAGE_ARGS_MAX], long continuation, enum lkt_find_action action, bool(*init)(volatile sqlite3 *, char *, char *, struct lkt_search *)) @@ -498,6 +505,8 @@ __find(struct lkt_state *srv, size_t c, char *cmd_args[LKT_MESSAGE_ARGS_MAX], lo search.call = (void(*)(void)) lkt_callback_insert_v1; srv->mpd_idle_events |= MPD_IDLE_PLAYLIST; break; + case LKT_FND_ACT_ADD: + search.call = (void(*)(void)) lkt_callback_add_v1; default: return false; } diff --git a/src/net/listen.c b/src/net/listen.c index 81d15d9f67449a6d02bebb0da216a401433c0a3b..23d4fddf2cb64900788e5dbca88b132ba662518b 100644 --- a/src/net/listen.c +++ b/src/net/listen.c @@ -255,10 +255,12 @@ handle_simple_command(struct lkt_state *srv, size_t c, struct lkt_command cmd) goto end_no_send_status; } else if (!strcmp(cmd.name, "searchadd") || !strcmp(cmd.name, "findadd")) - err = !command_find(srv, c, cmd.args, cmd.cont, LKT_FND_ACT_RESPOND); + err = ! command_find(srv, c, cmd.args, cmd.cont, LKT_FND_ACT_ADD); else if (!strcmp(cmd.name, "search") || !strcmp(cmd.name, "find")) - err = !command_find(srv, c, cmd.args, cmd.cont, LKT_FND_ACT_RESPOND); + err = ! command_find(srv, c, cmd.args, cmd.cont, LKT_FND_ACT_RESPOND); + else if (!strcmp(cmd.name, "__insert")) + err = ! command_find(srv, c, cmd.args, cmd.cont, LKT_FND_ACT_ENQUEUE); else err = 2;