diff options
-rw-r--r-- | src/ui.c | 76 |
1 files changed, 60 insertions, 16 deletions
@@ -844,6 +844,49 @@ size_t BarUiListSongs (const BarApp_t * const app, return i; } +enum { + NO_DURATION = 0, +}; +#define NO_POSTFIX "" + +/* Print song information to the eventcmd stream + * @param Event command stream. + * @param Song information. + * @param Printed key name postfix, use NO_POSTFIX to print bare keys. + * @param Override song length from song parameter, use NO_DURATION if unavailable. + */ +static void BarUiEventcmdPrintSong (FILE * restrict stream, + const PianoSong_t * const song, const char * const postfix, + const unsigned int songDuration) { + assert (song != NULL); + assert (stream != NULL); + assert (postfix != NULL); + + fprintf (stream, + "artist%s=%s\n" + "title%s=%s\n" + "album%s=%s\n" + "coverArt%s=%s\n" + "rating%s=%i\n" + "detailUrl%s=%s\n" + "songDuration%s=%u\n", + postfix, + song->artist, + postfix, + song->title, + postfix, + song->album, + postfix, + song->coverArt, + postfix, + song->rating, + postfix, + song->detailUrl, + postfix, + songDuration == NO_DURATION ? song->length : songDuration + ); +} + /* Excute external event handler * @param settings containing the cmdline * @param event type @@ -900,36 +943,37 @@ void BarUiStartEventCmd (const BarSettings_t *settings, const char *type, pthread_mutex_unlock (&player->lock); fprintf (pipeWriteFd, - "artist=%s\n" - "title=%s\n" - "album=%s\n" - "coverArt=%s\n" "stationName=%s\n" "songStationName=%s\n" "pRet=%i\n" "pRetStr=%s\n" "wRet=%i\n" "wRetStr=%s\n" - "songDuration=%u\n" - "songPlayed=%u\n" - "rating=%i\n" - "detailUrl=%s\n", - curSong == NULL ? "" : curSong->artist, - curSong == NULL ? "" : curSong->title, - curSong == NULL ? "" : curSong->album, - curSong == NULL ? "" : curSong->coverArt, + "songPlayed=%u\n", curStation == NULL ? "" : curStation->name, songStation == NULL ? "" : songStation->name, pRet, PianoErrorToStr (pRet), wRet, curl_easy_strerror (wRet), - songDuration, - songPlayed, - curSong == NULL ? PIANO_RATE_NONE : curSong->rating, - curSong == NULL ? "" : curSong->detailUrl + songPlayed ); + if (curSong != NULL) { + BarUiEventcmdPrintSong (pipeWriteFd, curSong, NO_POSTFIX, songDuration); + } + + const PianoSong_t *nextSong = PianoListNextP (curSong); + if (nextSong != NULL) { + unsigned int i = 0; + PianoListForeachP (nextSong) { + char postfix[16]; + snprintf (postfix, sizeof(postfix)-1, "Next%i", i); + BarUiEventcmdPrintSong (pipeWriteFd, nextSong, postfix, NO_DURATION); + i++; + } + } + if (stations != NULL) { /* send station list */ PianoStation_t **sortedStations = NULL; |