diff --git a/inc/Makefile.am b/inc/Makefile.am index 285fe6069208aa0fb53aa774670ec048dcd65670..05db39c4310193702ca810f17495b18996c2b293 100644 --- a/inc/Makefile.am +++ b/inc/Makefile.am @@ -1,4 +1,3 @@ nobase_include_HEADERS = lektor/cmd.h lektor/commands.h lektor/config.h lektor/database.h nobase_include_HEADERS += lektor/mkv.h lektor/net.h lektor/reg.h lektor/thread.h lektor/uri.h -nobase_include_HEADERS += lektor/bufferfd.h lektor/common.h lektor/macro.h lektor/queue.h -nobase_include_HEADERS += lektor/stack.h +nobase_include_HEADERS += lektor/bufferfd.h lektor/common.h lektor/queue.h lektor/stack.h diff --git a/inc/lektor/cmd.h b/inc/lektor/cmd.h index 406970c0aab81334942de212af6891426103f849..1eb5c0f28e786aec82d17b098d4a5a2291ee22e5 100644 --- a/inc/lektor/cmd.h +++ b/inc/lektor/cmd.h @@ -4,29 +4,30 @@ #include <stdnoreturn.h> #include <stddef.h> -#define LKT_OPT_NULL { .name = NULL, .call = NULL } -#define LKT_OPT_DEFAULT(func) { .name = NULL, .call = func } +#define CMD_OPT_NULL { .name = NULL, .call = NULL } +#define CMD_OPT_DEFAULT(func) { .name = NULL, .call = func } -struct lkt_cmd_args { +struct cmd_args { int argc; /* The number of arguments passed. */ const char **argv; /* An array of argument passed. */ }; -typedef void (*lkt_cmd_callback)(struct lkt_cmd_args *); +typedef void (*cmd_callback)(struct cmd_args *); -struct lkt_cmd_opt { +struct cmd_opt { const char *name; - lkt_cmd_callback call; + cmd_callback call; }; /* Parse the command line with the list of options. No parameter may be NULL. Does not return. */ -noreturn void lkt_cmd_parse(struct lkt_cmd_opt *opts, int argc, const char **argv); +noreturn void cmd_parse(struct cmd_opt *opts, int argc, const char **argv); /* Must be setted for the lkt_cmd_parse function to display the correct help in case of errors. */ extern const char *executable_name; +/* Prints the help and exit */ noreturn void print_help(void); #endif /* __LKT_CMD_H__ */ diff --git a/inc/lektor/commands.h b/inc/lektor/commands.h index 64cc7793b5eec055cb9cbd2d03bbaf11e5761ea8..395d23523372d2b69a6c8dc1cf336fea67a66821 100644 --- a/inc/lektor/commands.h +++ b/inc/lektor/commands.h @@ -15,27 +15,27 @@ */ /* Querying lektor's status */ -bool command_currentsong(struct lkt_state *srv, size_t c); -bool command_status (struct lkt_state *srv, size_t c); +bool command_currentsong(struct lkt_state *srv, size_t c, char *args[LKT_MESSAGE_ARGS_MAX]); +bool command_status (struct lkt_state *srv, size_t c, char *args[LKT_MESSAGE_ARGS_MAX]); /* Controlling playback */ -bool command_next (struct lkt_state *srv); -bool command_pause (struct lkt_state *srv); -bool command_previous(struct lkt_state *srv); +bool command_next (struct lkt_state *srv, char *args[LKT_MESSAGE_ARGS_MAX]); +bool command_pause (struct lkt_state *srv, char *args[LKT_MESSAGE_ARGS_MAX]); +bool command_previous(struct lkt_state *srv, char *args[LKT_MESSAGE_ARGS_MAX]); bool command_play (struct lkt_state *srv, char *args[LKT_MESSAGE_ARGS_MAX]); -bool command_stop (struct lkt_state *srv); +bool command_playid (struct lkt_state *srv, char *args[LKT_MESSAGE_ARGS_MAX]); +bool command_stop (struct lkt_state *srv, char *args[LKT_MESSAGE_ARGS_MAX]); -bool command_set_pos(struct lkt_state *srv, int index); +bool command_set_pos(struct lkt_state *srv, int index); /* FIXME: Not used in net/listen.c */ /* The queue */ bool command_add (struct lkt_state *srv, char *args[LKT_MESSAGE_ARGS_MAX], int priority); bool command_addid (struct lkt_state *srv, char *args[LKT_MESSAGE_ARGS_MAX]); -bool command_delid (struct lkt_state *srv, char *id); -bool command_clear (struct lkt_state *srv); -bool command_crop (struct lkt_state *srv); +bool command_delid (struct lkt_state *srv, char *args[LKT_MESSAGE_ARGS_MAX]); +bool command_clear (struct lkt_state *srv, char *args[LKT_MESSAGE_ARGS_MAX]); +bool command_crop (struct lkt_state *srv, char *args[LKT_MESSAGE_ARGS_MAX]); bool command_move (struct lkt_state *srv, char *args[LKT_MESSAGE_ARGS_MAX]); -bool command_shuffle(struct lkt_state *srv); -bool command_playid (struct lkt_state *srv, char *args[LKT_MESSAGE_ARGS_MAX]); +bool command_shuffle(struct lkt_state *srv, char *args[LKT_MESSAGE_ARGS_MAX]); bool command_dump (struct lkt_state *srv, char *args[LKT_MESSAGE_ARGS_MAX]); bool command_queue_list(struct lkt_state *srv, size_t c, char *args[LKT_MESSAGE_ARGS_MAX]); @@ -48,11 +48,11 @@ bool command_plt_rename(struct lkt_state *srv, char *args[LKT_MESSAGE_ARGS_MAX]) bool command_plt_export(struct lkt_state *srv, char *args[LKT_MESSAGE_ARGS_MAX]); bool command_plt_import(struct lkt_state *srv, char *args[LKT_MESSAGE_ARGS_MAX]); bool command_plt_add (struct lkt_state *srv, char *args[LKT_MESSAGE_ARGS_MAX]); -bool command_plt_list (struct lkt_state *srv, size_t c, long cont); -bool command_plt_ctx (struct lkt_state *srv, size_t c, char *args[LKT_MESSAGE_ARGS_MAX], long cont); +bool command_plt_list (struct lkt_state *srv, size_t c, char *args[LKT_MESSAGE_ARGS_MAX], int cont); +bool command_plt_ctx (struct lkt_state *srv, size_t c, char *args[LKT_MESSAGE_ARGS_MAX], int cont); /* The help */ -bool command_help(struct lkt_state *srv, size_t c); +bool command_help(struct lkt_state *srv, size_t c, char *args[LKT_MESSAGE_ARGS_MAX]); /* Respond to the idle command */ bool command_idle(struct lkt_state *srv, size_t c, struct lkt_command *cmd); @@ -77,14 +77,14 @@ enum lkt_playback_option { bool command_set_playback_option(struct lkt_state *srv, size_t c, enum lkt_playback_option opt, char *args[LKT_MESSAGE_ARGS_MAX]); /* Authentificate users */ -bool command_password(struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARGS_MAX]); -bool command_user_add(struct lkt_state *srv, size_t c, volatile sqlite3 *db, char *argv[LKT_MESSAGE_ARGS_MAX]); +bool command_password(struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARGS_MAX]); +bool command_user_add(struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARGS_MAX]); /* Program management control */ -bool command_restart(struct lkt_state *srv, size_t c); -bool command_kill (struct lkt_state *srv, size_t c); +bool command_restart(struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARGS_MAX]); +bool command_kill (struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARGS_MAX]); bool command_update (struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARGS_MAX]); -bool command_rescan (struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARGS_MAX], bool forced); +bool command_rescan (struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARGS_MAX], int forced); /* Sticker management */ bool command_sticker_create(struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARGS_MAX]); diff --git a/inc/lektor/common.h b/inc/lektor/common.h index fd0cf4f2e77950ffc900e665a35cac38f1e94b99..53d1729f0f7dbebd6ff269cde58bf99044402816 100644 --- a/inc/lektor/common.h +++ b/inc/lektor/common.h @@ -1,9 +1,173 @@ #if ! defined(__LKT_COMMON_H__) #define __LKT_COMMON_H__ -#include <lektor/macro.h> #include <unistd.h> #include <stdint.h> +#include <stdlib.h> + +/* Max value for any buffer, to not squash the stack. */ +#define BUFFER_MAX 4096 + +#ifndef __GNUC__ +#define inline +#endif + +#ifndef MAX +#define MAX(a, b) ((a) < (b) ? (b) : (a)) +#endif /* MAX */ + +#ifndef MIN +#define MIN(a, b) ((a) > (b) ? (b) : (a)) +#endif /* MIN */ + +#define RETURN_IF(cond, msg, ret) \ + if (cond) { \ + LOG_DEBUG("DEBUG", "%s", msg); \ + return ret; \ + } +#define GOTO_IF(cond, msg, label) \ + if (cond) { \ + LOG_DEBUG("DEBUG", "%s", msg); \ + goto label; \ + } + +#define GOTO_UNLESS(cond, msg, label) GOTO_IF(!(cond), msg, label) +#define RETURN_UNLESS(cond, msg, ret) RETURN_IF(!(cond), msg, ret) +#define NOTHING /* Usefull to return nothing in previous macros */ + +#define STRTOL(ret, str, endptr, err_flag) \ +{ \ + err_flag = 0; \ + errno = 0; \ + ret = str == NULL ? 0 : strtol(str, &(endptr), 0); \ + err_flag = errno != 0 || endptr == str; \ +} + +extern int log_level; +enum log_level { + ERROR = 1, + WARN = 2, + INFO = 3, + DEBUG = 4, +}; + +void __lkt_log(enum log_level, const char *section, const char *func, const char *format, ...); +#define LOG_INFO( section, ...) __lkt_log(INFO, section, __func__, __VA_ARGS__) +#define LOG_WARN( section, ...) __lkt_log(WARN, section, __func__, __VA_ARGS__) +#define LOG_ERROR(section, ...) __lkt_log(ERROR, section, __func__, __VA_ARGS__) +#define LOG_DEBUG(section, ...) __lkt_log(DEBUG, section, __func__, __VA_ARGS__) + +#define SELF_EXECUTABLE_LINUX "/proc/self/exe" +#define SELF_EXECUTABLE_FREEBSD "/proc/curproc/file" +#define SELF_EXECUTABLE_SOLARIS "/proc/self/path/a.out" + +#define LKT_ENV_RESTART "__LKT_RESTART" +#define LKT_ENV_CURRENT "__LKT_CURRENT" + +#define LKT_LINE_MAX 1024 +#define LKT_MAX_SQLITE_STATEMENT 1024 +#define LKT_PROTECTED_DATABASE "disk" + +#define LKT_DB_ID "id" +#define LKT_DB_NAME "source_name" +#define LKT_DB_TITLE "song_title" +#define LKT_DB_CAT "category" +#define LKT_DB_TYPE "song_type" +#define LKT_DB_AUTHOR "author_name" +#define LKT_DB_LANG "language" +#define LKT_DB_ALL "string" + +#define LEKTOR_TAG_MAX 256 +#define LKT_MESSAGE_ARGS_MAX 32 +#define LKT_MESSAGE_MAX 2048 +#define LKT_DEFAULT_LIST_SIZE 10 + +typedef volatile enum { + MPD_IDLE_NONE = 0, + + MPD_IDLE_DATABASE = ( 1 << 1 ), + MPD_IDLE_UPDATE = ( 1 << 2 ), + MPD_IDLE_STORED_PLAYLIST = ( 1 << 3 ), + MPD_IDLE_PLAYLIST = ( 1 << 4 ), + MPD_IDLE_PLAYER = ( 1 << 5 ), + MPD_IDLE_MIXER = ( 1 << 6 ), + MPD_IDLE_OUTPUT = ( 1 << 7 ), + MPD_IDLE_OPTIONS = ( 1 << 8 ), + MPD_IDLE_PARTITION = ( 1 << 9 ), + MPD_IDLE_STICKER = ( 1 << 10 ), + MPD_IDLE_SUBSCRIPTION = ( 1 << 11 ), + MPD_IDLE_MESSAGE = ( 1 << 12 ), + + MPD_IDLE_ALL = + MPD_IDLE_DATABASE | MPD_IDLE_UPDATE | MPD_IDLE_STORED_PLAYLIST | + MPD_IDLE_PLAYLIST | MPD_IDLE_PLAYER | MPD_IDLE_MIXER | + MPD_IDLE_OUTPUT | MPD_IDLE_OPTIONS | MPD_IDLE_PARTITION | + MPD_IDLE_STICKER | MPD_IDLE_SUBSCRIPTION | MPD_IDLE_MESSAGE, +} mpd_idle_flag; + +#define LKT_BACKLOG 32 +#define COMMAND_LIST_MAX 64 +#define BUFFER_OUT_MAX 16 +#define MPD_VERSION "0.21.16" + +#define SQLITE_PREPARE(db, stmt, SQL, goto_label) \ + if (sqlite3_prepare_v2((sqlite3 *) db, SQL, -1, &(stmt), 0) != SQLITE_OK) { \ + LOG_ERROR("DB", "Failed to prepare statement: %s", \ + sqlite3_errmsg((sqlite3 *) db)); \ + goto goto_label; \ + } + +#define SQLITE_EXEC(db, SQL, goto_label) \ + if (sqlite3_exec((sqlite3 *) db, SQL, NULL, NULL, NULL) != SQLITE_OK) { \ + LOG_ERROR("DB", "Failed to exec statement: %s", \ + sqlite3_errmsg((sqlite3 *) db)); \ + goto goto_label; \ + } + +#define SQLITE_BIND_TEXT(db, stmt, pos, text, error) { \ + if (sqlite3_bind_text(stmt, pos, text, -1, 0) != SQLITE_OK) { \ + LOG_ERROR("DB", "Failed to bind text %s at pos %d: %s", \ + (const char *) text, pos, \ + sqlite3_errmsg((sqlite3 *) db)); \ + goto error; \ + }} + +#define SQLITE_BIND_INT(db, stmt, pos, integer, error) { \ + if (sqlite3_bind_int(stmt, pos, integer) != SQLITE_OK) { \ + LOG_ERROR("DB", "Failed to bind int %d at pos %d: %s", \ + integer, pos, sqlite3_errmsg((sqlite3 *) db)); \ + goto error; \ + }} + +#define SQLITE_STEP(db, stmt, code, error) \ + if (sqlite3_step(stmt) != code) { \ + LOG_ERROR("DB", "Failed to step: %s", \ + sqlite3_errmsg((sqlite3 *) db)); \ + goto error; \ + } + +#define SQLITE_STEP_ROW(db, stmt, error) SQLITE_STEP(db, stmt, SQLITE_ROW, error) +#define SQLITE_STEP_DONE(db, stmt, error) SQLITE_STEP(db, stmt, SQLITE_DONE, error) + +#define SQLITE_DO_ROLLBACK(db) \ + sqlite3_exec((sqlite3 *) db, "ROLLBACK TRANSACTION;\n", NULL, NULL, NULL); + +#define STR_MATCH(str1, str2) (! strcasecmp(str1, str2)) +#define STR_NMATCH(str1, str2, n) (! strncasecmp(str1, str2, n)) + +#define sqlite3_column_chars (const char *) sqlite3_column_text + +#define GET_VA_COUNT(...) PP_NARG_(__VA_ARGS__,PP_RSEQ_N()) +#define PP_NARG_(...) PP_ARG_N(__VA_ARGS__) +#define PP_ARG_N( _1, _2, _3, _4, _5, _6, _7, _8, _9,_10,_11,_12,_13,_14, \ + _15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28, \ + _29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40,_41,_42, \ + _43,_44,_45,_46,_47,_48,_49,_50,_51,_52,_53,_54,_55,_56, \ + _57,_58,_59,_60,_61,_62,_63,N,...) N +#define PP_RSEQ_N() 63,62,61,60,59,58,57,56,55,54,53,52,51,50,49,48,47,46,45, \ + 44,43,42,41,40,39,38,37,36,35,34,33,32,31,30,29,28,27,26, \ + 25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5, \ + 4,3,2,1,0 #define not_implemented() __not_implemented(__func__,__FILE__,__LINE__) extern void __not_implemented(const char *func, char *file, int line); diff --git a/inc/lektor/macro.h b/inc/lektor/macro.h deleted file mode 100644 index 6340969fcd4133be64bcce60b4895a26069c2e2b..0000000000000000000000000000000000000000 --- a/inc/lektor/macro.h +++ /dev/null @@ -1,186 +0,0 @@ -#if ! defined(__LKT_MACRO_H__) -#define __LKT_MACRO_H__ - -#include <stdint.h> -#include <stdlib.h> - -/* Max value for any buffer, to not squash the stack. */ -#define BUFFER_MAX 4096 - -#ifndef __GNUC__ -#define inline -#endif - -/* Macros */ - -#ifndef MAX -#define MAX(a, b) ((a) < (b) ? (b) : (a)) -#endif /* MAX */ - -#ifndef MIN -#define MIN(a, b) ((a) > (b) ? (b) : (a)) -#endif /* MIN */ - -#define RETURN_IF(cond, msg, ret) \ - if (cond) { \ - LOG_DEBUG("DEBUG", "%s", msg); \ - return ret; \ - } -#define GOTO_IF(cond, msg, label) \ - if (cond) { \ - LOG_DEBUG("DEBUG", "%s", msg); \ - goto label; \ - } - -#define GOTO_UNLESS(cond, msg, label) GOTO_IF(!(cond), msg, label) -#define RETURN_UNLESS(cond, msg, ret) RETURN_IF(!(cond), msg, ret) -#define NOTHING /* Usefull to return nothing. */ - -#define STRTOL(ret, str, endptr, err_flag) \ -{ \ - err_flag = 0; \ - errno = 0; \ - ret = str == NULL ? 0 : strtol(str, &(endptr), 0); \ - err_flag = errno != 0 || endptr == str; \ -} - -extern int log_level; -enum log_level { - ERROR = 1, - WARN = 2, - INFO = 3, - DEBUG = 4, -}; - -void __lkt_log(enum log_level, const char *section, const char *func, const char *format, ...); -#define LOG_INFO( section, ...) __lkt_log(INFO, section, __func__, __VA_ARGS__) -#define LOG_WARN( section, ...) __lkt_log(WARN, section, __func__, __VA_ARGS__) -#define LOG_ERROR(section, ...) __lkt_log(ERROR, section, __func__, __VA_ARGS__) -#define LOG_DEBUG(section, ...) __lkt_log(DEBUG, section, __func__, __VA_ARGS__) - -/* Defines for lektor */ - -#define INI_MAX_LINE_LEN 512 -#define INI_MAX_SECTION_LEN 80 - -#define URL_MAX_LEN 1024 - -#define SELF_EXECUTABLE_LINUX "/proc/self/exe" -#define SELF_EXECUTABLE_FREEBSD "/proc/curproc/file" -#define SELF_EXECUTABLE_SOLARIS "/proc/self/path/a.out" - -#define LKT_ENV_RESTART "__LKT_RESTART" -#define LKT_ENV_CURRENT "__LKT_CURRENT" - -#define LKT_MAX_SQLITE_STATEMENT 1024 -#define PROTECTED_DATABASE "disk" - -#define LKT_DB_ID "id" -#define LKT_DB_NAME "source_name" -#define LKT_DB_TITLE "song_title" -#define LKT_DB_CAT "category" -#define LKT_DB_TYPE "song_type" -#define LKT_DB_AUTHOR "author_name" -#define LKT_DB_LANG "language" -#define LKT_DB_ALL "string" - -#define LEKTOR_TAG_MAX 256 -#define LKT_MESSAGE_ARGS_MAX 32 -#define LKT_MESSAGE_MAX 2048 -#define LKT_DEFAULT_LIST_SIZE 10 - -typedef volatile enum { - MPD_IDLE_NONE = 0, - - MPD_IDLE_DATABASE = ( 1 << 1 ), - MPD_IDLE_UPDATE = ( 1 << 2 ), - MPD_IDLE_STORED_PLAYLIST = ( 1 << 3 ), - MPD_IDLE_PLAYLIST = ( 1 << 4 ), - MPD_IDLE_PLAYER = ( 1 << 5 ), - MPD_IDLE_MIXER = ( 1 << 6 ), - MPD_IDLE_OUTPUT = ( 1 << 7 ), - MPD_IDLE_OPTIONS = ( 1 << 8 ), - MPD_IDLE_PARTITION = ( 1 << 9 ), - MPD_IDLE_STICKER = ( 1 << 10 ), - MPD_IDLE_SUBSCRIPTION = ( 1 << 11 ), - MPD_IDLE_MESSAGE = ( 1 << 12 ), - - MPD_IDLE_ALL = - MPD_IDLE_DATABASE | MPD_IDLE_UPDATE | MPD_IDLE_STORED_PLAYLIST | - MPD_IDLE_PLAYLIST | MPD_IDLE_PLAYER | MPD_IDLE_MIXER | - MPD_IDLE_OUTPUT | MPD_IDLE_OPTIONS | MPD_IDLE_PARTITION | - MPD_IDLE_STICKER | MPD_IDLE_SUBSCRIPTION | MPD_IDLE_MESSAGE, -} mpd_idle_flag; - -#define LKT_BACKLOG 32 -#define COMMAND_LIST_MAX 64 -#define BUFFER_OUT_MAX 16 -#define MPD_VERSION "0.21.16" - -/* Macros */ - -#define SQLITE_PREPARE(db, stmt, SQL, goto_label) \ - if (sqlite3_prepare_v2((sqlite3 *) db, SQL, -1, &(stmt), 0) != SQLITE_OK) { \ - LOG_ERROR("DB", "Failed to prepare statement: %s", \ - sqlite3_errmsg((sqlite3 *) db)); \ - goto goto_label; \ - } - -#define SQLITE_EXEC(db, SQL, goto_label) \ - if (sqlite3_exec((sqlite3 *) db, SQL, NULL, NULL, NULL) != SQLITE_OK) { \ - LOG_ERROR("DB", "Failed to exec statement: %s", \ - sqlite3_errmsg((sqlite3 *) db)); \ - goto goto_label; \ - } - -#define SQLITE_BIND_TEXT(db, stmt, pos, text, error) { \ - if (sqlite3_bind_text(stmt, pos, text, -1, 0) != SQLITE_OK) { \ - LOG_ERROR("DB", "Failed to bind text %s at pos %d: %s", \ - (const char *) text, pos, \ - sqlite3_errmsg((sqlite3 *) db)); \ - goto error; \ - }} - -#define SQLITE_BIND_INT(db, stmt, pos, integer, error) { \ - if (sqlite3_bind_int(stmt, pos, integer) != SQLITE_OK) { \ - LOG_ERROR("DB", "Failed to bind int %d at pos %d: %s", \ - integer, pos, sqlite3_errmsg((sqlite3 *) db));\ - goto error; \ - }} - -#define SQLITE_STEP(db, stmt, code, error) \ - if (sqlite3_step(stmt) != code) { \ - LOG_ERROR("DB", "Failed to step: %s", \ - sqlite3_errmsg((sqlite3 *) db)); \ - goto error; \ - } - -#define SQLITE_STEP_ROW(db, stmt, error) SQLITE_STEP(db, stmt, SQLITE_ROW, error) -#define SQLITE_STEP_DONE(db, stmt, error) SQLITE_STEP(db, stmt, SQLITE_DONE, error) - -#define SQLITE_DO_ROLLBACK(db) \ - sqlite3_exec((sqlite3 *) db, "ROLLBACK TRANSACTION;\n", NULL, NULL, NULL); - -#define STR_MATCH(str1, str2) (! strcasecmp(str1, str2)) -#define STR_NMATCH(str1, str2, n) (! strncasecmp(str1, str2, n)) - -#define sqlite3_column_chars (const char *) sqlite3_column_text - -#define GET_VA_COUNT(...) PP_NARG_(__VA_ARGS__,PP_RSEQ_N()) -#define PP_NARG_(...) PP_ARG_N(__VA_ARGS__) -#define PP_ARG_N( _1, _2, _3, _4, _5, _6, _7, _8, _9,_10, \ - _11,_12,_13,_14,_15,_16,_17,_18,_19,_20, \ - _21,_22,_23,_24,_25,_26,_27,_28,_29,_30, \ - _31,_32,_33,_34,_35,_36,_37,_38,_39,_40, \ - _41,_42,_43,_44,_45,_46,_47,_48,_49,_50, \ - _51,_52,_53,_54,_55,_56,_57,_58,_59,_60, \ - _61,_62,_63,N,...) N -#define PP_RSEQ_N() 63,62,61,60, \ - 59,58,57,56,55,54,53,52,51,50, \ - 49,48,47,46,45,44,43,42,41,40, \ - 39,38,37,36,35,34,33,32,31,30, \ - 29,28,27,26,25,24,23,22,21,20, \ - 19,18,17,16,15,14,13,12,11,10, \ - 9,8,7,6,5,4,3,2,1,0 - -#endif /* __LKT_MACRO_H__ */ diff --git a/inc/lektor/queue.h b/inc/lektor/queue.h index 194110bd5e852a8445364528b3cbd5a7ffda05ad..326e3324a119de3277ac27e54cab3c598c50c6b8 100644 --- a/inc/lektor/queue.h +++ b/inc/lektor/queue.h @@ -5,16 +5,16 @@ #include <lektor/common.h> enum { - _LKT_PLAY_STOP = 0, - _LKT_PLAY_PLAY = 1, - _LKT_PLAY_PAUSE = 2, - _LKT_PLAY_TOGGLE = 3, + __LKT_PLAY_STOP = 0, + __LKT_PLAY_PLAY = 1, + __LKT_PLAY_PAUSE = 2, + __LKT_PLAY_TOGGLE = 3, }; -#define LKT_PLAY_STOP ((void *) (size_t) _LKT_PLAY_STOP) -#define LKT_PLAY_PLAY ((void *) (size_t) _LKT_PLAY_PLAY) -#define LKT_PLAY_PAUSE ((void *) (size_t) _LKT_PLAY_PAUSE) -#define LKT_PLAY_TOGGLE ((void *) (size_t) _LKT_PLAY_TOGGLE) +#define LKT_PLAY_STOP ((void *) (size_t) __LKT_PLAY_STOP) +#define LKT_PLAY_PLAY ((void *) (size_t) __LKT_PLAY_PLAY) +#define LKT_PLAY_PAUSE ((void *) (size_t) __LKT_PLAY_PAUSE) +#define LKT_PLAY_TOGGLE ((void *) (size_t) __LKT_PLAY_TOGGLE) enum lkt_event_type { lkt_event_null = 0, // NULL @@ -29,13 +29,11 @@ enum lkt_event_type { lkt_event_skip_current = (1 << 9), // NULL }; -#define lkt_event_play ( lkt_event_play_pos | lkt_event_play_file | \ - lkt_event_play_next | lkt_event_play_prev | \ - lkt_event_play_toggle | lkt_event_skip_current \ - ) -#define lkt_event_prop ( lkt_event_prop_vol | lkt_event_prop_dur | \ - lkt_event_prop_time \ - ) +#define lkt_event_play ( lkt_event_play_pos | lkt_event_play_file \ + | lkt_event_play_next | lkt_event_play_prev \ + | lkt_event_play_toggle | lkt_event_skip_current ) +#define lkt_event_prop ( lkt_event_prop_vol | lkt_event_prop_dur \ + | lkt_event_prop_time ) typedef struct { unsigned int type; diff --git a/src/base/commands.c b/src/base/commands.c index ee0e36b370715f7f3e661b5c631731f6ff6b7a2e..f17b0453a0a9b6d6945753755e080c9d5f2d532e 100644 --- a/src/base/commands.c +++ b/src/base/commands.c @@ -19,7 +19,8 @@ #include <unistd.h> inline bool -command_restart(struct lkt_state *srv, size_t c) +command_restart(struct lkt_state *srv, size_t c, + char __attribute__((unused)) *argv[LKT_MESSAGE_ARGS_MAX]) { const char *const argv[] = { executable_name, NULL }; struct lkt_queue_state sta = {0}; @@ -71,7 +72,7 @@ __rescan(void *arg) } bool -command_rescan(struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARGS_MAX], bool forced) +command_rescan(struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARGS_MAX], int forced) { UNUSED(argv); RETURN_UNLESS(lkt_client_auth(srv, c, false), "Failed to authentificate user", false); @@ -88,7 +89,8 @@ command_rescan(struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARGS_MAX] } inline bool -command_kill(struct lkt_state *srv, size_t c) +command_kill(struct lkt_state *srv, size_t c, + char __attribute__((unused)) *argv[LKT_MESSAGE_ARGS_MAX]) { RETURN_UNLESS(lkt_client_auth(srv, c, false), "Failed to authentificate user", false); LOG_INFO("GENERAL", "Stopping lektord"); @@ -99,7 +101,8 @@ command_kill(struct lkt_state *srv, size_t c) } bool -command_currentsong(struct lkt_state *srv, size_t c) +command_currentsong(struct lkt_state *srv, size_t c, + char __attribute__((unused)) *args[LKT_MESSAGE_ARGS_MAX]) { struct lkt_message *out; struct kara_metadata kara; @@ -127,7 +130,8 @@ command_currentsong(struct lkt_state *srv, size_t c) } bool -command_status(struct lkt_state *srv, size_t c) +command_status(struct lkt_state *srv, size_t c, + char __attribute__((unused)) *args[LKT_MESSAGE_ARGS_MAX]) { struct lkt_message *out; struct lkt_queue_state queue_state; @@ -165,7 +169,7 @@ command_status(struct lkt_state *srv, size_t c) } bool -command_next(struct lkt_state *srv) +command_next(struct lkt_state *srv, char __attribute__((unused)) *args[LKT_MESSAGE_ARGS_MAX]) { srv->mpd_idle_events |= MPD_IDLE_PLAYER; char filepath[PATH_MAX]; @@ -175,7 +179,7 @@ command_next(struct lkt_state *srv) } bool -command_pause(struct lkt_state *srv) +command_pause(struct lkt_state *srv, char __attribute__((unused)) *args[LKT_MESSAGE_ARGS_MAX]) { srv->mpd_idle_events |= MPD_IDLE_PLAYER; if (!database_queue_toggle_pause(srv->db)) @@ -184,7 +188,7 @@ command_pause(struct lkt_state *srv) } bool -command_previous(struct lkt_state *srv) +command_previous(struct lkt_state *srv, char __attribute__((unused)) *args[LKT_MESSAGE_ARGS_MAX]) { srv->mpd_idle_events |= MPD_IDLE_PLAYER; char filepath[PATH_MAX]; @@ -205,7 +209,7 @@ __play_that_file(struct lkt_state *win, int pos) } bool -command_play(struct lkt_state *srv, char *args[LKT_MESSAGE_ARGS_MAX]) +command_play(struct lkt_state *srv, char __attribute__((unused)) *args[LKT_MESSAGE_ARGS_MAX]) { char *endptr, err; long pos = 1; @@ -255,7 +259,7 @@ command_playid(struct lkt_state *srv, char *args[LKT_MESSAGE_ARGS_MAX]) bool -command_stop(struct lkt_state *srv) +command_stop(struct lkt_state *srv, char __attribute__((unused)) *args[LKT_MESSAGE_ARGS_MAX]) { RETURN_UNLESS(database_queue_stop(srv->db), "DB error", false); MOD_CALL(srv->window_mod, "close", 1); @@ -292,27 +296,28 @@ command_addid(struct lkt_state *srv, char *args[LKT_MESSAGE_ARGS_MAX]) } inline bool -command_clear(struct lkt_state *srv) +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); } inline bool -command_crop(struct lkt_state *srv) +command_crop(struct lkt_state *srv, char __attribute__((unused)) *args[LKT_MESSAGE_ARGS_MAX]) { srv->mpd_idle_events |= MPD_IDLE_PLAYER; return database_queue_crop(srv->db); } bool -command_delid(struct lkt_state *srv, char *id_str) +command_delid(struct lkt_state *srv, char *args[LKT_MESSAGE_ARGS_MAX]) { long id; char *endptr = NULL, err = 0, filepath[PATH_MAX]; int uri = 0; - STRTOL(id, id_str, endptr, err); + RETURN_UNLESS(args[0], "No id provided", false); + STRTOL(id, args[0], endptr, err); RETURN_IF(err, "STRTOL failed", false); database_queue_current_kara(srv->db, NULL, &uri); @@ -356,7 +361,7 @@ command_move(struct lkt_state *srv, char *args[LKT_MESSAGE_ARGS_MAX]) } bool -command_help(struct lkt_state *srv, size_t c) +command_help(struct lkt_state *srv, size_t c, , char __attribute__((unused)) *args[LKT_MESSAGE_ARGS_MAX]) { struct lkt_message *out; out = lkt_message_new(); @@ -533,7 +538,9 @@ command_find(struct lkt_state *srv, size_t c, char *args[LKT_MESSAGE_ARGS_MAX], } bool -command_plt_list(struct lkt_state *srv, size_t c, long cont) +command_plt_list(struct lkt_state *srv, size_t c, + char __attribute__((unused)) *args[LKT_MESSAGE_ARGS_MAX], + int cont) { struct lkt_search search = { .srv = srv, @@ -547,7 +554,8 @@ command_plt_list(struct lkt_state *srv, size_t c, long cont) return __iter_search(&search); } -bool command_plt_ctx(struct lkt_state *srv, size_t c, char *args[LKT_MESSAGE_ARGS_MAX], long cont) +bool command_plt_ctx(struct lkt_state *srv, size_t c, + char *args[LKT_MESSAGE_ARGS_MAX], int cont) { struct lkt_search search = { .srv = srv, @@ -732,7 +740,7 @@ command_plt_add_uri(struct lkt_state *srv, char *args[LKT_MESSAGE_ARGS_MAX]) } bool -command_shuffle(struct lkt_state *srv) +command_shuffle(struct lkt_state *srv, char __attribute__((unused)) *args[LKT_MESSAGE_ARGS_MAX]) { RETURN_UNLESS(database_queue_shuffle(srv->db), "Failed to shuffle", false); srv->mpd_idle_events |= MPD_IDLE_PLAYER; @@ -811,11 +819,11 @@ command_password(struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARGS_MA } bool -command_user_add(struct lkt_state *srv, size_t c, volatile sqlite3 *db, char *argv[LKT_MESSAGE_ARGS_MAX]) +command_user_add(struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARGS_MAX]) { RETURN_UNLESS(argv[0] && argv[1], "Invalid argument", false); RETURN_UNLESS(lkt_client_auth(srv, c, false), "Failed to authentificate user", false); - RETURN_UNLESS(database_user_add(db, argv[0], argv[1]), "Failed to add user", false); + RETURN_UNLESS(database_user_add(srv->db, argv[0], argv[1]), "Failed to add user", false); return false; } diff --git a/src/database/open.c b/src/database/open.c index 47f9a0de808de4032b90b30c4242dc713d36495b..41a33ac9610a9082f3fa0a5ca7a16dad7d6b742f 100644 --- a/src/database/open.c +++ b/src/database/open.c @@ -199,11 +199,11 @@ database_open(volatile sqlite3 *db, const char *dbpath, bool check) /* Try the simple attach, for already initialized database */ retry: - if (!__attach(db, PROTECTED_DATABASE, dbpath)) + if (!__attach(db, LKT_PROTECTED_DATABASE, dbpath)) goto init; if (!__check_schema(db)) goto init; - __inc(db, PROTECTED_DATABASE, check); + __inc(db, LKT_PROTECTED_DATABASE, check); return true; /* Need init */ @@ -216,7 +216,7 @@ init: retry = true; LOG_WARN("DB", "Database '%s' is not correctly initialized, init it", dbpath); - __detach(db, PROTECTED_DATABASE) ; + __detach(db, LKT_PROTECTED_DATABASE) ; if (database_init(dbpath)) goto retry; else { @@ -228,8 +228,8 @@ init: bool database_attach(volatile sqlite3 *db, const char *name, const char *dbpath) { - RETURN_UNLESS(strcasecmp(PROTECTED_DATABASE, name), " The database " - PROTECTED_DATABASE " is protected, can't attach a " + RETURN_UNLESS(strcasecmp(LKT_PROTECTED_DATABASE, name), " The database " + LKT_PROTECTED_DATABASE " is protected, can't attach a " "database with the same name", false); if (is_sql_str_invalid(name)) { @@ -255,8 +255,8 @@ database_attach(volatile sqlite3 *db, const char *name, const char *dbpath) bool database_detach(volatile sqlite3 *db, const char *name) { - RETURN_UNLESS(strcasecmp(PROTECTED_DATABASE, name), " The database " - PROTECTED_DATABASE " is protected, can't detach it", false); + RETURN_UNLESS(strcasecmp(LKT_PROTECTED_DATABASE, name), " The database " + LKT_PROTECTED_DATABASE " is protected, can't detach it", false); if (is_sql_str_invalid(name)) { LOG_ERROR("DB", "The database name '%s' is invalid", name); diff --git a/src/main/lkt.c b/src/main/lkt.c index 58e4e771db8b97f657c2ca28220deb2dc353a917..6a4d1319c0006c5784adc45c9e7b463e61958c3c 100644 --- a/src/main/lkt.c +++ b/src/main/lkt.c @@ -171,22 +171,22 @@ send_cmd_with_uri(FILE *sock, char *cmd, int argc, const char **argv) /* Functions implementing options. */ #define just_send_one_arg(func, cmd) \ -noreturn void func (struct lkt_cmd_args *args) { \ +noreturn void func (struct cmd_args *args) { \ fail_if(args->argc != 1, "Invalid argument"); \ FILE *sock = lkt_connect(); \ char buff[2]; \ write_socket(sock, cmd " %s\n", args->argv[0]); \ exit_with_status(sock, buff); \ } -just_send_one_arg(stickers_create__, "sticker __create") +just_send_one_arg(stickers_create__, "sticker __create") just_send_one_arg(stickers_destroy__, "sticker __destroy") -just_send_one_arg(plt_destroy__, "rm") -just_send_one_arg(plt_create__, "playlistadd") -just_send_one_arg(queue_dump__, "__dump") +just_send_one_arg(plt_destroy__, "rm") +just_send_one_arg(plt_create__, "playlistadd") +just_send_one_arg(queue_dump__, "__dump") #undef just_send_one_arg #define just_send(func, msg) /* Just send a simple string functions */ \ - noreturn void func (struct lkt_cmd_args *args) { \ + noreturn void func (struct cmd_args *args) { \ fail_if(args->argc, "This command takes no arguments"); \ lkt_send_and_exit(msg, sizeof(msg)); \ } @@ -212,7 +212,7 @@ simple_send_with_password__(const char *cmd) } noreturn void -restart__(struct lkt_cmd_args *args) +restart__(struct cmd_args *args) { if (args->argc != 0) fail("Invalid argument, the previous command takes no arguments"); @@ -220,7 +220,7 @@ restart__(struct lkt_cmd_args *args) } noreturn void -kill__(struct lkt_cmd_args *args) +kill__(struct cmd_args *args) { if (args->argc != 0) fail("Invalid argument, the previous command takes no arguments"); @@ -228,7 +228,7 @@ kill__(struct lkt_cmd_args *args) } noreturn void -rescan_or_update__(struct lkt_cmd_args *args, const char *cmd) +rescan_or_update__(struct cmd_args *args, const char *cmd) { if (!password) fail("Password not provided"); @@ -259,25 +259,25 @@ rescan_or_update__(struct lkt_cmd_args *args, const char *cmd) } noreturn void -rescan__(struct lkt_cmd_args *args) +rescan__(struct cmd_args *args) { rescan_or_update__(args, "rescan"); } noreturn void -update__(struct lkt_cmd_args *args) +update__(struct cmd_args *args) { rescan_or_update__(args, "update"); } noreturn void -populate__(struct lkt_cmd_args *args) +populate__(struct cmd_args *args) { rescan_or_update__(args, "__rescan"); } noreturn void -queue_replace__(struct lkt_cmd_args *args) +queue_replace__(struct cmd_args *args) { if (args->argc != 1) fail("Invalid argument"); @@ -314,7 +314,7 @@ queue_replace__(struct lkt_cmd_args *args) } noreturn void -config__(struct lkt_cmd_args *args) +config__(struct cmd_args *args) { int ret = EXIT_SUCCESS; if (args->argc == 0) @@ -324,7 +324,7 @@ config__(struct lkt_cmd_args *args) } noreturn void -play__(struct lkt_cmd_args *args) +play__(struct cmd_args *args) { if (args->argc > 1) fail("Invalid argument"); @@ -368,7 +368,7 @@ play__(struct lkt_cmd_args *args) } noreturn void -ping__(struct lkt_cmd_args *args) +ping__(struct cmd_args *args) { if (args->argc != 0) fail("Invalid argument, the ping command takes no arguments"); @@ -382,7 +382,7 @@ ping__(struct lkt_cmd_args *args) } noreturn void -current__(struct lkt_cmd_args *args) +current__(struct cmd_args *args) { if (args->argc != 0) fail("Invalid argument, the current command takes no arguments"); @@ -449,7 +449,7 @@ ok: } noreturn void -queue_pop__(struct lkt_cmd_args *args) +queue_pop__(struct cmd_args *args) { fail_if(args->argc, "Invalid argument"); int songid = 0; @@ -483,7 +483,7 @@ queue_pop__(struct lkt_cmd_args *args) } noreturn void -status__(struct lkt_cmd_args *args) +status__(struct cmd_args *args) { if (args->argc != 0) fail("Invalid argument, the status command takes no arguments"); @@ -557,7 +557,7 @@ error: } noreturn void -queue_delete__(struct lkt_cmd_args *args) +queue_delete__(struct cmd_args *args) { if (args->argc != 1) fail("Invalid argument, need onlt one argument: queue delete <id>"); @@ -577,7 +577,7 @@ queue_delete__(struct lkt_cmd_args *args) } noreturn void -queue_add__(struct lkt_cmd_args *args) +queue_add__(struct cmd_args *args) { char buff[3]; fail_if(args->argc < 1, "Invalid arguments"); @@ -588,7 +588,7 @@ queue_add__(struct lkt_cmd_args *args) } noreturn void -queue_insert__(struct lkt_cmd_args *args) +queue_insert__(struct cmd_args *args) { char buff[3]; fail_if(args->argc < 1, "Invalid arguments"); @@ -599,7 +599,7 @@ queue_insert__(struct lkt_cmd_args *args) } noreturn void -queue_seek__(struct lkt_cmd_args *args) +queue_seek__(struct cmd_args *args) { fail_if(args->argc != 1, "The seek command needs one argument: queue seek <id>"); @@ -620,7 +620,7 @@ queue_seek__(struct lkt_cmd_args *args) } noreturn void -queue_pos__(struct lkt_cmd_args *args) +queue_pos__(struct cmd_args *args) { char buff[LKT_MESSAGE_MAX], *endptr; @@ -672,7 +672,7 @@ redo: } noreturn void -queue_list__(struct lkt_cmd_args *args) +queue_list__(struct cmd_args *args) { char buff[LKT_MESSAGE_MAX], *endptr; FILE *sock = NULL; @@ -727,7 +727,7 @@ queue_list__(struct lkt_cmd_args *args) /* Functions implementing options, but for for playlists. */ noreturn void -plt_add__(struct lkt_cmd_args *args) +plt_add__(struct cmd_args *args) { char buff[2]; FILE *sock = lkt_connect(); @@ -748,7 +748,7 @@ plt_add__(struct lkt_cmd_args *args) } noreturn void -plt_delete__(struct lkt_cmd_args *args) +plt_delete__(struct cmd_args *args) { FILE *sock = lkt_connect(); char buff[2]; @@ -761,7 +761,7 @@ plt_delete__(struct lkt_cmd_args *args) } noreturn void -stickers_get__(struct lkt_cmd_args *args) +stickers_get__(struct cmd_args *args) { char buff[LKT_MESSAGE_MAX]; FILE *sock; @@ -791,7 +791,7 @@ stickers_get__(struct lkt_cmd_args *args) } noreturn void -stickers_set__(struct lkt_cmd_args *args) +stickers_set__(struct cmd_args *args) { fail_if(args->argc != 4, "Invalid argument"); FILE *sock = lkt_connect(); @@ -802,7 +802,7 @@ stickers_set__(struct lkt_cmd_args *args) } noreturn void -stickers_delete__(struct lkt_cmd_args *args) +stickers_delete__(struct cmd_args *args) { FILE *sock; char buff[2]; @@ -849,14 +849,14 @@ redo: } noreturn void -list_plt__(struct lkt_cmd_args *args) +list_plt__(struct cmd_args *args) { fail_if(args->argc != 0, "Invalid argument number"); __continuation_calls("listplaylists"); } noreturn void -list_plt_content__(struct lkt_cmd_args *args) +list_plt_content__(struct cmd_args *args) { fail_if(args->argc != 1, "Invalid argument number"); char buff[LKT_MESSAGE_MAX]; @@ -866,7 +866,7 @@ list_plt_content__(struct lkt_cmd_args *args) } noreturn void -search_with_cmd__(struct lkt_cmd_args *args, const char *cmd) +search_with_cmd__(struct cmd_args *args, const char *cmd) { fail_if(args->argc < 2, "Invalid number of arguments"); fail_if(!lkt_valid_type(args->argv[0]), "Invalid type for the query"); @@ -902,7 +902,7 @@ redo: } noreturn void -search_get__(struct lkt_cmd_args *args) +search_get__(struct cmd_args *args) { fail_if(args->argc != 1, "Invalid number of arguments"); fail_if(!strtol(args->argv[0], NULL, 0), "Invalid id"); @@ -922,7 +922,7 @@ search_get__(struct lkt_cmd_args *args) } noreturn void -search_plt__(struct lkt_cmd_args *args) +search_plt__(struct cmd_args *args) { if (args->argc == 0) list_plt__(args); @@ -963,7 +963,7 @@ redo: } #define search_with_cmd(func, cmd) /* I don't want to write always the same things */ \ - noreturn void func (struct lkt_cmd_args *args) { search_with_cmd__(args, #cmd); } + noreturn void func (struct cmd_args *args) { search_with_cmd__(args, #cmd); } search_with_cmd(search_db__, search) search_with_cmd(search_count__, count) search_with_cmd(search_queue__, playlistfind) @@ -971,7 +971,7 @@ search_with_cmd(search_queue__, playlistfind) /* Parsing stuff. */ -static struct lkt_cmd_opt options_queue[] = { +static struct cmd_opt options_queue[] = { { .name = "insert", .call = queue_insert__ }, { .name = "pos", .call = queue_pos__ }, { .name = "pop", .call = queue_pop__ }, @@ -982,28 +982,28 @@ static struct lkt_cmd_opt options_queue[] = { { .name = "crop", .call = queue_crop__ }, { .name = "replace", .call = queue_replace__ }, { .name = "dump", .call = queue_dump__ }, - LKT_OPT_DEFAULT(queue_list__), + CMD_OPT_DEFAULT(queue_list__), }; -static struct lkt_cmd_opt options_plt[] = { +static struct md_opt options_plt[] = { { .name = "add", .call = plt_add__ }, { .name = "delete", .call = plt_delete__ }, { .name = "destroy", .call = plt_destroy__ }, { .name = "create", .call = plt_create__ }, { .name = "list", .call = search_plt__ }, - LKT_OPT_NULL, + CMD_OPT_NULL, }; -static struct lkt_cmd_opt options_search[] = { +static struct cmd_opt options_search[] = { { .name = "database", .call = search_db__ }, { .name = "get", .call = search_get__ }, { .name = "plt", .call = search_plt__ }, { .name = "count", .call = search_count__ }, { .name = "queue", .call = search_queue__ }, - LKT_OPT_NULL, + CMD_OPT_NULL, }; -static struct lkt_cmd_opt options_admin[] = { +static struct cmd_opt options_admin[] = { { .name = "ping", .call = ping__ }, { .name = "kill", .call = kill__ }, { .name = "restart", .call = restart__ }, @@ -1011,22 +1011,22 @@ static struct lkt_cmd_opt options_admin[] = { { .name = "update", .call = update__ }, { .name = "populate", .call = populate__ }, { .name = "config", .call = config__ }, - LKT_OPT_NULL, + CMD_OPT_NULL, }; -static struct lkt_cmd_opt options_stickers[] = { +static struct cmd_opt options_stickers[] = { { .name = "get", .call = stickers_get__ }, { .name = "set", .call = stickers_set__ }, { .name = "delete", .call = stickers_delete__ }, { .name = "create", .call = stickers_create__ }, { .name = "destroy", .call = stickers_destroy__ }, - LKT_OPT_NULL, + CMD_OPT_NULL, }; #define sub_command(name) /* Create sub-commands here */ \ - noreturn void name ## __(struct lkt_cmd_args *args) { \ + noreturn void name ## __(struct cmd_args *args) { \ fail_if(!args->argc, "Invalid command, specify a sub command for " #name); \ - lkt_cmd_parse(options_ ## name, args->argc, args->argv); \ + cmd_parse(options_ ## name, args->argc, args->argv); \ } sub_command(stickers) sub_command(search) @@ -1034,15 +1034,15 @@ sub_command(plt) sub_command(admin) noreturn void -queue__(struct lkt_cmd_args *args) +queue__(struct cmd_args *args) { if (args->argc == 0) queue_list__(args); - lkt_cmd_parse(options_queue, args->argc, args->argv); + cmd_parse(options_queue, args->argc, args->argv); } #undef sub_command -static struct lkt_cmd_opt options_[] = { +static struct cmd_opt options_[] = { { .name = "current", .call = current__ }, { .name = "play", .call = play__ }, { .name = "next", .call = next__ }, @@ -1121,5 +1121,5 @@ main(int argc, const char **argv) password = args.pwd; /* Communication with lektor. */ - lkt_cmd_parse(options_, args.argc, args.argv); + cmd_parse(options_, args.argc, args.argv); } diff --git a/src/net/listen.c b/src/net/listen.c index 58c0cc535f222c991aab0b47625b990fd8b54060..5856127b792a09b602c1b98cbd4e73339971cef9 100644 --- a/src/net/listen.c +++ b/src/net/listen.c @@ -167,9 +167,9 @@ handle_simple_command(struct lkt_state *srv, size_t c, struct lkt_command cmd) /* Commands that are available if not in idle mode */ else if (STR_MATCH(cmd.name, "currentsong")) - err = !command_currentsong(srv, c); + err = !command_currentsong(srv, c, NULL); else if (STR_MATCH(cmd.name, "status")) - err = !command_status(srv, c); + err = !command_status(srv, c, NULL); else if (STR_MATCH(cmd.name, "close")) err = !lkt_close_client(srv, c); @@ -177,25 +177,25 @@ handle_simple_command(struct lkt_state *srv, size_t c, struct lkt_command cmd) err = 0; else if (STR_MATCH(cmd.name, "next")) - err = !command_next(srv); + err = !command_next(srv, NULL); else if (STR_MATCH(cmd.name, "pause")) - err = !command_pause(srv); + err = !command_pause(srv, NULL); else if (STR_MATCH(cmd.name, "previous")) - err = !command_previous(srv); + err = !command_previous(srv, NULL); else if (STR_MATCH(cmd.name, "play")) err = ! command_play(srv, cmd.args); else if (STR_MATCH(cmd.name, "playid")) err = ! command_playid(srv, cmd.args); else if (STR_MATCH(cmd.name, "stop")) - err = !command_stop(srv); + err = !command_stop(srv, NULL); else if (STR_MATCH(cmd.name, "clear")) - err = !command_clear(srv); + err = !command_clear(srv, NULL); else if (STR_MATCH(cmd.name, "crop")) - err = !command_crop(srv); + err = !command_crop(srv, NULL); else if (STR_MATCH(cmd.name, "moveid")) err = !command_move(srv, cmd.args); else if (STR_MATCH(cmd.name, "shuffle")) - err = !command_shuffle(srv); + err = !command_shuffle(srv, NULL); else if (STR_MATCH(cmd.name, "playlist") || STR_MATCH(cmd.name, "playlistinfo")) err = !command_queue_list(srv, c, cmd.args); @@ -743,12 +743,13 @@ redo: case lkt_event_play_toggle: switch ((size_t) evt.attr) { - case _LKT_PLAY_PAUSE: - case _LKT_PLAY_PLAY: - case _LKT_PLAY_TOGGLE: + /* FIXME: Don't toggle with the PLAY/PAUSE commands */ + case __LKT_PLAY_PAUSE: + case __LKT_PLAY_PLAY: + case __LKT_PLAY_TOGGLE: database_queue_toggle_pause(srv->db); break; - case _LKT_PLAY_STOP: + case __LKT_PLAY_STOP: database_queue_stop(srv->db); break; }