diff --git a/inc/lektor/database.h b/inc/lektor/database.h index e28f3aa03597eeda732ce4f56040d9e2912424b6..501251d48d707bb8e3e38e53f51fdcf3d6876e95 100644 --- a/inc/lektor/database.h +++ b/inc/lektor/database.h @@ -50,14 +50,7 @@ bool database_update_add (volatile sqlite3 *db, const char *kara_path, bool database_update_set_available(volatile sqlite3 *db, uint64_t id); /* Control the content of the queue. */ -bool database_queue_add_id (volatile sqlite3 *db, int id, int priority); -bool database_queue_add_query (volatile sqlite3 *db, const char *query, int priority); -bool database_queue_add_author (volatile sqlite3 *db, const char *author, int priority); -bool database_queue_add_language(volatile sqlite3 *db, const char *author, int priority); -bool database_queue_add_category(volatile sqlite3 *db, const char *author, int priority); -bool database_queue_add_type (volatile sqlite3 *db, const char *author, int priority); -bool database_queue_add_plt (volatile sqlite3 *db, const char *plt_name, int priority); - +bool database_queue_add_uri(volatile sqlite3 *db, struct lkt_uri *uri, int priority); bool database_queue_del_id (volatile sqlite3 *db, int id); bool database_queue_del_pos(volatile sqlite3 *db, int pos); bool database_queue_clear (volatile sqlite3 *db); diff --git a/src/commands.c b/src/commands.c index 957bd4e4ea72dbcaeb70407abc0698db48fa7fb8..2c8fc902008875e605bf27be68e8de5c4bf5824d 100644 --- a/src/commands.c +++ b/src/commands.c @@ -238,35 +238,7 @@ command_add(volatile sqlite3 *db, struct lkt_win *win, char *args[LKT_MESSAGE_AR int ret, priority = 1; /* To be modified according to the command (insert or add) later (TODO) */ UNUSED(win); /* No callbacks to the window for the moment */ RETURN_UNLESS(lkt_uri_from(&uri, query), "Failed to parse query", false); - - switch (uri.type) { - case uri_query: - case uri_fs: - ret = database_queue_add_query(db, uri.value, priority); - break; - case uri_id: - ret = database_queue_add_id(db, *(int *) uri.value, priority); - break; - case uri_type: - ret = database_queue_add_type(db, (char *) uri.value, priority); - break; - case uri_category: - ret = database_queue_add_category(db, (char *) uri.value, priority); - break; - case uri_language: - ret = database_queue_add_language(db, (char *) uri.value, priority); - break; - case uri_author: - ret = database_queue_add_author(db, (char *) uri.value, priority); - break; - case uri_playlist: - ret = database_queue_add_plt(db, (char *) uri.value, priority); - break; - default: - ret = false; - break; - } - + ret = database_queue_add_uri(db, &uri, priority); lkt_uri_free(&uri); return ret; } @@ -275,19 +247,17 @@ bool command_addid(volatile sqlite3 *db, struct lkt_win *win, char *args[LKT_MESSAGE_ARGS_MAX], mpd_idle_flag *watch_mask_ptr) { UNUSED(win); - long id; - char *endptr, *id_str; - int priority = 1; - RETURN_UNLESS(args, "Invalid argument", false); - id_str = args[0]; + long id; + char *endptr, *id_str = args[0]; + struct lkt_uri uri = { .type = uri_id }; errno = 0; *watch_mask_ptr |= MPD_IDLE_PLAYLIST; id = strtol(id_str, &endptr, 10); - RETURN_IF((errno == ERANGE && (id == LONG_MAX || id == LONG_MIN)) || (errno != 0 && id == 0), - "Failed: strtol", false); + RETURN_IF((errno == ERANGE && (id == LONG_MAX || id == LONG_MIN)) || (errno != 0 && id == 0), "Failed: strtol", false); + uri.value = (void *) (size_t) id; RETURN_IF(endptr == args[0], "No digit found", false); - return database_queue_add_id(db, id, priority); + return database_queue_add_uri(db, &uri, 1); } inline bool diff --git a/src/database/find.c b/src/database/find.c index 91a290cd22f7fdd5b6522a95e85efc42d401e8c2..e868700f4f86cfedd56f9f13f0642a75c016d965 100644 --- a/src/database/find.c +++ b/src/database/find.c @@ -12,12 +12,12 @@ __init_search(volatile sqlite3 *db, struct lkt_search *ret) { UNUSED(db); switch (ret->type) { - case lkt_add_queue: - /* Use the add uri */ - return false; - default: - LOG_WARN_SCT("DB", "Init for type %d is not implemented", ret->type); - return false; + case lkt_add_queue: + /* Use the add uri */ + return false; + default: + LOG_WARN_SCT("DB", "Init for type %d is not implemented", ret->type); + return false; } return false; } diff --git a/src/database/queue.c b/src/database/queue.c index a8bf8a55a43b2bbc35a200e051b169aaaa37d76e..3fdd6af52e1d4ad6cae136b6e3f58e7ee35f1edb 100644 --- a/src/database/queue.c +++ b/src/database/queue.c @@ -239,6 +239,31 @@ error: return status; } +bool +database_queue_add_uri(volatile sqlite3 *db, struct lkt_uri *uri, int priority) +{ + switch (uri->type) { + case uri_query: + case uri_fs: + return database_queue_add_query(db, uri->value, priority); + case uri_id: + return database_queue_add_id(db, *(int *) uri->value, priority); + case uri_type: + return database_queue_add_type(db, (char *) uri->value, priority); + case uri_category: + return database_queue_add_category(db, (char *) uri->value, priority); + case uri_language: + return database_queue_add_language(db, (char *) uri->value, priority); + case uri_author: + return database_queue_add_author(db, (char *) uri->value, priority); + case uri_playlist: + return database_queue_add_plt(db, (char *) uri->value, priority); + default: + LOG_WARN_SCT("DB", "Add to queue for uri of type %d is not implemented", uri->type); + return false; + } +} + bool database_queue_del_id(volatile sqlite3 *db, int id) {