int currentSongInPlaylist(FILE * fp) { if(playlist_state!=PLAYLIST_STATE_PLAY) return 0; playlist_stopOnError = 0; syncPlaylistWithQueue(0); if(playlist.current>= 0 && playlist.current<playlist.length) { return playPlaylistOrderNumber(fp,playlist.current); } else return stopPlaylist(fp);; return 0; }
void playPlaylistIfPlayerStopped() { if(getPlayerState()==PLAYER_STATE_STOP) { int error = getPlayerError(); if(error==PLAYER_ERROR_NOERROR) playlist_errorCount = 0; else playlist_errorCount++; if(playlist_state==PLAYLIST_STATE_PLAY && ( (playlist_stopOnError && error!=PLAYER_ERROR_NOERROR) || error==PLAYER_ERROR_AUDIO || error==PLAYER_ERROR_SYSTEM || playlist_errorCount>=playlist.length)) { stopPlaylist(stderr); } else if(playlist_noGoToNext) currentSongInPlaylist(stderr); else nextSongInPlaylist(stderr); } }
int clearPlaylist(FILE * fp) { int i; if(stopPlaylist(fp)<0) return -1; for(i=0;i<playlist.length;i++) { if(playlist.songs[i]->type == SONG_TYPE_URL) { freeJustSong(playlist.songs[i]); } playlist.idToPosition[playlist.positionToId[i]] = -1; playlist.songs[i] = NULL; } playlist.length = 0; playlist.current = -1; incrPlaylistVersion(); return 0; }
int nextSongInPlaylist(FILE * fp) { if(playlist_state!=PLAYLIST_STATE_PLAY) return 0; syncPlaylistWithQueue(0); playlist_stopOnError = 0; if(playlist.current<playlist.length-1) { return playPlaylistOrderNumber(fp,playlist.current+1); } else if(playlist.length && playlist.repeat) { if(playlist.random) randomizeOrder(0,playlist.length-1); return playPlaylistOrderNumber(fp,0); } else { incrPlaylistCurrent(); return stopPlaylist(fp);; } return 0; }
int playPlaylistOrderNumber(FILE * fp, int orderNum) { if(playerStop(fp)<0) return -1; playlist_state = PLAYLIST_STATE_PLAY; playlist_noGoToNext = 0; playlist.queued = -1; playlist_queueError = 0; DEBUG("playlist: play %i:\"%s\"\n",orderNum, getSongUrl(playlist.songs[playlist.order[orderNum]])); if(playerPlay(fp,(playlist.songs[playlist.order[orderNum]])) < 0) { stopPlaylist(fp); return -1; } else playlist.current++; playlist.current = orderNum; return 0; }
int handleStop(FILE * fp, unsigned int * permission, int argArrayLength, char ** argArray) { return stopPlaylist(fp); }