From 50fecc62bf5d9e19a47170decbf4d6ac849df8af Mon Sep 17 00:00:00 2001 From: Kubat <mael.martin31@gmail.com> Date: Mon, 15 Jun 2020 13:24:46 +0200 Subject: [PATCH] Fix plt add and q add playlist --- src/database/playlist.c | 35 ++++++----------------------------- src/database/queue.c | 10 ++++++---- src/main/lkt.c | 12 +++++++++++- src/uri.c | 2 +- 4 files changed, 24 insertions(+), 35 deletions(-) diff --git a/src/database/playlist.c b/src/database/playlist.c index a4b9b26c..d882ef0b 100644 --- a/src/database/playlist.c +++ b/src/database/playlist.c @@ -163,38 +163,15 @@ database_plt_add_uri(volatile sqlite3 *db, const char *name, struct lkt_uri *uri) { static const char *SQL = - "WITH plt_id(id) AS (SELECT playlist.id AS id FROM playlist" - " WHERE name COLLATE nocase = ?) " - "INSERT INTO kara_playlist (kara_id, playlist_id) " - "SELECT plt_id.id, kara.id " - " FROM kara, plt_id " - " WHERE kara.%s LIKE ? " - " ORDER BY RANDOM();"; + "INSERT OR REPLACE INTO kara_playlist (kara_id, playlist_id) " + "SELECT" + " kara.id," + " (SELECT playlist.id FROM playlist WHERE name = ? COLLATE NOCASE)" + "FROM kara WHERE kara.%s LIKE ?;"; char SQL_STMT[LKT_MAX_SQLITE_STATEMENT], sta = false; - const char *column; sqlite3_stmt *stmt; - switch (uri->type) { - case uri_type: - column = LKT_DB_TYPE; - break; - case uri_author: - column = LKT_DB_AUTHOR; - break; - case uri_category: - column = LKT_DB_CAT; - break; - case uri_language: - column = LKT_DB_LANG; - break; - case uri_query: - column = LKT_DB_ALL; - break; - default: - return false; - } - - safe_snprintf(SQL_STMT, LKT_MAX_SQLITE_STATEMENT, SQL, column); + safe_snprintf(SQL_STMT, LKT_MAX_SQLITE_STATEMENT, SQL, uri->column_name); SQLITE_PREPARE(db, stmt, SQL_STMT, error); SQLITE_BIND_TEXT(db, stmt, 1, name, error); SQLITE_BIND_TEXT(db, stmt, 2, (char *) uri->value, error); diff --git a/src/database/queue.c b/src/database/queue.c index 92d82e63..9762414c 100644 --- a/src/database/queue.c +++ b/src/database/queue.c @@ -119,8 +119,10 @@ error: if (prio > 1) { \ if (__queue_reorder(db)) { \ LOG_INFO("DB", "%s", "Queue has been reordered"); \ - } else \ + } else { \ + LOG_INFO("DB", "%s", "Failed to reorder"); \ goto error; \ + } \ } static bool @@ -131,7 +133,7 @@ __queue_reorder(volatile sqlite3 *db) " ELSE (SELECT current FROM queue_state) END AS val LIMIT 1)" static const char *SQL_REORDER = /* Create temporary tables */ - "CREATE TEMPORARY TABLE queue_tmp" + "CREATE TEMPORARY TABLE queue_tmp IF NOT EXISTS" " ( position INTEGER PRIMARY KEY AUTOINCREMENT CHECK(position > 0)" " , kara_id INTEGER" " , priority INTEGER NOT NULL DEFAULT 1 CHECK(priority > 0 AND priority < 6)" @@ -146,7 +148,7 @@ __queue_reorder(volatile sqlite3 *db) " SELECT position + " CURRENT_POS_OR_0 ", kara_id, priority" " FROM queue_tmp;" /* Drop temporary tables */ - "DROP TABLE queue_tmp;" + "DELETE FROM queue_tmp;" "DELETE FROM sqlite_sequence WHERE name = 'queue_tmp';"; #undef CURRENT_POS_OR_0 SQLITE_EXEC(db, SQL_REORDER, error); @@ -274,7 +276,7 @@ database_queue_add_uri(volatile sqlite3 *db, struct lkt_uri *uri, int prio) case uri_author: return queue_add_with_col_like_str(db, LKT_DB_AUTHOR, uri->value, prio); case uri_playlist: - return database_queue_add_plt(db, (char *) uri->value, prio); + return database_queue_add_plt(db, uri->value, prio); default: LOG_WARN("DB", "Add to queue for uri of type %d is not" " implemented", uri->type); diff --git a/src/main/lkt.c b/src/main/lkt.c index 3999db0f..9c53b2f6 100644 --- a/src/main/lkt.c +++ b/src/main/lkt.c @@ -733,7 +733,17 @@ plt_add__(struct lkt_cmd_args *args) FILE *sock = lkt_connect(); fail_if(args->argc < 3, "Invalid argument, need at least three arguments: plt add <plt> <query>"); fail_if(!lkt_valid_type(args->argv[1]), "Invalid argument, type for the query is invalid"); - send_cmd_with_uri(sock, "playlistadd", args->argc, args->argv); + + int i; + char buf[LKT_MESSAGE_MAX] = {0}; + for (i = 2; i < args->argc - 1; ++i) { + strncat(buf, args->argv[i], LKT_MESSAGE_MAX - 1); + strncat(buf, " ", LKT_MESSAGE_MAX - 1); + } + strncat(buf, args->argv[i], LKT_MESSAGE_MAX - 1); + strncat(buf, "\n", LKT_MESSAGE_MAX - 1); + write_socket(sock, "playlistadd %s %s://%s", args->argv[0], args->argv[1], buf); + exit_with_status(sock, buff); } diff --git a/src/uri.c b/src/uri.c index eaf64887..fd464471 100644 --- a/src/uri.c +++ b/src/uri.c @@ -29,7 +29,7 @@ __prefix(char *str, struct lkt_uri *ret) } else if (STR_NMATCH(str, "playlist", 8)) { ret->column_name = NULL; ret->type = uri_playlist; - val = str + 3; + val = str + 8; } else if (STR_NMATCH(str, "type", 4)) { ret->column_name = LKT_DB_TYPE; ret->type = uri_type; -- GitLab