1 /* libmpd (high level libmpdclient library)
2 * Copyright (C) 2004-2009 Qball Cow <qball@sarine.nl>
3 * Project homepage: http://gmpcwiki.sarine.nl/
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License along
16 * with this program; if not, write to the Free Software Foundation, Inc.,
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
27 #include "debug_printf.h"
29 #include "libmpd-internal.h"
31 int mpd_player_get_state(MpdObj
* mi
)
33 if (!mpd_check_connected(mi
)) {
34 debug_printf(DEBUG_WARNING
, "not connected\n");
35 return MPD_NOT_CONNECTED
;
37 if (mpd_status_check(mi
) != MPD_OK
) {
38 debug_printf(DEBUG_WARNING
, "Failed to get status\n");
39 return MPD_STATUS_FAILED
;
41 return mi
->status
->state
;
43 int mpd_player_get_next_song_id(MpdObj
*mi
)
45 if (!mpd_check_connected(mi
)) {
46 debug_printf(DEBUG_WARNING
, "not connected\n");
47 return MPD_NOT_CONNECTED
;
49 if (mpd_status_check(mi
) != MPD_OK
) {
50 debug_printf(DEBUG_ERROR
, "Failed to get status\n");
51 return MPD_STATUS_FAILED
;
53 /* check if in valid state */
54 if (mpd_player_get_state(mi
) != MPD_PLAYER_PLAY
&&
55 mpd_player_get_state(mi
) != MPD_PLAYER_PAUSE
) {
56 return MPD_PLAYER_NOT_PLAYING
;
58 /* just to be sure check */
59 if (!mi
->status
->playlistLength
) {
60 return MPD_PLAYLIST_EMPTY
;
62 return mi
->status
->nextsongid
;
64 int mpd_player_get_next_song_pos(MpdObj
*mi
)
66 if (!mpd_check_connected(mi
)) {
67 debug_printf(DEBUG_WARNING
, "not connected\n");
68 return MPD_NOT_CONNECTED
;
70 if (mpd_status_check(mi
) != MPD_OK
) {
71 debug_printf(DEBUG_ERROR
, "Failed to get status\n");
72 return MPD_STATUS_FAILED
;
74 /* check if in valid state */
75 if (mpd_player_get_state(mi
) != MPD_PLAYER_PLAY
&&
76 mpd_player_get_state(mi
) != MPD_PLAYER_PAUSE
) {
77 return MPD_PLAYER_NOT_PLAYING
;
79 /* just to be sure check */
80 if (!mi
->status
->playlistLength
) {
81 return MPD_PLAYLIST_EMPTY
;
83 return mi
->status
->nextsong
;
85 int mpd_player_get_current_song_id(MpdObj
* mi
)
87 if (!mpd_check_connected(mi
)) {
88 debug_printf(DEBUG_WARNING
, "not connected\n");
89 return MPD_NOT_CONNECTED
;
91 if (mpd_status_check(mi
) != MPD_OK
) {
92 debug_printf(DEBUG_ERROR
, "Failed to get status\n");
93 return MPD_STATUS_FAILED
;
95 /* check if in valid state */
96 if (mpd_player_get_state(mi
) != MPD_PLAYER_PLAY
&&
97 mpd_player_get_state(mi
) != MPD_PLAYER_PAUSE
) {
98 return MPD_PLAYER_NOT_PLAYING
;
100 /* just to be sure check */
101 if (!mi
->status
->playlistLength
) {
102 return MPD_PLAYLIST_EMPTY
;
104 return mi
->status
->songid
;
107 int mpd_player_get_current_song_pos(MpdObj
* mi
)
109 if (!mpd_check_connected(mi
)) {
110 debug_printf(DEBUG_WARNING
, "not connected\n");
111 return MPD_NOT_CONNECTED
;
113 if (mpd_status_check(mi
)!= MPD_OK
) {
114 debug_printf(DEBUG_ERROR
, "Failed to get status\n");
115 return MPD_STATUS_FAILED
;
117 /* check if in valid state */
118 if (mpd_player_get_state(mi
) != MPD_PLAYER_PLAY
&&
119 mpd_player_get_state(mi
) != MPD_PLAYER_PAUSE
) {
120 return MPD_PLAYER_NOT_PLAYING
;
122 /* just to be sure check */
123 if (!mi
->status
->playlistLength
) {
124 return MPD_PLAYLIST_EMPTY
;
126 return mi
->status
->song
;
129 int mpd_player_play_id(MpdObj
* mi
, int id
)
131 debug_printf(DEBUG_INFO
, "trying to play id: %i\n", id
);
132 if (!mpd_check_connected(mi
)) {
133 debug_printf(DEBUG_WARNING
, "not connected\n");
134 return MPD_NOT_CONNECTED
;
136 if (mpd_lock_conn(mi
)) {
137 debug_printf(DEBUG_WARNING
, "lock failed\n");
138 return MPD_LOCK_FAILED
;
141 mpd_sendPlayIdCommand(mi
->connection
, id
);
142 mpd_finishCommand(mi
->connection
);
146 if (mpd_status_update(mi
)) {
147 return MPD_STATUS_FAILED
;
152 int mpd_player_play(MpdObj
* mi
)
154 return mpd_player_play_id(mi
, -1);
157 int mpd_player_stop(MpdObj
* mi
)
159 if (!mpd_check_connected(mi
)) {
160 debug_printf(DEBUG_WARNING
, "not connected\n");
161 return MPD_NOT_CONNECTED
;
163 if (mpd_lock_conn(mi
)) {
164 debug_printf(DEBUG_WARNING
, "lock failed\n");
165 return MPD_LOCK_FAILED
;
168 mpd_sendStopCommand(mi
->connection
);
169 mpd_finishCommand(mi
->connection
);
173 if (mpd_status_update(mi
)) {
174 return MPD_STATUS_FAILED
;
179 int mpd_player_next(MpdObj
* mi
)
181 if (!mpd_check_connected(mi
)) {
182 debug_printf(DEBUG_WARNING
, "not connected\n");
183 return MPD_NOT_CONNECTED
;
185 if (mpd_lock_conn(mi
)) {
186 debug_printf(DEBUG_WARNING
, "lock failed\n");
187 return MPD_LOCK_FAILED
;
190 mpd_sendNextCommand(mi
->connection
);
191 mpd_finishCommand(mi
->connection
);
195 if (mpd_status_update(mi
)) {
196 return MPD_STATUS_FAILED
;
201 int mpd_player_prev(MpdObj
* mi
)
203 if (!mpd_check_connected(mi
)) {
204 debug_printf(DEBUG_WARNING
, "not connected\n");
205 return MPD_NOT_CONNECTED
;
207 if (mpd_lock_conn(mi
)) {
208 debug_printf(DEBUG_WARNING
, "lock failed\n");
209 return MPD_LOCK_FAILED
;
212 mpd_sendPrevCommand(mi
->connection
);
213 mpd_finishCommand(mi
->connection
);
217 if (mpd_status_update(mi
)) {
218 return MPD_STATUS_FAILED
;
224 int mpd_player_pause(MpdObj
* mi
)
226 if (!mpd_check_connected(mi
)) {
227 debug_printf(DEBUG_WARNING
, "not connected\n");
228 return MPD_NOT_CONNECTED
;
230 if (mpd_lock_conn(mi
)) {
231 debug_printf(DEBUG_WARNING
, "lock failed\n");
232 return MPD_LOCK_FAILED
;
235 if (mpd_player_get_state(mi
) == MPD_PLAYER_PAUSE
) {
236 mpd_sendPauseCommand(mi
->connection
, 0);
237 mpd_finishCommand(mi
->connection
);
238 } else if (mpd_player_get_state(mi
) == MPD_PLAYER_PLAY
) {
239 mpd_sendPauseCommand(mi
->connection
, 1);
240 mpd_finishCommand(mi
->connection
);
245 if (mpd_status_update(mi
)) {
246 return MPD_STATUS_FAILED
;
251 int mpd_player_seek(MpdObj
* mi
, int sec
)
253 int cur_song
= mpd_player_get_current_song_pos(mi
);
255 debug_printf(DEBUG_ERROR
, "mpd_player_get_current_song_pos returned error\n");
258 if (!mpd_check_connected(mi
)) {
259 debug_printf(DEBUG_WARNING
, "not connected\n");
260 return MPD_NOT_CONNECTED
;
262 if (mpd_lock_conn(mi
)) {
263 debug_printf(DEBUG_WARNING
, "lock failed\n");
264 return MPD_LOCK_FAILED
;
267 debug_printf(DEBUG_INFO
, "seeking in song %i to %i sec\n", cur_song
, sec
);
269 mpd_sendSeekCommand(mi
->connection
, cur_song
, sec
);
270 mpd_finishCommand(mi
->connection
);
274 if (mpd_status_update(mi
)) {
275 return MPD_STATUS_FAILED
;
280 int mpd_player_get_consume(MpdObj
* mi
)
282 if (!mpd_check_connected(mi
)) {
283 debug_printf(DEBUG_WARNING
, "not connected\n");
284 return MPD_NOT_CONNECTED
;
286 if (mpd_status_check(mi
) != MPD_OK
) {
287 debug_printf(DEBUG_WARNING
, "Failed grabbing status\n");
288 return MPD_NOT_CONNECTED
;
290 return mi
->status
->consume
;
292 int mpd_player_set_single(MpdObj
* mi
, int single
)
294 if (!mpd_check_connected(mi
)) {
295 debug_printf(DEBUG_WARNING
, "not connected\n");
296 return MPD_NOT_CONNECTED
;
298 if (mpd_lock_conn(mi
)) {
299 debug_printf(DEBUG_WARNING
, "lock failed\n");
300 return MPD_LOCK_FAILED
;
302 mpd_sendSingleCommand(mi
->connection
, single
);
303 mpd_finishCommand(mi
->connection
);
306 mpd_status_queue_update(mi
);
309 int mpd_player_get_single(MpdObj
* mi
)
311 if (!mpd_check_connected(mi
)) {
312 debug_printf(DEBUG_WARNING
, "not connected\n");
313 return MPD_NOT_CONNECTED
;
315 if (mpd_status_check(mi
) != MPD_OK
) {
316 debug_printf(DEBUG_WARNING
, "Failed grabbing status\n");
317 return MPD_NOT_CONNECTED
;
319 return mi
->status
->single
;
321 int mpd_player_set_consume(MpdObj
* mi
, int consume
)
323 if (!mpd_check_connected(mi
)) {
324 debug_printf(DEBUG_WARNING
, "not connected\n");
325 return MPD_NOT_CONNECTED
;
327 if (mpd_lock_conn(mi
)) {
328 debug_printf(DEBUG_WARNING
, "lock failed\n");
329 return MPD_LOCK_FAILED
;
331 mpd_sendConsumeCommand(mi
->connection
, consume
);
332 mpd_finishCommand(mi
->connection
);
335 mpd_status_queue_update(mi
);
340 int mpd_player_get_repeat(MpdObj
* mi
)
342 if (!mpd_check_connected(mi
)) {
343 debug_printf(DEBUG_WARNING
, "not connected\n");
344 return MPD_NOT_CONNECTED
;
346 if (mpd_status_check(mi
) != MPD_OK
) {
347 debug_printf(DEBUG_WARNING
, "Failed grabbing status\n");
348 return MPD_NOT_CONNECTED
;
350 return mi
->status
->repeat
;
354 int mpd_player_set_repeat(MpdObj
* mi
, int repeat
)
356 if (!mpd_check_connected(mi
)) {
357 debug_printf(DEBUG_WARNING
, "not connected\n");
358 return MPD_NOT_CONNECTED
;
360 if (mpd_lock_conn(mi
)) {
361 debug_printf(DEBUG_WARNING
, "lock failed\n");
362 return MPD_LOCK_FAILED
;
364 mpd_sendRepeatCommand(mi
->connection
, repeat
);
365 mpd_finishCommand(mi
->connection
);
368 mpd_status_queue_update(mi
);
374 int mpd_player_get_random(MpdObj
* mi
)
376 if (!mpd_check_connected(mi
)) {
377 debug_printf(DEBUG_WARNING
, "not connected\n");
378 return MPD_NOT_CONNECTED
;
380 if (mpd_status_check(mi
) != MPD_OK
) {
381 debug_printf(DEBUG_WARNING
, "Failed grabbing status\n");
382 return MPD_NOT_CONNECTED
;
384 return mi
->status
->random
;
388 int mpd_player_set_random(MpdObj
* mi
, int random
)
390 if (!mpd_check_connected(mi
)) {
391 debug_printf(DEBUG_WARNING
, "not connected\n");
392 return MPD_NOT_CONNECTED
;
394 if (mpd_lock_conn(mi
)) {
395 debug_printf(DEBUG_WARNING
, "lock failed\n");
396 return MPD_LOCK_FAILED
;
398 mpd_sendRandomCommand(mi
->connection
, random
);
399 mpd_finishCommand(mi
->connection
);
402 mpd_status_queue_update(mi
);