From 003717f557892709f51902a59385ec3f316fa0c3 Mon Sep 17 00:00:00 2001
From: Kubat <mael.martin31@gmail.com>
Date: Mon, 14 Sep 2020 11:02:47 +0200
Subject: [PATCH] Execute hooks when needed in commands
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

The queue_end is not used for the moment.
Les hooks sont exécutés que si la commande a réussie.
---
 src/base/commands.c | 32 ++++++++++++++++++++++++++++----
 1 file changed, 28 insertions(+), 4 deletions(-)

diff --git a/src/base/commands.c b/src/base/commands.c
index 4d742a50..c029d911 100644
--- a/src/base/commands.c
+++ b/src/base/commands.c
@@ -161,7 +161,12 @@ command_next(struct lkt_state *srv, char __attribute__((unused)) *args[LKT_MESSA
     char filepath[PATH_MAX];
     if (!database_queue_next(srv->db, filepath))
         return false;
-    return ! MOD_CALL(srv->window_mod, "load", filepath);
+    if (MOD_CALL(srv->window_mod, "load", filepath))
+        return false;
+    else {
+        config_handle_hook(srv->db, "kara_load", 0);
+        return true;
+    }
 }
 
 bool
@@ -180,7 +185,12 @@ command_previous(struct lkt_state *srv, char __attribute__((unused)) *args[LKT_M
     char filepath[PATH_MAX];
     if (!database_queue_prev(srv->db, filepath))
         return false;
-    return ! MOD_CALL(srv->window_mod, "load", filepath);
+    if (MOD_CALL(srv->window_mod, "load", filepath))
+        return false;
+    else {
+        config_handle_hook(srv->db, "kara_load", 0);
+        return true;
+    }
 }
 
 static inline bool
@@ -210,7 +220,14 @@ command_play(struct lkt_state *srv, char __attribute__((unused)) *args[LKT_MESSA
     database_queue_stop(srv->db);
     RETURN_IF(MOD_CALL(srv->window_mod, "new", &srv->queue, srv->db), "Can't create window", false);
     srv->mpd_idle_events |= MPD_IDLE_PLAYER;
-    return __play_that_file(srv, pos);
+
+    /* Hooks */
+    if (__play_that_file(srv, pos)) {
+        config_handle_hook(srv->db, "queue_begin", 0);
+        config_handle_hook(srv->db, "kara_load", 0);
+        return true;
+    } else
+        return false;
 }
 
 bool
@@ -238,7 +255,14 @@ command_playid(struct lkt_state *srv, char *args[LKT_MESSAGE_ARGS_MAX])
     srv->mpd_idle_events |= MPD_IDLE_PLAYER;
     RETURN_IF(MOD_CALL(srv->window_mod, "new", &srv->queue, srv->db), "Can't create window", false);
     database_queue_seekid(srv->db, (int) id, &pos);
-    return __play_that_file(srv, pos);
+
+    /* Hooks */
+    if (__play_that_file(srv, pos)) {
+        config_handle_hook(srv->db, "queue_begin", 0);
+        config_handle_hook(srv->db, "kara_load", 0);
+        return true;
+    } else
+        return false;
 }
 
 
-- 
GitLab