diff options
-rw-r--r-- | src/playlist.c | 20 | ||||
-rw-r--r-- | src/playlist.h | 14 |
2 files changed, 23 insertions, 11 deletions
diff --git a/src/playlist.c b/src/playlist.c index f6e3d6e2f..1376c8098 100644 --- a/src/playlist.c +++ b/src/playlist.c @@ -75,8 +75,6 @@ static GRand *g_rand; /** the global playlist object */ static Playlist playlist; unsigned playlist_max_length; -static int playlist_stopOnError; -static unsigned playlist_errorCount; bool playlist_saveAbsolutePaths = DEFAULT_PLAYLIST_SAVE_ABSOLUTE_PATHS; @@ -743,8 +741,8 @@ enum playlist_result playPlaylist(int song) i = playlist.current; } - playlist_stopOnError = false; - playlist_errorCount = 0; + playlist.stop_on_error = false; + playlist.error_count = 0; playPlaylistOrderNumber(i); return PLAYLIST_RESULT_SUCCESS; @@ -808,7 +806,7 @@ void nextSongInPlaylist(void) syncPlaylistWithQueue(); - playlist_stopOnError = 0; + playlist.stop_on_error = false; /* determine the next song from the queue's order list */ @@ -849,13 +847,13 @@ static void playPlaylistIfPlayerStopped(void) error = getPlayerError(); if (error == PLAYER_ERROR_NOERROR) - playlist_errorCount = 0; + playlist.error_count = 0; else - playlist_errorCount++; + ++playlist.error_count; - if ((playlist_stopOnError && error != PLAYER_ERROR_NOERROR) || + if ((playlist.stop_on_error && error != PLAYER_ERROR_NOERROR) || error == PLAYER_ERROR_AUDIO || error == PLAYER_ERROR_SYSTEM || - playlist_errorCount >= queue_length(&playlist.queue)) + playlist.error_count >= queue_length(&playlist.queue)) /* too many errors, or critical error: stop playback */ stopPlaylist(); @@ -1157,8 +1155,8 @@ enum playlist_result seekSongInPlaylist(unsigned song, float seek_time) i = song; clearPlayerError(); - playlist_stopOnError = 1; - playlist_errorCount = 0; + playlist.stop_on_error = true; + playlist.error_count = 0; if (playlist.playing) { if (playlist.queued >= 0) diff --git a/src/playlist.h b/src/playlist.h index eaaba9647..7a6a3a8d7 100644 --- a/src/playlist.h +++ b/src/playlist.h @@ -56,6 +56,20 @@ typedef struct _Playlist { bool playing; /** + * If true, then any error is fatal; if false, MPD will + * attempt to play the next song on non-fatal errors. During + * seeking, this flag is set. + */ + bool stop_on_error; + + /** + * Number of errors since playback was started. If this + * number exceeds the length of the playlist, MPD gives up, + * because all songs have been tried. + */ + unsigned error_count; + + /** * The "current song pointer". This is the song which is * played when we get the "play" command. It is also the song * which is currently being played. |