mpdstatus.c - sites - public wiki contents of suckless.org
(HTM) git clone git://git.suckless.org/sites
(DIR) Log
(DIR) Files
(DIR) Refs
---
mpdstatus.c (1840B)
---
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4 #include <mpd/client.h>
5
6 /* add to config.mk :
7 # mpd
8 + MPDLIB = -lmpdclient
9 + MPDFLAG = -DMPD
10
11 - LIBS = -L/usr/lib -lc -L${X11LIB} -lX11
12 + LIBS = -L/usr/lib -lc -L${X11LIB} -lX11 ${MPDLIB}
13
14 - CPPFLAGS = -DVERSION=\"${VERSION}\"
15 + CPPFLAGS = ${MPDFLAG} -DVERSION=\"${VERSION}\"
16 */
17 /* simple function to retrieve mpd status */
18 char *
19 getmpdstat() {
20 struct mpd_song * song = NULL;
21 const char * title = NULL;
22 const char * artist = NULL;
23 char * retstr = NULL;
24 int elapsed = 0, total = 0;
25 struct mpd_connection * conn ;
26 if (!(conn = mpd_connection_new("localhost", 0, 30000)) ||
27 mpd_connection_get_error(conn)){
28 return smprintf("");
29 }
30
31 mpd_command_list_begin(conn, true);
32 mpd_send_status(conn);
33 mpd_send_current_song(conn);
34 mpd_command_list_end(conn);
35
36 struct mpd_status* theStatus = mpd_recv_status(conn);
37 if ((theStatus) && (mpd_status_get_state(theStatus) == MPD_STATE_PLAY)) {
38 mpd_response_next(conn);
39 song = mpd_recv_song(conn);
40 title = smprintf("%s",mpd_song_get_tag(song, MPD_TAG_TITLE, 0));
41 artist = smprintf("%s",mpd_song_get_tag(song, MPD_TAG_ARTIST, 0));
42
43 elapsed = mpd_status_get_elapsed_time(theStatus);
44 total = mpd_status_get_total_time(theStatus);
45 mpd_song_free(song);
46 retstr = smprintf("%.2d:%.2d/%.2d:%.2d %s - %s",
47 elapsed/60, elapsed%60,
48 total/60, total%60,
49 artist, title);
50 free((char*)title);
51 free((char*)artist);
52 }
53 else retstr = smprintf("");
54 mpd_response_finish(conn);
55 mpd_connection_free(conn);
56 return retstr;
57 }