From fa1ddc6514eec2d306b2c5679d7e80134ff109c8 Mon Sep 17 00:00:00 2001
From: Kubat <mael.martin31@gmail.com>
Date: Tue, 30 Nov 2021 13:40:13 +0100
Subject: [PATCH] MISC: Reduce the 'if/else' statement number for the idle
 command

---
 src/base/commands.c | 42 +++++++++++++++---------------------------
 1 file changed, 15 insertions(+), 27 deletions(-)

diff --git a/src/base/commands.c b/src/base/commands.c
index 353573f8..7a6f8c0a 100644
--- a/src/base/commands.c
+++ b/src/base/commands.c
@@ -591,34 +591,22 @@ command_idle(struct lkt_state *srv, size_t c, char *args[LKT_MESSAGE_ARGS_MAX])
     bool once;
     size_t i;
 
-#pragma message(TODO "Use a lookup table here...")
     for (once = false, i = 0; args[i]; ++i, once |= true) {
-        if (STR_MATCH(args[i], "database"))
-            lkt_client_add_mask(srv, c, MPD_IDLE_DATABASE);
-        else if (STR_MATCH(args[i], "update"))
-            lkt_client_add_mask(srv, c, MPD_IDLE_UPDATE);
-        else if (STR_MATCH(args[i], "stored_playlist"))
-            lkt_client_add_mask(srv, c, MPD_IDLE_STORED_PLAYLIST);
-        else if (STR_MATCH(args[i], "playlist"))
-            lkt_client_add_mask(srv, c, MPD_IDLE_PLAYLIST);
-        else if (STR_MATCH(args[i], "player"))
-            lkt_client_add_mask(srv, c, MPD_IDLE_PLAYER);
-        else if (STR_MATCH(args[i], "mixer"))
-            lkt_client_add_mask(srv, c, MPD_IDLE_MIXER);
-        else if (STR_MATCH(args[i], "output"))
-            lkt_client_add_mask(srv, c, MPD_IDLE_OUTPUT);
-        else if (STR_MATCH(args[i], "options"))
-            lkt_client_add_mask(srv, c, MPD_IDLE_OPTIONS);
-        else if (STR_MATCH(args[i], "partition"))
-            lkt_client_add_mask(srv, c, MPD_IDLE_PARTITION);
-        else if (STR_MATCH(args[i], "sticker"))
-            lkt_client_add_mask(srv, c, MPD_IDLE_STICKER);
-        else if (STR_MATCH(args[i], "subscription"))
-            lkt_client_add_mask(srv, c, MPD_IDLE_SUBSCRIPTION);
-        else if (STR_MATCH(args[i], "message"))
-            lkt_client_add_mask(srv, c, MPD_IDLE_MESSAGE);
-        else
-            lkt_client_add_mask(srv, c, MPD_IDLE_ALL);
+        MPD_IDLE_FLAG idle_mask =
+            (STR_MATCH(args[i], "database") * MPD_IDLE_DATABASE) +
+            (STR_MATCH(args[i], "update") * MPD_IDLE_UPDATE) +
+            (STR_MATCH(args[i], "stored_playlist") * MPD_IDLE_STORED_PLAYLIST) +
+            (STR_MATCH(args[i], "playlist") * MPD_IDLE_PLAYLIST) +
+            (STR_MATCH(args[i], "player") * MPD_IDLE_PLAYER) +
+            (STR_MATCH(args[i], "mixer") * MPD_IDLE_MIXER) +
+            (STR_MATCH(args[i], "output") * MPD_IDLE_OUTPUT) +
+            (STR_MATCH(args[i], "options") * MPD_IDLE_OPTIONS) +
+            (STR_MATCH(args[i], "partition") * MPD_IDLE_PARTITION) +
+            (STR_MATCH(args[i], "sticker") * MPD_IDLE_STICKER) +
+            (STR_MATCH(args[i], "subscription") * MPD_IDLE_SUBSCRIPTION) +
+            (STR_MATCH(args[i], "message") * MPD_IDLE_MESSAGE);
+        idle_mask = idle_mask + ((unsigned int)(!(bool)(idle_mask)) * MPD_IDLE_ALL);
+        lkt_client_add_mask(srv, c, idle_mask);
     }
 
     if (!once)
-- 
GitLab