diff --git a/src/database/queue.c b/src/database/queue.c index 4f8a4e8d8feadffe7cbd18848614351d04fc7cba..473a03df24648a04240ef19495f9154657b746e8 100644 --- a/src/database/queue.c +++ b/src/database/queue.c @@ -307,15 +307,14 @@ bool database_queue_del_id(sqlite3 *db, int id) { static const char *SQL_TEMPLATE = - "WITH before (pos) AS (SELECT position FROM queue_ JOIN queue_state WHERE position < current)" + "WITH before(pos) AS (SELECT position FROM queue_ JOIN queue_state WHERE position < current ORDER BY position DESC LIMIT 1)" "UPDATE queue_state SET current = CASE" - " WHEN (SELECT pos FROM before) IS NULL THEN (SELECT pos FROM queue_ ORDER BY position DESC LIMIT 1)" " WHEN current IS NULL THEN NULL" " ELSE (SELECT pos FROM before)" - "END;" + "END WHERE current >= (SELECT position FROM queue_ WHERE kara_id = %d);" "DELETE FROM queue WHERE kara_id = %d;"; char SQL[LKT_MAX_SQLITE_STATEMENT]; - snprintf(SQL, LKT_MAX_SQLITE_STATEMENT - 1, SQL_TEMPLATE, id); + snprintf(SQL, LKT_MAX_SQLITE_STATEMENT - 1, SQL_TEMPLATE, id, id); SQL[LKT_MAX_SQLITE_STATEMENT - 1] = '\0'; SQLITE_EXEC(db, SQL, error); return true; diff --git a/src/main/lkt.c b/src/main/lkt.c index d6b2e83ef9c689697c8c4d79e111a9737aefe2c7..d28fb1a93bfa1d9447b2cc41cf08b1a1b780c16d 100644 --- a/src/main/lkt.c +++ b/src/main/lkt.c @@ -117,6 +117,8 @@ lkt_valid_type(const char *type) return (STR_MATCH(type, "all") || STR_MATCH(type, "any") || STR_MATCH(type, "a") || + STR_MATCH(type, "id") || + STR_MATCH(type, "title") || STR_MATCH(type, "type") || STR_MATCH(type, "cat") || STR_MATCH(type, "category") ||