tMake connection to mpd persistent - spoon - dwm status utility (2f30 fork) | |
git clone git://src.adamsgaard.dk/spoon | |
Log | |
Files | |
Refs | |
LICENSE | |
--- | |
commit ec19af89f4a0e6851bdb3623e5c6e046af7be80a | |
parent 73f566f8d19d238b139962f9348f4450ddfc091f | |
Author: sin <[email protected]> | |
Date: Mon, 26 Sep 2016 16:05:09 +0100 | |
Make connection to mpd persistent | |
Diffstat: | |
M spoon.c | 27 ++++++++++++++++++--------- | |
1 file changed, 18 insertions(+), 9 deletions(-) | |
--- | |
diff --git a/spoon.c b/spoon.c | |
t@@ -44,15 +44,17 @@ dummyread(char *buf, size_t len) | |
int | |
mpdread(char *buf, size_t len) | |
{ | |
- struct mpd_connection *conn; | |
+ static struct mpd_connection *conn; | |
struct mpd_song *song; | |
const char *artist, *title; | |
int ret = 0; | |
- conn = mpd_connection_new(NULL, 0, 0); | |
- if (mpd_connection_get_error(conn) != MPD_ERROR_SUCCESS) { | |
- warnx("cannot connect to mpd"); | |
- return -1; | |
+ if (conn == NULL) { | |
+ conn = mpd_connection_new(NULL, 0, 0); | |
+ if (mpd_connection_get_error(conn) != MPD_ERROR_SUCCESS) { | |
+ warnx("cannot connect to mpd"); | |
+ return -1; | |
+ } | |
} | |
mpd_send_current_song(conn); | |
song = mpd_recv_song(conn); | |
t@@ -62,16 +64,23 @@ mpdread(char *buf, size_t len) | |
} | |
artist = mpd_song_get_tag(song, MPD_TAG_ARTIST, 0); | |
title = mpd_song_get_tag(song, MPD_TAG_TITLE, 0); | |
- if (artist != NULL && title != NULL) | |
+ if (artist != NULL && title != NULL) { | |
snprintf(buf, len, "%s - %s", artist, title); | |
- else if (title != NULL) | |
+ } else if (title != NULL) { | |
strlcpy(buf, title, len); | |
- else | |
+ } else { | |
ret = -1; | |
+ goto out; | |
+ } | |
mpd_song_free(song); | |
- mpd_response_finish(conn); | |
+ if (!mpd_response_finish(conn)) { | |
+ ret = -1; | |
+ goto out; | |
+ } | |
+ return 0; | |
out: | |
mpd_connection_free(conn); | |
+ conn = NULL; | |
return ret; | |
} | |