diff --git a/src/base/commands.c b/src/base/commands.c index 353573f804b2b2f4a5ee442c7e665c4d383aa5cc..7a6f8c0a88dbded2fd18cd39271f572181cafa8b 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)