2 (c) 2003-2017 The Music Player Daemon Project
3 This project's homepage is: http://www.musicpd.org
5 Redistribution and use in source and binary forms, with or without
6 modification, are permitted provided that the following conditions
9 - Redistributions of source code must retain the above copyright
10 notice, this list of conditions and the following disclaimer.
12 - Redistributions in binary form must reproduce the above copyright
13 notice, this list of conditions and the following disclaimer in the
14 documentation and/or other materials provided with the distribution.
16 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17 ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR
20 CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
21 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
22 PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
23 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
24 LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
25 NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 #include <mpd/queue.h>
33 #include <mpd/response.h>
44 mpd_send_list_queue_meta(struct mpd_connection
*connection
)
46 return mpd_send_command(connection
, "playlistinfo", NULL
);
50 mpd_send_list_queue_range_meta(struct mpd_connection
*connection
,
51 unsigned start
, unsigned end
)
53 return mpd_send_range_command(connection
, "playlistinfo", start
, end
);
57 mpd_send_get_queue_song_pos(struct mpd_connection
*connection
, unsigned pos
)
59 return mpd_send_int_command(connection
, "playlistinfo", pos
);
63 mpd_run_get_queue_song_pos(struct mpd_connection
*connection
, unsigned pos
)
65 struct mpd_song
*song
;
67 if (!mpd_run_check(connection
) ||
68 !mpd_send_get_queue_song_pos(connection
, pos
))
71 song
= mpd_recv_song(connection
);
72 if (!mpd_response_finish(connection
) && song
!= NULL
) {
82 mpd_send_get_queue_song_id(struct mpd_connection
*connection
, unsigned id
)
84 return mpd_send_int_command(connection
, "playlistid", id
);
88 mpd_run_get_queue_song_id(struct mpd_connection
*connection
, unsigned id
)
90 struct mpd_song
*song
;
92 if (!mpd_run_check(connection
) ||
93 !mpd_send_get_queue_song_id(connection
, id
))
96 song
= mpd_recv_song(connection
);
97 if (!mpd_response_finish(connection
) && song
!= NULL
) {
107 mpd_send_queue_changes_meta(struct mpd_connection
*connection
,
110 return mpd_send_ll_command(connection
, "plchanges", version
);
114 mpd_send_queue_changes_meta_range(struct mpd_connection
*connection
,
116 unsigned start
, unsigned end
)
118 return mpd_send_u_range_command(connection
, "plchanges",
119 version
, start
, end
);
123 mpd_send_queue_changes_brief(struct mpd_connection
*connection
,
126 return mpd_send_ll_command(connection
, "plchangesposid", version
);
130 mpd_send_queue_changes_brief_range(struct mpd_connection
*connection
,
132 unsigned start
, unsigned end
)
134 return mpd_send_u_range_command(connection
, "plchangesposid",
135 version
, start
, end
);
139 mpd_recv_queue_change_brief(struct mpd_connection
*connection
,
140 unsigned *position_r
, unsigned *id_r
)
142 struct mpd_pair
*pair
;
144 pair
= mpd_recv_pair_named(connection
, "cpos");
148 *position_r
= atoi(pair
->value
);
149 mpd_return_pair(connection
, pair
);
151 pair
= mpd_recv_pair_named(connection
, "Id");
153 mpd_return_pair(connection
, pair
);
155 if (!mpd_error_is_defined(&connection
->error
)) {
156 mpd_error_code(&connection
->error
,
157 MPD_ERROR_MALFORMED
);
158 mpd_error_message(&connection
->error
,
165 *id_r
= atoi(pair
->value
);
166 mpd_return_pair(connection
, pair
);
168 return !mpd_error_is_defined(&connection
->error
);
172 mpd_send_add(struct mpd_connection
*connection
, const char *file
)
174 return mpd_send_command(connection
, "add", file
, NULL
);
178 mpd_run_add(struct mpd_connection
*connection
, const char *uri
)
180 return mpd_run_check(connection
) &&
181 mpd_send_add(connection
, uri
) &&
182 mpd_response_finish(connection
);
186 mpd_send_add_id(struct mpd_connection
*connection
, const char *file
)
188 return mpd_send_command(connection
, "addid", file
, NULL
);
192 mpd_send_add_id_to(struct mpd_connection
*connection
, const char *uri
,
195 return mpd_send_s_u_command(connection
, "addid", uri
, to
);
199 mpd_recv_song_id(struct mpd_connection
*connection
)
201 struct mpd_pair
*pair
;
204 pair
= mpd_recv_pair_named(connection
, "Id");
206 id
= atoi(pair
->value
);
207 mpd_return_pair(connection
, pair
);
214 mpd_run_add_id(struct mpd_connection
*connection
, const char *file
)
218 if (!mpd_run_check(connection
) ||
219 !mpd_send_add_id(connection
, file
))
222 id
= mpd_recv_song_id(connection
);
224 if (!mpd_response_finish(connection
))
231 mpd_run_add_id_to(struct mpd_connection
*connection
, const char *uri
,
236 if (!mpd_run_check(connection
) ||
237 !mpd_send_add_id_to(connection
, uri
, to
))
240 id
= mpd_recv_song_id(connection
);
242 if (!mpd_response_finish(connection
))
249 mpd_send_delete(struct mpd_connection
*connection
, unsigned pos
)
251 return mpd_send_int_command(connection
, "delete", pos
);
255 mpd_run_delete(struct mpd_connection
*connection
, unsigned pos
)
257 return mpd_run_check(connection
) &&
258 mpd_send_delete(connection
, pos
) &&
259 mpd_response_finish(connection
);
263 mpd_send_delete_range(struct mpd_connection
*connection
,
264 unsigned start
, unsigned end
)
266 return mpd_send_range_command(connection
, "delete", start
, end
);
270 mpd_run_delete_range(struct mpd_connection
*connection
,
271 unsigned start
, unsigned end
)
273 return mpd_run_check(connection
) &&
274 mpd_send_delete_range(connection
, start
, end
) &&
275 mpd_response_finish(connection
);
279 mpd_send_delete_id(struct mpd_connection
*connection
, unsigned id
)
281 return mpd_send_int_command(connection
, "deleteid", id
);
285 mpd_run_delete_id(struct mpd_connection
*connection
, unsigned id
)
287 return mpd_run_check(connection
) &&
288 mpd_send_delete_id(connection
, id
) &&
289 mpd_response_finish(connection
);
293 mpd_send_shuffle(struct mpd_connection
*connection
)
295 return mpd_send_command(connection
, "shuffle", NULL
);
299 mpd_run_shuffle(struct mpd_connection
*connection
)
301 return mpd_run_check(connection
) &&
302 mpd_send_shuffle(connection
) &&
303 mpd_response_finish(connection
);
307 mpd_send_shuffle_range(struct mpd_connection
*connection
, unsigned start
, unsigned end
)
309 return mpd_send_range_command(connection
, "shuffle", start
, end
);
313 mpd_run_shuffle_range(struct mpd_connection
*connection
,
314 unsigned start
, unsigned end
)
316 return mpd_run_check(connection
) &&
317 mpd_send_shuffle_range(connection
, start
, end
) &&
318 mpd_response_finish(connection
);
322 mpd_send_clear(struct mpd_connection
*connection
)
324 return mpd_send_command(connection
, "clear", NULL
);
328 mpd_run_clear(struct mpd_connection
*connection
)
330 return mpd_run_check(connection
) &&
331 mpd_send_clear(connection
) &&
332 mpd_response_finish(connection
);
336 mpd_send_move(struct mpd_connection
*connection
, unsigned from
, unsigned to
)
338 return mpd_send_int2_command(connection
, "move", from
, to
);
342 mpd_run_move(struct mpd_connection
*connection
, unsigned from
, unsigned to
)
344 return mpd_run_check(connection
) &&
345 mpd_send_move(connection
, from
, to
) &&
346 mpd_response_finish(connection
);
350 mpd_send_move_id(struct mpd_connection
*connection
, unsigned from
, unsigned to
)
352 return mpd_send_int2_command(connection
, "moveid", from
, to
);
356 mpd_run_move_id(struct mpd_connection
*connection
, unsigned from
, unsigned to
)
358 return mpd_run_check(connection
) &&
359 mpd_send_move_id(connection
, from
, to
) &&
360 mpd_response_finish(connection
);
364 mpd_send_move_range(struct mpd_connection
*connection
,
365 unsigned start
, unsigned end
, unsigned to
)
367 return mpd_send_range_u_command(connection
, "move", start
, end
, to
);
371 mpd_run_move_range(struct mpd_connection
*connection
,
372 unsigned start
, unsigned end
, unsigned to
)
374 return mpd_run_check(connection
) &&
375 mpd_send_move_range(connection
, start
, end
, to
) &&
376 mpd_response_finish(connection
);
380 mpd_send_swap(struct mpd_connection
*connection
, unsigned pos1
, unsigned pos2
)
382 return mpd_send_int2_command(connection
, "swap", pos1
, pos2
);
386 mpd_run_swap(struct mpd_connection
*connection
, unsigned pos1
, unsigned pos2
)
388 return mpd_run_check(connection
) &&
389 mpd_send_swap(connection
, pos1
, pos2
) &&
390 mpd_response_finish(connection
);
394 mpd_send_swap_id(struct mpd_connection
*connection
, unsigned id1
, unsigned id2
)
396 return mpd_send_int2_command(connection
, "swapid", id1
, id2
);
400 mpd_run_swap_id(struct mpd_connection
*connection
, unsigned id1
, unsigned id2
)
402 return mpd_run_check(connection
) &&
403 mpd_send_swap_id(connection
, id1
, id2
) &&
404 mpd_response_finish(connection
);
408 mpd_send_add_tag_id(struct mpd_connection
*connection
, unsigned id
,
409 enum mpd_tag_type tag
, const char *value
)
411 return mpd_send_u_s_s_command(connection
, "addtagid",
412 id
, mpd_tag_name(tag
), value
);
416 mpd_run_add_tag_id(struct mpd_connection
*connection
, unsigned id
,
417 enum mpd_tag_type tag
, const char *value
)
419 return mpd_run_check(connection
) &&
420 mpd_send_add_tag_id(connection
, id
, tag
, value
) &&
421 mpd_response_finish(connection
);
425 mpd_send_clear_tag_id(struct mpd_connection
*connection
, unsigned id
,
426 enum mpd_tag_type tag
)
428 return mpd_send_u_s_command(connection
, "cleartagid",
429 id
, mpd_tag_name(tag
));
433 mpd_run_clear_tag_id(struct mpd_connection
*connection
, unsigned id
,
434 enum mpd_tag_type tag
)
436 return mpd_run_check(connection
) &&
437 mpd_send_clear_tag_id(connection
, id
, tag
) &&
438 mpd_response_finish(connection
);
442 mpd_send_clear_all_tags_id(struct mpd_connection
*connection
, unsigned id
)
444 return mpd_send_int_command(connection
, "cleartagid", id
);
448 mpd_run_clear_all_tags_id(struct mpd_connection
*connection
, unsigned id
)
450 return mpd_run_check(connection
) &&
451 mpd_send_clear_all_tags_id(connection
, id
) &&
452 mpd_response_finish(connection
);
456 mpd_send_prio(struct mpd_connection
*connection
, int priority
,
459 return mpd_send_int2_command(connection
, "prio", priority
, position
);
463 mpd_run_prio(struct mpd_connection
*connection
, int priority
,
466 return mpd_run_check(connection
) &&
467 mpd_send_prio(connection
, priority
, position
) &&
468 mpd_response_finish(connection
);
472 mpd_send_prio_range(struct mpd_connection
*connection
, int priority
,
473 unsigned start
, unsigned end
)
475 return mpd_send_i_range_command(connection
, "prio", priority
,
480 mpd_run_prio_range(struct mpd_connection
*connection
, int priority
,
481 unsigned start
, unsigned end
)
483 return mpd_run_check(connection
) &&
484 mpd_send_prio_range(connection
, priority
, start
, end
) &&
485 mpd_response_finish(connection
);
489 mpd_send_prio_id(struct mpd_connection
*connection
, int priority
,
492 return mpd_send_int2_command(connection
, "prioid", priority
, id
);
496 mpd_run_prio_id(struct mpd_connection
*connection
, int priority
,
499 return mpd_run_check(connection
) &&
500 mpd_send_prio_id(connection
, priority
, id
) &&
501 mpd_response_finish(connection
);