14#include "dist/sds/sds.h"
25#define MYMPD_CMDS(X) \
26 X(GENERAL_API_UNKNOWN) \
27 X(GENERAL_API_NOT_READY) \
28 X(INTERNAL_API_ALBUMART_BY_ALBUMID) \
29 X(INTERNAL_API_ALBUMART_BY_URI) \
30 X(INTERNAL_API_ALBUMCACHE_CREATED) \
31 X(INTERNAL_API_ALBUMCACHE_ERROR) \
32 X(INTERNAL_API_ALBUMCACHE_SKIPPED) \
33 X(INTERNAL_API_JUKEBOX_CREATED) \
34 X(INTERNAL_API_JUKEBOX_ERROR) \
35 X(INTERNAL_API_JUKEBOX_REFILL) \
36 X(INTERNAL_API_JUKEBOX_REFILL_ADD) \
38 X(INTERNAL_API_SCRIPT_EXECUTE) \
39 X(INTERNAL_API_SCRIPT_INIT) \
40 X(INTERNAL_API_SCRIPT_POST_EXECUTE) \
41 X(INTERNAL_API_STATE_SAVE) \
42 X(INTERNAL_API_STICKER_FEATURES) \
43 X(INTERNAL_API_TAGART) \
44 X(INTERNAL_API_TIMER_STARTPLAY) \
45 X(INTERNAL_API_TRIGGER_EVENT_EMIT) \
46 X(INTERNAL_API_WEBRADIODB_CREATED) \
47 X(INTERNAL_API_WEBSERVER_NOTIFY) \
48 X(INTERNAL_API_WEBSERVER_READY) \
49 X(INTERNAL_API_WEBSERVER_SETTINGS) \
50 X(MYMPD_API_CHANNEL_SUBSCRIBE) \
51 X(MYMPD_API_CHANNEL_UNSUBSCRIBE) \
52 X(MYMPD_API_CHANNEL_LIST) \
53 X(MYMPD_API_CHANNEL_MESSAGE_SEND) \
54 X(MYMPD_API_CHANNEL_MESSAGES_READ) \
55 X(MYMPD_API_CONNECTION_SAVE) \
56 X(MYMPD_API_CACHE_DISK_CLEAR) \
57 X(MYMPD_API_CACHE_DISK_CROP) \
58 X(MYMPD_API_CACHES_CREATE) \
59 X(MYMPD_API_DATABASE_ALBUM_DETAIL) \
60 X(MYMPD_API_DATABASE_ALBUM_LIST) \
61 X(MYMPD_API_DATABASE_LIST_RANDOM) \
62 X(MYMPD_API_DATABASE_FILESYSTEM_LIST) \
63 X(MYMPD_API_DATABASE_RESCAN) \
64 X(MYMPD_API_DATABASE_SEARCH) \
65 X(MYMPD_API_DATABASE_TAG_LIST) \
66 X(MYMPD_API_DATABASE_UPDATE) \
67 X(MYMPD_API_HOME_ICON_GET) \
68 X(MYMPD_API_HOME_ICON_LIST) \
69 X(MYMPD_API_HOME_ICON_MOVE) \
70 X(MYMPD_API_HOME_ICON_RM) \
71 X(MYMPD_API_HOME_ICON_SAVE) \
72 X(MYMPD_API_HOME_WIDGET_SAVE) \
73 X(MYMPD_API_JUKEBOX_APPEND_URIS) \
74 X(MYMPD_API_JUKEBOX_CLEAR) \
75 X(MYMPD_API_JUKEBOX_CLEARERROR) \
76 X(MYMPD_API_JUKEBOX_LENGTH) \
77 X(MYMPD_API_JUKEBOX_LIST) \
78 X(MYMPD_API_JUKEBOX_RESTART) \
79 X(MYMPD_API_JUKEBOX_RM) \
80 X(MYMPD_API_LAST_PLAYED_LIST) \
82 X(MYMPD_API_LOGLEVEL) \
83 X(MYMPD_API_LYRICS_GET) \
84 X(MYMPD_API_MOUNT_LIST) \
85 X(MYMPD_API_MOUNT_MOUNT) \
86 X(MYMPD_API_MOUNT_NEIGHBOR_LIST) \
87 X(MYMPD_API_MOUNT_URLHANDLER_LIST) \
88 X(MYMPD_API_MOUNT_UNMOUNT) \
89 X(MYMPD_API_PARTITION_LIST) \
90 X(MYMPD_API_PARTITION_NEW) \
91 X(MYMPD_API_PARTITION_OUTPUT_MOVE) \
92 X(MYMPD_API_PARTITION_RM) \
93 X(MYMPD_API_PARTITION_SAVE) \
94 X(MYMPD_API_PICTURE_LIST) \
95 X(MYMPD_API_PLAYER_CLEARERROR) \
96 X(MYMPD_API_PLAYER_CURRENT_SONG) \
97 X(MYMPD_API_PLAYER_NEXT) \
98 X(MYMPD_API_PLAYER_OPTIONS_SET) \
99 X(MYMPD_API_PLAYER_OUTPUT_ATTRIBUTES_SET) \
100 X(MYMPD_API_PLAYER_OUTPUT_GET) \
101 X(MYMPD_API_PLAYER_OUTPUT_LIST) \
102 X(MYMPD_API_PLAYER_OUTPUT_TOGGLE) \
103 X(MYMPD_API_PLAYER_PAUSE) \
104 X(MYMPD_API_PLAYER_PLAY) \
105 X(MYMPD_API_PLAYER_PLAY_SONG) \
106 X(MYMPD_API_PLAYER_PREV) \
107 X(MYMPD_API_PLAYER_RESUME) \
108 X(MYMPD_API_PLAYER_SEEK_CURRENT) \
109 X(MYMPD_API_PLAYER_STATE) \
110 X(MYMPD_API_PLAYER_STOP) \
111 X(MYMPD_API_PLAYER_VOLUME_GET) \
112 X(MYMPD_API_PLAYER_VOLUME_SET) \
113 X(MYMPD_API_PLAYER_VOLUME_CHANGE) \
114 X(MYMPD_API_PLAYLIST_CONTENT_APPEND_SEARCH) \
115 X(MYMPD_API_PLAYLIST_CONTENT_APPEND_URIS) \
116 X(MYMPD_API_PLAYLIST_CONTENT_APPEND_ALBUMS) \
117 X(MYMPD_API_PLAYLIST_CONTENT_APPEND_ALBUM_TAG) \
118 X(MYMPD_API_PLAYLIST_CONTENT_CLEAR) \
119 X(MYMPD_API_PLAYLIST_CONTENT_DEDUP) \
120 X(MYMPD_API_PLAYLIST_CONTENT_DEDUP_ALL) \
121 X(MYMPD_API_PLAYLIST_CONTENT_ENUMERATE) \
122 X(MYMPD_API_PLAYLIST_CONTENT_INSERT_SEARCH) \
123 X(MYMPD_API_PLAYLIST_CONTENT_INSERT_URIS) \
124 X(MYMPD_API_PLAYLIST_CONTENT_INSERT_ALBUMS) \
125 X(MYMPD_API_PLAYLIST_CONTENT_INSERT_ALBUM_TAG) \
126 X(MYMPD_API_PLAYLIST_CONTENT_LIST) \
127 X(MYMPD_API_PLAYLIST_CONTENT_MOVE_POSITION) \
128 X(MYMPD_API_PLAYLIST_CONTENT_MOVE_TO_PLAYLIST) \
129 X(MYMPD_API_PLAYLIST_CONTENT_REPLACE_SEARCH) \
130 X(MYMPD_API_PLAYLIST_CONTENT_REPLACE_URIS) \
131 X(MYMPD_API_PLAYLIST_CONTENT_REPLACE_ALBUMS) \
132 X(MYMPD_API_PLAYLIST_CONTENT_REPLACE_ALBUM_TAG) \
133 X(MYMPD_API_PLAYLIST_CONTENT_RM_POSITIONS) \
134 X(MYMPD_API_PLAYLIST_CONTENT_RM_RANGE) \
135 X(MYMPD_API_PLAYLIST_CONTENT_SHUFFLE) \
136 X(MYMPD_API_PLAYLIST_CONTENT_SORT) \
137 X(MYMPD_API_PLAYLIST_CONTENT_VALIDATE) \
138 X(MYMPD_API_PLAYLIST_CONTENT_VALIDATE_ALL) \
139 X(MYMPD_API_PLAYLIST_CONTENT_VALIDATE_DEDUP) \
140 X(MYMPD_API_PLAYLIST_CONTENT_VALIDATE_DEDUP_ALL) \
141 X(MYMPD_API_PLAYLIST_COPY) \
142 X(MYMPD_API_PLAYLIST_LIST) \
143 X(MYMPD_API_PLAYLIST_RENAME) \
144 X(MYMPD_API_PLAYLIST_RM) \
145 X(MYMPD_API_PLAYLIST_RM_ALL) \
146 X(MYMPD_API_RATING) \
147 X(MYMPD_API_PRESET_RM) \
148 X(MYMPD_API_PRESET_APPLY) \
149 X(MYMPD_API_QUEUE_ADD_RANDOM) \
150 X(MYMPD_API_QUEUE_APPEND_PLAYLIST_RANGE) \
151 X(MYMPD_API_QUEUE_APPEND_PLAYLISTS) \
152 X(MYMPD_API_QUEUE_APPEND_SEARCH) \
153 X(MYMPD_API_QUEUE_APPEND_URIS) \
154 X(MYMPD_API_QUEUE_APPEND_URI_TAGS) \
155 X(MYMPD_API_QUEUE_APPEND_URI_RESUME) \
156 X(MYMPD_API_QUEUE_APPEND_ALBUMS) \
157 X(MYMPD_API_QUEUE_APPEND_ALBUM_TAG) \
158 X(MYMPD_API_QUEUE_APPEND_ALBUM_RANGE) \
159 X(MYMPD_API_QUEUE_CLEAR) \
160 X(MYMPD_API_QUEUE_CROP) \
161 X(MYMPD_API_QUEUE_CROP_OR_CLEAR) \
162 X(MYMPD_API_QUEUE_INSERT_PLAYLIST_RANGE) \
163 X(MYMPD_API_QUEUE_INSERT_PLAYLISTS) \
164 X(MYMPD_API_QUEUE_INSERT_SEARCH) \
165 X(MYMPD_API_QUEUE_INSERT_URIS) \
166 X(MYMPD_API_QUEUE_INSERT_URI_TAGS) \
167 X(MYMPD_API_QUEUE_INSERT_URI_RESUME) \
168 X(MYMPD_API_QUEUE_INSERT_ALBUMS) \
169 X(MYMPD_API_QUEUE_INSERT_ALBUM_TAG) \
170 X(MYMPD_API_QUEUE_INSERT_ALBUM_RANGE) \
171 X(MYMPD_API_QUEUE_MOVE_POSITION) \
172 X(MYMPD_API_QUEUE_MOVE_RELATIVE) \
173 X(MYMPD_API_QUEUE_PRIO_SET) \
174 X(MYMPD_API_QUEUE_PRIO_SET_HIGHEST) \
175 X(MYMPD_API_QUEUE_REPLACE_PLAYLIST_RANGE) \
176 X(MYMPD_API_QUEUE_REPLACE_PLAYLISTS) \
177 X(MYMPD_API_QUEUE_REPLACE_SEARCH) \
178 X(MYMPD_API_QUEUE_REPLACE_URIS) \
179 X(MYMPD_API_QUEUE_REPLACE_URI_TAGS) \
180 X(MYMPD_API_QUEUE_REPLACE_URI_RESUME) \
181 X(MYMPD_API_QUEUE_REPLACE_ALBUMS) \
182 X(MYMPD_API_QUEUE_REPLACE_ALBUM_TAG) \
183 X(MYMPD_API_QUEUE_REPLACE_ALBUM_RANGE) \
184 X(MYMPD_API_QUEUE_RM_RANGE) \
185 X(MYMPD_API_QUEUE_RM_IDS) \
186 X(MYMPD_API_QUEUE_SAVE) \
187 X(MYMPD_API_QUEUE_SEARCH) \
188 X(MYMPD_API_QUEUE_SHUFFLE) \
189 X(MYMPD_API_SCRIPT_EXECUTE) \
190 X(MYMPD_API_SCRIPT_GET) \
191 X(MYMPD_API_SCRIPT_LIST) \
192 X(MYMPD_API_SCRIPT_RELOAD) \
193 X(MYMPD_API_SCRIPT_RM) \
194 X(MYMPD_API_SCRIPT_SAVE) \
195 X(MYMPD_API_SCRIPT_TMP_DELETE) \
196 X(MYMPD_API_SCRIPT_TMP_GET) \
197 X(MYMPD_API_SCRIPT_TMP_LIST) \
198 X(MYMPD_API_SCRIPT_TMP_SET) \
199 X(MYMPD_API_SCRIPT_VALIDATE) \
200 X(MYMPD_API_SCRIPT_VAR_DELETE) \
201 X(MYMPD_API_SCRIPT_VAR_LIST) \
202 X(MYMPD_API_SCRIPT_VAR_SET) \
203 X(MYMPD_API_SESSION_LOGIN) \
204 X(MYMPD_API_SESSION_LOGOUT) \
205 X(MYMPD_API_SESSION_VALIDATE) \
206 X(MYMPD_API_SETTINGS_GET) \
207 X(MYMPD_API_SETTINGS_SET) \
208 X(MYMPD_API_SMARTPLS_GET) \
209 X(MYMPD_API_SMARTPLS_NEWEST_SAVE) \
210 X(MYMPD_API_SMARTPLS_SEARCH_SAVE) \
211 X(MYMPD_API_SMARTPLS_STICKER_SAVE) \
212 X(MYMPD_API_SMARTPLS_UPDATE) \
213 X(MYMPD_API_SMARTPLS_UPDATE_ALL) \
214 X(MYMPD_API_SONG_COMMENTS) \
215 X(MYMPD_API_SONG_DETAILS) \
216 X(MYMPD_API_SONG_FINGERPRINT) \
218 X(MYMPD_API_STICKER_DELETE) \
219 X(MYMPD_API_STICKER_GET) \
220 X(MYMPD_API_STICKER_FIND) \
221 X(MYMPD_API_STICKER_LIST) \
222 X(MYMPD_API_STICKER_NAMES) \
223 X(MYMPD_API_STICKER_SET) \
224 X(MYMPD_API_STICKER_INC) \
225 X(MYMPD_API_STICKER_DEC) \
226 X(MYMPD_API_STICKER_PLAYCOUNT) \
227 X(MYMPD_API_TIMER_GET) \
228 X(MYMPD_API_TIMER_LIST) \
229 X(MYMPD_API_TIMER_RM) \
230 X(MYMPD_API_TIMER_SAVE) \
231 X(MYMPD_API_TIMER_TOGGLE) \
232 X(MYMPD_API_TRIGGER_GET) \
233 X(MYMPD_API_TRIGGER_LIST) \
234 X(MYMPD_API_TRIGGER_RM) \
235 X(MYMPD_API_TRIGGER_SAVE) \
236 X(MYMPD_API_VIEW_SAVE) \
237 X(MYMPD_API_WEBRADIO_FAVORITE_GET_BY_NAME) \
238 X(MYMPD_API_WEBRADIO_FAVORITE_GET_BY_URI) \
239 X(MYMPD_API_WEBRADIO_FAVORITE_RM) \
240 X(MYMPD_API_WEBRADIO_FAVORITE_SAVE) \
241 X(MYMPD_API_WEBRADIO_FAVORITE_SEARCH) \
242 X(MYMPD_API_WEBRADIODB_RADIO_GET_BY_NAME) \
243 X(MYMPD_API_WEBRADIODB_RADIO_GET_BY_URI) \
244 X(MYMPD_API_WEBRADIODB_SEARCH) \
245 X(MYMPD_API_WEBRADIODB_UPDATE) \
251#define GEN_ENUM(X) X,
256#define GEN_STR(X) #X,
353void ws_notify(sds message,
const char *partition);
struct t_work_response * create_response(struct t_work_request *request)
Definition api.c:333
enum mympd_cmd_ids get_cmd_id(const char *cmd)
Definition api.c:258
const char * get_cmd_id_method_name(enum mympd_cmd_ids cmd_id)
Definition api.c:272
bool push_request(struct t_work_request *request, unsigned id)
Definition api.c:485
#define GEN_ENUM(X)
Definition api.h:251
struct t_work_request * create_request(enum work_request_types type, unsigned long conn_id, unsigned request_id, enum mympd_cmd_ids cmd_id, const char *data, const char *partition)
Definition api.c:380
mympd_cmd_ids
Definition api.h:261
void ws_script_dialog(sds message, unsigned request_id)
Definition api.c:321
work_response_types
Definition api.h:283
@ RESPONSE_TYPE_SCRIPT_DIALOG
Script dialog.
Definition api.h:291
@ RESPONSE_TYPE_SCRIPT
Respond is for the script thread.
Definition api.h:288
@ RESPONSE_TYPE_DISCARD
Response will be discarded.
Definition api.h:289
@ RESPONSE_TYPE_NOTIFY_PARTITION
Send message to all clients in a specific partition.
Definition api.h:286
@ RESPONSE_TYPE_RAW
Raw http message.
Definition api.h:290
@ RESPONSE_TYPE_REDIRECT
Send a redirect.
Definition api.h:292
@ RESPONSE_TYPE_NOTIFY_CLIENT
Send message to client identified by jsonrpc id.
Definition api.h:285
@ RESPONSE_TYPE_DEFAULT
Send message back to the mongoose connection.
Definition api.h:284
@ RESPONSE_TYPE_PUSH_CONFIG
Internal message from myMPD API thread to webserver thread to push the configuration.
Definition api.h:287
void ws_notify_client(sds message, unsigned request_id)
Definition api.c:309
#define MYMPD_CMDS(X)
Definition api.h:25
mympd_cmd_acl_entity
Definition api.h:268
@ API_PUBLIC
Defines methods that are public.
Definition api.h:270
@ API_SCRIPT
Defines internal methods that are accessible by scripts.
Definition api.h:272
@ API_SCRIPT_THREAD
API methods that are handled by the script thread.
Definition api.h:277
@ API_MYMPD_WORKER_ONLY
Defines methods that do not require to create a mpd connection in the mympd_worker thread.
Definition api.h:275
@ API_MPD_DISCONNECTED
Defines methods that should be handled if MPD is disconnected.
Definition api.h:273
@ API_PROTECTED
Defines methods that need authentication if a pin is set.
Definition api.h:271
@ API_MYMPD_ONLY
Defines methods that do not require to leave the mpd idle mode in the mympd_api thread.
Definition api.h:274
@ API_INVALID
API methods that should not be called.
Definition api.h:276
@ API_INTERNAL
Defines internal methods.
Definition api.h:269
struct t_work_response * create_response_new(enum work_response_types type, unsigned long conn_id, unsigned request_id, enum mympd_cmd_ids cmd_id, const char *partition)
Definition api.c:354
void ws_notify(sds message, const char *partition)
Definition api.c:297
void free_response(struct t_work_response *response)
Definition api.c:428
bool push_response(struct t_work_response *response)
Definition api.c:450
bool check_cmd_acl(enum mympd_cmd_ids cmd_id, enum mympd_cmd_acl_entity ace)
Definition api.c:285
void free_request(struct t_work_request *request)
Definition api.c:407
work_request_types
Definition api.h:298
@ REQUEST_TYPE_SCRIPT
Request is from the script thread.
Definition api.h:300
@ REQUEST_TYPE_NOTIFY_PARTITION
Send message to all clients in a specific partition.
Definition api.h:301
@ REQUEST_TYPE_DEFAULT
Request is from a mongoose connection.
Definition api.h:299
@ REQUEST_TYPE_DISCARD
Response will be discarded.
Definition api.h:302
Linked list implementation.
struct t_webradios * webradiodb
Pointer to webradiodb.
Definition api.h:343
sds thumbnail_names
comma separated list of coverimage thumbnail names
Definition api.h:340
struct t_webradios * webradio_favorites
Pointer to webradio favorites.
Definition api.h:344
sds music_directory
detected mpd music directory
Definition api.h:337
sds mpd_host
configured mpd host
Definition api.h:341
sds playlist_directory
configured mpd playlist directory
Definition api.h:338
struct t_list partitions
partition specific settings
Definition api.h:342
sds coverimage_names
comma separated list of coverimage names
Definition api.h:339
void * extra
extra data for the request
Definition api.h:315
enum mympd_cmd_ids cmd_id
the jsonrpc method as enum
Definition api.h:312
unsigned id
the jsonrpc id
Definition api.h:311
sds data
full jsonrpc request
Definition api.h:313
sds partition
mpd partition
Definition api.h:314
void(* extra_free)(void *)
Function pointer to free extra data.
Definition api.h:316
enum work_request_types type
request type
Definition api.h:309
unsigned long conn_id
mongoose connection id
Definition api.h:310
void * extra
extra data for the response
Definition api.h:329
enum work_response_types type
response type
Definition api.h:323
enum mympd_cmd_ids cmd_id
the jsonrpc method as enum
Definition api.h:326
unsigned id
the jsonrpc id
Definition api.h:325
sds data
full jsonrpc response
Definition api.h:327
sds partition
mpd partition
Definition api.h:328
void(* extra_free)(void *)
Function pointer to free extra data.
Definition api.h:330
unsigned long conn_id
mongoose connection id
Definition api.h:324