int mpd_playlist_queue_commit(MpdObj *mi) { if(mi->queue == NULL) { debug_printf(DEBUG_WARNING,"mi->queue is empty"); return MPD_PLAYLIST_QUEUE_EMPTY; } if(!mpd_check_connected(mi)) { debug_printf(DEBUG_WARNING,"not connected\n"); return MPD_NOT_CONNECTED; } if(mpd_lock_conn(mi)) { debug_printf(DEBUG_WARNING,"lock failed\n"); return MPD_LOCK_FAILED; } mpd_sendCommandListBegin(mi->connection); /* get first item */ mi->queue = mi->queue->first; while(mi->queue != NULL) { if(mi->queue->type == MPD_QUEUE_ADD) { if(mi->queue->path != NULL) { mpd_sendAddCommand(mi->connection, mi->queue->path); } } else if(mi->queue->type == MPD_QUEUE_LOAD) { if(mi->queue->path != NULL) { mpd_sendLoadCommand(mi->connection, mi->queue->path); } } else if (mi->queue->type == MPD_QUEUE_DELETE_ID) { if(mi->queue->id >= 0) { mpd_sendDeleteIdCommand(mi->connection, mi->queue->id); } } else if (mi->queue->type == MPD_QUEUE_DELETE_POS) { if(mi->queue->id >= 0) { mpd_sendDeleteCommand(mi->connection, mi->queue->id); } } mpd_queue_get_next(mi); } mpd_sendCommandListEnd(mi->connection); mpd_finishCommand(mi->connection); mpd_unlock_conn(mi); mpd_status_update(mi); return MPD_OK; }
int cmd_crop(mpd_unused int argc, mpd_unused char **argv, mpd_Connection *conn) { mpd_Status *status = getStatus( conn ); int length = ( status->playlistLength - 1 ); if( status->playlistLength == 0 ) { mpd_freeStatus(status); DIE( "You have to have a playlist longer than 1 song in length to crop" ); } else if( status->state == 3 || status->state == 2 ) { /* If playing or paused */ mpd_sendCommandListBegin( conn ); printErrorAndExit( conn ); while( length >= 0 ) { if( length != status->song ) { mpd_sendDeleteCommand( conn, length ); printErrorAndExit( conn ); } length--; } mpd_sendCommandListEnd( conn ); my_finishCommand( conn ); mpd_freeStatus( status ); return ( 0 ); } else { mpd_freeStatus(status); DIE( "You need to be playing to crop the playlist\n" ); } }
int cmd_del ( int argc, char ** argv, mpd_Connection * conn ) { int i,j; char * s; char * t; char * t2; int range[2]; int songsDeleted = 0; int plLength = 0; char * songsToDel; mpd_Status * status; status = getStatus(conn); plLength = status->playlistLength; songsToDel = malloc(plLength); memset(songsToDel,0,plLength); for(i=0;i<argc;i++) { if(argv[i][0]=='#') s = &(argv[i][1]); else s = argv[i]; range[0] = strtol(s,&t,10); /* If argument is 0 current song and we're not stopped */ if(range[0] == 0 && strlen(s) == 1 && \ (status->state == MPD_STATUS_STATE_PLAY || status->state == MPD_STATUS_STATE_PAUSE)) range[0] = status->song+1; if(s==t) DIE("error parsing song numbers from: %s\n",argv[i]); else if(*t=='-') { range[1] = strtol(t+1,&t2,10); if(t+1==t2 || *t2!='\0') DIE("error parsing range from: %s\n",argv[i]); } else if(*t==')' || *t=='\0') range[1] = range[0]; else DIE("error parsing song numbers from: %s\n",argv[i]); if(range[0]<=0 || range[1]<=0) { if (range[0]==range[1]) DIE("song number must be positive: %i\n",range[0]); else DIE("song numbers must be positive: %i to %i\n",range[0],range[1]); } if(range[1]<range[0]) DIE("song range must be from low to high: %i to %i\n",range[0],range[1]); if(range[1]>plLength) DIE("song number does not exist: %i\n",range[1]); for(j=range[0];j<=range[1];j++) songsToDel[j-1] = 1; } mpd_sendCommandListBegin(conn); printErrorAndExit(conn); for(i=0;i<plLength;i++) { if(songsToDel[i]) { mpd_sendDeleteCommand(conn,i-songsDeleted); printErrorAndExit(conn); songsDeleted++; } } mpd_sendCommandListEnd(conn); my_finishCommand(conn); mpd_freeStatus(status); free(songsToDel); return 0; }