From acf0d74cb2ab736d452e4a1894a73754225dfbc7 Mon Sep 17 00:00:00 2001 From: michael Date: Mon, 23 Apr 2007 19:20:36 +0000 Subject: MPD plugin patch from michu git-svn-id: https://ssl.bulix.org/svn/lcd4linux/trunk@786 3ae390bd-cb1e-0410-b409-cd5a39f66f1f --- plugin_mpd.c | 213 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 205 insertions(+), 8 deletions(-) (limited to 'plugin_mpd.c') diff --git a/plugin_mpd.c b/plugin_mpd.c index 6064cfc..63e2210 100644 --- a/plugin_mpd.c +++ b/plugin_mpd.c @@ -124,10 +124,6 @@ static void disconnect(struct Pointer mpd) } -/* function 'artist' */ -/* takes one argument, a number */ -/* multiplies the number by 3.0 */ -/* same as 'mul2', but shorter */ static void artist(RESULT * result, RESULT * query) { @@ -146,6 +142,13 @@ static void artist(RESULT * result, RESULT * query) if (song->artist) { value = strdup(song->artist); + //add comment + if (query) { + char *myarg; + myarg = strdup(R2S(query)); + value = strcat(value, myarg); + free(myarg); + } } mpd_freeInfoEntity(mpd.entity); } @@ -159,7 +162,7 @@ static void artist(RESULT * result, RESULT * query) } -static void title(RESULT * result, RESULT * query) +static void title(RESULT * result) { char *value = " "; struct Pointer mpd = connect(); @@ -189,7 +192,7 @@ static void title(RESULT * result, RESULT * query) } -static void album(RESULT * result, RESULT * query) +static void album(RESULT * result) { char *value = " "; struct Pointer mpd = connect(); @@ -218,13 +221,207 @@ static void album(RESULT * result, RESULT * query) free(value); } +#define _mpd_dummy 000 +#define _mpd_status_get_elapsed_song_time 001 +#define _mpd_status_get_bitrate 002 +#define _mpd_status_get_total_song_time 003 +#define _mpd_player_get_repeat 004 +#define _mpd_player_get_random 005 + +void error_callback(MpdObj * mi, int errorid, char *msg, void *userdata) +{ + printf("Error %i: '%s'\n", errorid, msg); +} + +static int mpd_get(int function) +{ + int ret = -1; + MpdObj *mi = NULL; + + mi = mpd_new("localhost", 6600, NULL); + mpd_signal_connect_error(mi, (ErrorCallback) error_callback, NULL); + mpd_set_connection_timeout(mi, 5); + + if (!mpd_connect(mi)) { + switch (function) { + case _mpd_dummy: + ret = 1; + break; + case _mpd_status_get_elapsed_song_time: + ret = mpd_status_get_elapsed_song_time(mi); + break; + case _mpd_status_get_bitrate: + ret = mpd_status_get_bitrate(mi); + break; + case _mpd_status_get_total_song_time: + ret = mpd_status_get_total_song_time(mi); + break; + case _mpd_player_get_repeat: + ret = mpd_player_get_repeat(mi); + break; + case _mpd_player_get_random: + ret = mpd_player_get_random(mi); + break; + } + + mpd_disconnect(mi); + mpd_free(mi); + } + return ret; +} + +static void elapsedTime(RESULT * result) +{ + char *value = " "; + + int playTime = mpd_get(_mpd_status_get_elapsed_song_time); + + if (playTime != -1) { + char myTime[6]; + memset(myTime, 0, 6); + int minutes = (int) (playTime / 60); + int seconds = (int) (playTime % 60); + sprintf(myTime, "%02d:%02d", minutes, seconds); + + value = strdup(myTime); + } + // store result + SetResult(&result, R_STRING, value); +} + +static void elapsedTimeSec(RESULT * result) +{ + int playTime = mpd_get(_mpd_status_get_elapsed_song_time); + double d = 0.0; + + if (playTime != -1) + d = playTime; + + // store result + SetResult(&result, R_NUMBER, &d); +} + +static void totalTime(RESULT * result) +{ + char *value = " "; + + int totTime = mpd_get(_mpd_status_get_total_song_time); + if (totTime != -1) { + char myTime[6]; + memset(myTime, 0, 6); + int minutes = (int) (totTime / 60); + int seconds = (int) (totTime % 60); + sprintf(myTime, "%02d:%02d", minutes, seconds); + + value = strdup(myTime); + } else + value = strdup("ERROR"); + // store result + SetResult(&result, R_STRING, value); +} + +static void totalTimeSec(RESULT * result) +{ + int totTime = mpd_get(_mpd_status_get_total_song_time); + double d = 0.0; + + if (totTime != -1) + d = totTime; + + // store result + SetResult(&result, R_NUMBER, &d); +} + +static void bitRate(RESULT * result) +{ + char *value = ""; + + int rate = mpd_get(_mpd_status_get_bitrate); + + if (rate != -1) { + char rateStr[4]; + memset(rateStr, 0, 4); + sprintf(rateStr, "%03d", rate); + + value = strdup(rateStr); + } + // store result + SetResult(&result, R_STRING, value); +} + +static void getRepeat(RESULT * result) +{ + char *value = " "; + + int rep = mpd_get(_mpd_player_get_repeat); + + if (rep != -1) { + if (rep) + value = strdup("REP"); + // else value = strdup(" "); + } + // store result + SetResult(&result, R_STRING, value); +} + + +static void getRandom(RESULT * result) +{ + char *value = " "; + + int ran = mpd_get(_mpd_player_get_random); + + if (ran != -1) { + if (ran) + value = strdup("RND"); + // else value = strdup(" "); + } + // store result + SetResult(&result, R_STRING, value); +} + +static void getRepRand(RESULT * result) +{ + char *value = " "; + + int ran = mpd_get(_mpd_player_get_random); + int rep = mpd_get(_mpd_player_get_repeat); + + if (ran != -1 && rep != -1) { + char str[9]; + if (rep) + sprintf(str, "REP/"); + else + sprintf(str, "---/"); + if (ran) + sprintf(str, "%sRND", str); + else + sprintf(str, "%s---", str); + value = strdup(str); + } + // store result + SetResult(&result, R_STRING, value); +} int plugin_init_mpd(void) { - AddFunction("mpd::artist", 0, artist); + /* Check for File */ + if (mpd_get(_mpd_dummy) != 1) { + error("Error: Cannot connect to MPD! Is MPD started?"); + return -1; + } + + AddFunction("mpd::artist", 1, artist); AddFunction("mpd::title", 0, title); AddFunction("mpd::album", 0, album); - + AddFunction("mpd::totalTime", 0, totalTime); + AddFunction("mpd::totalTimeSec", 0, totalTimeSec); + AddFunction("mpd::elapsedTime", 0, elapsedTime); + AddFunction("mpd::elapsedTimeSec", 0, elapsedTimeSec); + AddFunction("mpd::bitRate", 0, bitRate); + AddFunction("mpd::getRepeat", 0, getRepeat); + AddFunction("mpd::getRandom", 0, getRandom); + AddFunction("mpd::getRepRand", 0, getRepRand); return 0; } -- cgit v1.2.3