From f85c29145196e97baac3fab73478bb268e17fa3f Mon Sep 17 00:00:00 2001 From: Kubat <mael.martin31@gmail.com> Date: Thu, 3 Sep 2020 17:20:32 +0200 Subject: [PATCH] MISC: fix queue bugs on clear / play / stop / etc - Fix the clear to whipe the autoinc ids - Stop player on clear playlist to avoid desync problems and inconsistencies in the queue --- src/base/commands.c | 5 +++-- src/database/queue.c | 17 ++++++++++++----- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/base/commands.c b/src/base/commands.c index 5fc5b0ac..4d742a50 100644 --- a/src/base/commands.c +++ b/src/base/commands.c @@ -245,7 +245,7 @@ command_playid(struct lkt_state *srv, char *args[LKT_MESSAGE_ARGS_MAX]) bool command_stop(struct lkt_state *srv, char __attribute__((unused)) *args[LKT_MESSAGE_ARGS_MAX]) { - RETURN_UNLESS(database_queue_stop(srv->db), "DB error", false); + RETURN_UNLESS(database_queue_stop(srv->db), "DB error on stop", false); MOD_PROC(srv->window_mod, "close"); srv->mpd_idle_events |= MPD_IDLE_PLAYER; return true; @@ -283,7 +283,8 @@ inline bool command_clear(struct lkt_state *srv, char __attribute__((unused)) *args[LKT_MESSAGE_ARGS_MAX]) { srv->mpd_idle_events |= MPD_IDLE_PLAYER; - return database_queue_clear(srv->db); + return command_stop(srv, args) && + database_queue_clear(srv->db); } inline bool diff --git a/src/database/queue.c b/src/database/queue.c index 1573e565..ac5d1181 100644 --- a/src/database/queue.c +++ b/src/database/queue.c @@ -19,11 +19,18 @@ SQLITE_DO_ROLLBACK(db); \ return false; \ } -sqlite_just_exec(database_queue_toggle_pause, "UPDATE queue_state SET paused = 1 - paused;") -sqlite_just_exec(database_queue_crop, "DELETE FROM queue WHERE queue.kara_id <> (SELECT current FROM queue_state LIMIT 1);") -sqlite_just_exec(database_queue_stop, "UPDATE queue_state SET current = NULL;") -sqlite_just_exec(database_queue_clear, "DELETE FROM queue;DELETE FROM sqlite_sequence WHERE name = 'queue';UPDATE queue_state SET current = NULL;") -sqlite_just_exec(database_config_queue_default, "UPDATE queue_state SET volume = 100, paused = 1, random = 0, repeat = 0, single = 0, consume = 0, current = NULL, duration = 0;") +sqlite_just_exec(database_queue_toggle_pause, "UPDATE queue_state SET paused = 1 - paused;") +sqlite_just_exec(database_queue_crop, "DELETE FROM queue WHERE queue.kara_id <>" + " (SELECT current FROM queue_state LIMIT 1);") +sqlite_just_exec(database_queue_stop, "UPDATE queue_state SET current = NULL;") +sqlite_just_exec(database_queue_clear, "DELETE FROM queue;" + "DELETE FROM queue_tmp;" + "DELETE FROM sqlite_sequence WHERE name = 'queue_tmp';" + "DELETE FROM sqlite_sequence WHERE name = 'queue';" + "UPDATE queue_state SET current = NULL;") +sqlite_just_exec(database_config_queue_default, "UPDATE queue_state SET volume = 100, paused = 1," + " random = 0, repeat = 0, single = 0, consume = 0," + " current = NULL, duration = 0;") #undef sqlite_just_exec // *INDENT-ON* -- GitLab