diff --git a/inc/lektor/commands.h b/inc/lektor/commands.h index dc3f7b29cee98e561208d79510c067fa8d496509..440d6b10ac1221d4815445c701a0593ad5f05d44 100644 --- a/inc/lektor/commands.h +++ b/inc/lektor/commands.h @@ -51,6 +51,18 @@ bool command_swap (struct lkt_state *srv, char *args[LKT_MESSAGE_ARGS_MAX]); bool command_swapid (struct lkt_state *srv, char *args[LKT_MESSAGE_ARGS_MAX]); bool command_flat (struct lkt_state *srv, char *args[LKT_MESSAGE_ARGS_MAX]); +static inline bool +command_add_1(struct lkt_state *srv, char *args[LKT_MESSAGE_ARGS_MAX]) +{ + return command_add(srv, args, 1); +} + +static inline bool +command_add_5(struct lkt_state *srv, char *args[LKT_MESSAGE_ARGS_MAX]) +{ + return command_add(srv, args, 1); +} + bool command_queue_list (struct lkt_state *srv, size_t c, char *args[LKT_MESSAGE_ARGS_MAX]); bool command_queue_listid(struct lkt_state *srv, size_t c, char *args[LKT_MESSAGE_ARGS_MAX]); diff --git a/src/net/listen.c b/src/net/listen.c index a252d5176d675d3a1ef88cca866608f77d86f66d..14d81d806a3b9fc738c61307d3ad3923a063106b 100644 --- a/src/net/listen.c +++ b/src/net/listen.c @@ -33,6 +33,7 @@ typedef enum { /* Some common types of commands */ LKT_COMMAND_SIMPLE, /* srv, c, args */ LKT_COMMAND_INTEGER, /* srv, c, args, int */ + LKT_COMMAND_ANON, /* srv, args */ /* Some specialized types... */ } LKT_COMMAND_TYPE; @@ -155,6 +156,7 @@ cmd_trie_exec(struct cmd_trie_node *root, const char *signed_cmd_name, va_list * void (*base)(void); bool (*type_simple)(struct lkt_state *, size_t, char *[LKT_MESSAGE_ARGS_MAX]); bool (*type_int)(struct lkt_state *, size_t, char *[LKT_MESSAGE_ARGS_MAX], int); + bool (*type_anon)(struct lkt_state *, char *[LKT_MESSAGE_ARGS_MAX]); } cmd; cmd.base = node->cmd_ptr; @@ -166,6 +168,11 @@ cmd_trie_exec(struct cmd_trie_node *root, const char *signed_cmd_name, va_list * args = (char **)va_arg(*args_list, char *[LKT_MESSAGE_MAX]); return cmd.type_simple(srv, c, args); + case LKT_COMMAND_ANON: + srv = (struct lkt_state *)va_arg(*args_list, struct lkt_state *); + args = (char **)va_arg(*args_list, char *[LKT_MESSAGE_MAX]); + return cmd.type_anon(srv, args); + case LKT_COMMAND_INTEGER: srv = (struct lkt_state *)va_arg(*args_list, struct lkt_state *); c = (size_t)va_arg(*args_list, size_t); @@ -192,8 +199,9 @@ ___cmd_trie_print(struct cmd_trie_node *root, char *old_prefix, const size_t len /* A terminal node */ case LKT_COMMAND_SIMPLE: + case LKT_COMMAND_ANON: case LKT_COMMAND_INTEGER: - LKT_OUTPUT("CMD_TRIE", "Got function in trie: %s (type: %d)", prefix, root->type); + LKT_OUTPUT("CMD_TRIE", "Got function of type %d in trie: %s", root->type, prefix); break; } @@ -218,7 +226,52 @@ ___cmd_trie_init(void) { LOG_INFO("CMD_TRIE", "Init the command trie"); cmd_trie_root = cmd_trie_new(); - cmd_trie_insert(cmd_trie_root, "next", FUNCTION_POINTER(command_next), LKT_COMMAND_SIMPLE); + + // clang-format off + cmd_trie_insert(cmd_trie_root, "currentsong", FUNCTION_POINTER(command_currentsong), LKT_COMMAND_SIMPLE); + cmd_trie_insert(cmd_trie_root, "status", FUNCTION_POINTER(command_status), LKT_COMMAND_SIMPLE); + cmd_trie_insert(cmd_trie_root, "stats", FUNCTION_POINTER(command_stats), LKT_COMMAND_SIMPLE); + + cmd_trie_insert(cmd_trie_root, "next", FUNCTION_POINTER(command_next), LKT_COMMAND_SIMPLE); + cmd_trie_insert(cmd_trie_root, "previous", FUNCTION_POINTER(command_previous), LKT_COMMAND_SIMPLE); + cmd_trie_insert(cmd_trie_root, "pause", FUNCTION_POINTER(command_pause), LKT_COMMAND_SIMPLE); + cmd_trie_insert(cmd_trie_root, "play", FUNCTION_POINTER(command_next), LKT_COMMAND_SIMPLE); + cmd_trie_insert(cmd_trie_root, "playid", FUNCTION_POINTER(command_next), LKT_COMMAND_SIMPLE); + cmd_trie_insert(cmd_trie_root, "stop", FUNCTION_POINTER(command_next), LKT_COMMAND_SIMPLE); + cmd_trie_insert(cmd_trie_root, "seek", FUNCTION_POINTER(command_seek), LKT_COMMAND_SIMPLE); + cmd_trie_insert(cmd_trie_root, "seekid", FUNCTION_POINTER(command_seekid), LKT_COMMAND_SIMPLE); + cmd_trie_insert(cmd_trie_root, "seekcur", FUNCTION_POINTER(command_seekcur), LKT_COMMAND_SIMPLE); + + cmd_trie_insert(cmd_trie_root, "__insert", FUNCTION_POINTER(command_add_5), LKT_COMMAND_ANON); + cmd_trie_insert(cmd_trie_root, "add", FUNCTION_POINTER(command_add_1), LKT_COMMAND_ANON); + cmd_trie_insert(cmd_trie_root, "addid", FUNCTION_POINTER(command_addid), LKT_COMMAND_ANON); + cmd_trie_insert(cmd_trie_root, "del", FUNCTION_POINTER(command_del), LKT_COMMAND_ANON); + cmd_trie_insert(cmd_trie_root, "delid", FUNCTION_POINTER(command_delid), LKT_COMMAND_ANON); + + cmd_trie_insert(cmd_trie_root, "clear", FUNCTION_POINTER(command_clear), LKT_COMMAND_ANON); + cmd_trie_insert(cmd_trie_root, "crop", FUNCTION_POINTER(command_crop), LKT_COMMAND_ANON); + cmd_trie_insert(cmd_trie_root, "move", FUNCTION_POINTER(command_move), LKT_COMMAND_ANON); + cmd_trie_insert(cmd_trie_root, "shuffle", FUNCTION_POINTER(command_shuffle), LKT_COMMAND_ANON); + cmd_trie_insert(cmd_trie_root, "swap", FUNCTION_POINTER(command_swap), LKT_COMMAND_ANON); + cmd_trie_insert(cmd_trie_root, "swapid", FUNCTION_POINTER(command_swapid), LKT_COMMAND_ANON); + cmd_trie_insert(cmd_trie_root, "__flat", FUNCTION_POINTER(command_flat), LKT_COMMAND_ANON); + + cmd_trie_insert(cmd_trie_root, "playlistid", FUNCTION_POINTER(command_queue_listid), LKT_COMMAND_SIMPLE); + cmd_trie_insert(cmd_trie_root, "playlist", FUNCTION_POINTER(command_queue_list), LKT_COMMAND_SIMPLE); + cmd_trie_insert(cmd_trie_root, "playlistinfo", FUNCTION_POINTER(command_queue_list), LKT_COMMAND_SIMPLE); + + cmd_trie_insert(cmd_trie_root, "playlistclear", FUNCTION_POINTER(command_plt_clear), LKT_COMMAND_ANON); + cmd_trie_insert(cmd_trie_root, "rename", FUNCTION_POINTER(command_plt_rename), LKT_COMMAND_ANON); + cmd_trie_insert(cmd_trie_root, "playlistdelete", FUNCTION_POINTER(command_plt_remove), LKT_COMMAND_ANON); + cmd_trie_insert(cmd_trie_root, "rm", FUNCTION_POINTER(command_plt_remove), LKT_COMMAND_ANON); + cmd_trie_insert(cmd_trie_root, "playlistadd", FUNCTION_POINTER(command_plt_add), LKT_COMMAND_ANON); + cmd_trie_insert(cmd_trie_root, "save", FUNCTION_POINTER(command_plt_export), LKT_COMMAND_ANON); + cmd_trie_insert(cmd_trie_root, "__import", FUNCTION_POINTER(command_plt_import), LKT_COMMAND_ANON); + cmd_trie_insert(cmd_trie_root, "__dump", FUNCTION_POINTER(command_dump), LKT_COMMAND_ANON); + cmd_trie_insert(cmd_trie_root, "listplaylists", FUNCTION_POINTER(command_plt_list), LKT_COMMAND_INTEGER); + cmd_trie_insert(cmd_trie_root, "listplaylist", FUNCTION_POINTER(command_plt_ctx), LKT_COMMAND_INTEGER); + // clang-format on + cmd_trie_print(cmd_trie_root); }