MpdData * mpd_playlist_get_changes(MpdObj *mi,int old_playlist_id) { MpdData *data = NULL; mpd_InfoEntity *ent = NULL; if(!mpd_check_connected(mi)) { debug_printf(DEBUG_WARNING,"not connected\n"); return NULL; } if(mpd_lock_conn(mi)) { debug_printf(DEBUG_WARNING,"lock failed\n"); return NULL; } if(old_playlist_id == -1) { debug_printf(DEBUG_INFO,"get fresh playlist\n"); mpd_sendPlChangesCommand (mi->connection, 0); /* mpd_sendPlaylistIdCommand(mi->connection, -1); */ } else { mpd_sendPlChangesCommand (mi->connection, old_playlist_id); } while (( ent = mpd_getNextInfoEntity(mi->connection)) != NULL) { if(ent->type == MPD_INFO_ENTITY_TYPE_SONG) { data = mpd_new_data_struct_append(data); data->type = MPD_DATA_TYPE_SONG; data->song = ent->info.song; ent->info.song = NULL; } mpd_freeInfoEntity(ent); } mpd_finishCommand(mi->connection); /* unlock */ if(mpd_unlock_conn(mi)) { debug_printf(DEBUG_WARNING,"mpd_playlist_get_changes: unlock failed.\n"); mpd_data_free(data); return NULL; } if(data == NULL) { return NULL; } return mpd_data_get_first(data); }
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; }
int main(int argc, char ** argv) { char *string; mpd_Connection * conn; conn = mpd_newConnection("192.150.0.108",6600,10); if(conn->error) { fprintf(stderr,"%s\n",conn->errorStr); mpd_closeConnection(conn); return -1; } int i=0; // for(i=0;i<1000;i++) // { /*/ mpd_sendCommandsCommand(conn); while (( string = mpd_getNextCommand(conn)) != NULL) { //printf("%s\n", string); free(string); } mpd_finishCommand(conn); */ // } // // // // for(i=0;i<100;i++) { mpd_sendPlChangesCommand(conn,0); mpd_InfoEntity *ent = NULL; while((ent = mpd_getNextInfoEntity(conn)) != NULL){ // printf("%s\n", ent->info.song->artist); mpd_freeInfoEntity(ent); } } mpd_closeConnection(conn); return 0; }
void MpdClient::updatePlaylist(long long version) { if (version < 0) mpd_sendPlChangesCommand(conn, version); else mpd_sendPlaylistInfoCommand(conn, -1); mpd_InfoEntity *entity; while ((entity = mpd_getNextInfoEntity(conn))) { assert(entity->type == MPD_INFO_ENTITY_TYPE_SONG); mpd_Song *song = mpd_songDup(entity->info.song); mpd_freeInfoEntity(entity); assert(song->pos <= playlist.size()); if (song->pos == playlist.size()) playlist += song; else { mpd_freeSong(playlist[song->pos]); playlist[song->pos] = song; } emit(changedSong(song)); } mpd_finishCommand(conn); /* remove extra songs if the playlist was shortened */ for (int i = playlist.size() - 1; i >= status->playlistLength; i--) { mpd_freeSong(playlist[i]); playlist.removeAt(i); emit(changedSong(NULL)); } }