Пример #1
0
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);
}
Пример #2
0
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;
}
Пример #3
0
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;
}
Пример #4
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));
	}

}