From d2baac92605b8f9c0386b0dd3995eb2baeb7b346 Mon Sep 17 00:00:00 2001
From: Kubat <mael.martin31@gmail.com>
Date: Sun, 26 Apr 2020 11:04:42 +0200
Subject: [PATCH] Only select kara that are available for next and prev, also
 don't permit insertion of unavailable karas in the queue (but possible in
 playlists).

---
 src/database/queue.c | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/src/database/queue.c b/src/database/queue.c
index cfb55e00..b12f602e 100644
--- a/src/database/queue.c
+++ b/src/database/queue.c
@@ -280,15 +280,15 @@ database_queue_next(sqlite3 *db, char filepath[PATH_MAX])
 {
     static const char *SQL_STMT =
         "SELECT file_path, position, RANDOM()"
-        "  FROM kara"
-        "  JOIN queue_ ON kara.id = queue_.kara_id"
-        "  JOIN queue_state"
-        "    ON current IS NULL"
-        "    OR (CASE WHEN (SELECT single FROM queue_state LIMIT 1) = 1 THEN position = current"
-        "             WHEN (SELECT random FROM queue_state LIMIT 1) = 1 THEN position <> current"
-        "             ELSE position > current END)"
-        "  ORDER BY CASE WHEN (SELECT random FROM queue_state LIMIT 1) = 1 THEN RANDOM() ELSE 2 END"
-        "  LIMIT 1";
+        " FROM kara"
+        " JOIN queue_ ON kara.id = queue_.kara_id"
+        " JOIN queue_state"
+        "  ON available = 1 AND current IS NULL OR"
+        "  CASE WHEN (SELECT single FROM queue_state) = 1 THEN position = current"
+        "       WHEN (SELECT random FROM queue_state) = 1 THEN position <> current"
+        "       ELSE position > current END"
+        " ORDER BY CASE WHEN (SELECT random FROM queue_state) = 1 THEN RANDOM() ELSE 2 END"
+        " LIMIT 1";
     char SQL_UPDATE[LKT_MAX_SQLITE_STATEMENT];
     bool status = false;
     int code = SQLITE_OK, id;
@@ -345,7 +345,7 @@ database_queue_prev(sqlite3 *db, char filepath[PATH_MAX])
     static const char *SQL_STMT =
         "SELECT file_path, position "
         "  FROM kara"
-        "  JOIN queue_ ON kara.id = queue_.kara_id"
+        "  JOIN queue_ ON kara.id = queue_.kara_id AND available = 1"
         "  JOIN queue_state ON CASE "
         "    WHEN (SELECT single FROM queue_state LIMIT 1) = 1 THEN position = current"
         "    ELSE queue_.position < queue_state.current"
-- 
GitLab