commit ec19af89f4a0e6851bdb3623e5c6e046af7be80a
parent 73f566f8d19d238b139962f9348f4450ddfc091f
Author: sin <sin@2f30.org>
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
@@ -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);
@@ -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;
}