/******************** Song ingo retrival ************************************/ static int getSong(void) { mpd_Status *status; mpd_InfoEntity *info; /* Get status */ mpd_sendStatusCommand(D.conn); if (error()) return 0; status = mpd_getStatus(D.conn); if (error()) return 0; pdie_on(!status, "get status"); mpd_nextListOkCommand(D.conn); if (error()) { mpd_freeStatus(status); return 0; } /* Copy status */ D.cur.state = status->state; D.cur.songid = status->songid; D.cur.pos = status->elapsedTime; D.cur.len = status->totalTime; mpd_freeStatus(status); /* Same song, return */ if (D.cur.songid == D.old.songid) { return 1; } if (D.info) { mpd_freeInfoEntity(D.info); D.info = 0; } /* Get song */ mpd_sendCurrentSongCommand(D.conn); if (error()) { return 0; } info = mpd_getNextInfoEntity(D.conn); if (error()) { return 0; } if (!info) { return D.cur.state == MPD_STATUS_STATE_PLAY || D.cur.state == MPD_STATUS_STATE_PAUSE; } if (info->type != MPD_INFO_ENTITY_TYPE_SONG) { mpd_freeInfoEntity(info); return 0; } D.info = info; return 1; }
void mpdGetSongTitle() { mpd_InfoEntity * entity; mpd_sendCommandListOkBegin(conn); mpd_sendStatusCommand(conn); mpd_sendCurrentSongCommand(conn); mpd_sendCommandListEnd(conn); if((status = mpd_getStatus(conn))==NULL) { fprintf(stderr,"%s\n",conn->errorStr); mpd_closeConnection(conn); } songname = (char *)malloc(100); mpd_nextListOkCommand(conn); while((entity = mpd_getNextInfoEntity(conn))) { mpd_Song * song = entity->info.song; if(entity->type!=MPD_INFO_ENTITY_TYPE_SONG) { mpd_freeInfoEntity(entity); continue; } if(song->artist) { strcpy(songname, " ["); strcat(songname, song->artist); strcat(songname, " - "); } if(song->album) { strcat(songname, song->album); strcat(songname, " - "); } if(song->title) { songname = strcat(songname, song->title); songname = strcat(songname, "] "); } mpd_freeInfoEntity(entity); } if(conn->error) { fprintf(stderr,"%s\n",conn->errorStr); mpd_closeConnection(conn); } mpd_finishCommand(conn); if(conn->error) { fprintf(stderr,"%s\n",conn->errorStr); mpd_closeConnection(conn); } }
static int mpdclient_playlist_update(void *data) { mpd_Status * status; mpd_InfoEntity *entity; int i; mpd_sendCommandListOkBegin(conn); mpd_sendStatusCommand(conn); mpd_sendPlChangesCommand(conn, cur_playlist); mpd_sendCommandListEnd(conn); if((status = mpd_getStatus(conn))==NULL) { fprintf(stderr,"%s\n",conn->errorStr); mpd_closeConnection(conn); return 1; } cur_playlist = status->playlist; cur_song = status->songid; mpd_nextListOkCommand(conn); evas_event_freeze(evas); while((entity = mpd_getNextInfoEntity(conn))) { if(entity->type!=MPD_INFO_ENTITY_TYPE_SONG) { mpd_freeInfoEntity(entity); continue; } music_song_insert(entity->info.song); mpd_freeInfoEntity(entity); } for (i = status->playlistLength; i < music_song_count(); i++) { music_song_remove(i); } if (status->state == MPD_STATUS_STATE_PLAY || status->state == MPD_STATUS_STATE_PAUSE) { music_song_update(status->song, status->totalTime); } else { music_song_update(-1, 0); } layout_update(status->state == MPD_STATUS_STATE_PLAY, status->volume); evas_event_thaw(evas); mpd_finishCommand(conn); mpd_freeStatus(status); return 1; }
static char *MPD_SongTitle ( void ) { mpd_Status *status; mpd_InfoEntity *entity = NULL; mpd_Song *song = 0; static char title[MP3_MAXSONGTITLE]; title[0] = 0; if(!MP3_Status()) return title; mpd_sendCommandListOkBegin(conn); mpd_sendStatusCommand(conn); mpd_sendCurrentSongCommand(conn); mpd_sendCommandListEnd(conn); if( (status = mpd_getStatus(conn)) == NULL) { return title; } mpd_nextListOkCommand(conn); while((entity = mpd_getNextInfoEntity(conn))) { if(entity->type != MPD_INFO_ENTITY_TYPE_SONG) { mpd_freeInfoEntity(entity); continue; } song = entity->info.song; if(song->title == NULL || song->artist == NULL) Com_sprintf(title, sizeof(title), "%s [%i:%02i]", song->file, status->totalTime / 60, status->totalTime % 60); else Com_sprintf(title, sizeof(title), "%s - %s [%i:%02i]", song->artist, song->title, status->totalTime / 60, status->totalTime % 60); COM_MakePrintable(title); mpd_freeInfoEntity(entity); break; } mpd_freeStatus(status); mpd_finishCommand(conn); return title; }
int cmd_current(mpd_unused int argc, mpd_unused char ** argv, mpd_Connection *conn) { mpd_Status * status; mpd_InfoEntity * entity; mpd_sendCommandListOkBegin(conn); printErrorAndExit(conn); mpd_sendStatusCommand(conn); printErrorAndExit(conn); mpd_sendCurrentSongCommand(conn); printErrorAndExit(conn); mpd_sendCommandListEnd(conn); printErrorAndExit(conn); status = mpd_getStatus(conn); printErrorAndExit(conn); if (status->state == MPD_STATUS_STATE_PLAY || status->state == MPD_STATUS_STATE_PAUSE) { mpd_nextListOkCommand(conn); printErrorAndExit(conn); while((entity = mpd_getNextInfoEntity(conn))) { struct mpd_song *song = entity->info.song; if(entity->type!=MPD_INFO_ENTITY_TYPE_SONG) { mpd_freeInfoEntity(entity); continue; } pretty_print_song(song); printf("\n"); mpd_freeInfoEntity(entity); break; } printErrorAndExit(conn); mpd_finishCommand(conn); printErrorAndExit(conn); } mpd_freeStatus(status); return 0; }