diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/playlist.c | 59 | ||||
-rw-r--r-- | src/playlist.h | 6 |
2 files changed, 32 insertions, 33 deletions
diff --git a/src/playlist.c b/src/playlist.c index 0eb0f7da3..958b6fe14 100644 --- a/src/playlist.c +++ b/src/playlist.c @@ -43,9 +43,6 @@ #include <stdlib.h> #include <errno.h> -#define PLAYLIST_STATE_STOP 0 -#define PLAYLIST_STATE_PLAY 1 - #define PLAYLIST_PREV_UNLESS_ELAPSED 10 #define PLAYLIST_STATE_FILE_STATE "state: " @@ -70,7 +67,6 @@ static GRand *g_rand; static Playlist playlist; -static int playlist_state = PLAYLIST_STATE_STOP; unsigned playlist_max_length; static int playlist_stopOnError; static unsigned playlist_errorCount; @@ -104,10 +100,11 @@ static void incrPlaylistCurrent(void) static void playlist_tag_event(void) { - if (playlist_state != PLAYLIST_STATE_PLAY || - playlist.current < 0) + if (!playlist.playing) return; + assert(playlist.current >= 0); + queue_modify(&playlist.queue, playlist.current); idle_add(IDLE_PLAYLIST); } @@ -179,8 +176,8 @@ static void playlist_save(FILE *fp) void savePlaylistState(FILE *fp) { fprintf(fp, "%s", PLAYLIST_STATE_FILE_STATE); - switch (playlist_state) { - case PLAYLIST_STATE_PLAY: + + if (playlist.playing) { switch (getPlayerState()) { case PLAYER_STATE_PAUSE: fprintf(fp, "%s\n", PLAYLIST_STATE_FILE_STATE_PAUSE); @@ -193,11 +190,9 @@ void savePlaylistState(FILE *fp) playlist.current)); fprintf(fp, "%s%i\n", PLAYLIST_STATE_FILE_TIME, getPlayerElapsedTime()); - break; - default: + } else fprintf(fp, "%s\n", PLAYLIST_STATE_FILE_STATE_STOP); - break; - } + fprintf(fp, "%s%i\n", PLAYLIST_STATE_FILE_RANDOM, playlist.queue.random); fprintf(fp, "%s%i\n", PLAYLIST_STATE_FILE_REPEAT, @@ -513,7 +508,7 @@ addSongToPlaylist(struct song *song, unsigned *added_id) if (queue_is_full(&playlist.queue)) return PLAYLIST_RESULT_TOO_LARGE; - if (playlist_state == PLAYLIST_STATE_PLAY && playlist.queued >= 0 && + if (playlist.playing && playlist.queued >= 0 && playlist.current == (int)queue_length(&playlist.queue) - 1) clearPlayerQueue(); @@ -548,7 +543,7 @@ enum playlist_result swapSongsInPlaylist(unsigned song1, unsigned song2) !queue_valid_position(&playlist.queue, song2)) return PLAYLIST_RESULT_BAD_RANGE; - if (playlist_state == PLAYLIST_STATE_PLAY && playlist.queued >= 0) { + if (playlist.playing && playlist.queued >= 0) { unsigned queuedSong = queue_order_to_position(&playlist.queue, playlist.queued); unsigned currentSong = queue_order_to_position(&playlist.queue, @@ -598,13 +593,12 @@ enum playlist_result deleteFromPlaylist(unsigned song) songOrder = queue_position_to_order(&playlist.queue, song); - if (playlist_state == PLAYLIST_STATE_PLAY && playlist.queued >= 0 + if (playlist.playing && playlist.queued >= 0 && (playlist.queued == (int)songOrder || playlist.current == (int)songOrder)) clearPlayerQueue(); - if (playlist_state != PLAYLIST_STATE_STOP - && playlist.current == (int)songOrder) { + if (playlist.playing && playlist.current == (int)songOrder) { /*if(playlist.current>=playlist.length) return playerStop(fd); else return playPlaylistOrderNumber(fd,playlist.current); */ playerWait(); @@ -656,7 +650,7 @@ void stopPlaylist(void) g_debug("playlist: stop"); playerWait(); playlist.queued = -1; - playlist_state = PLAYLIST_STATE_STOP; + playlist.playing = false; playlist_noGoToNext = 0; if (playlist.queue.random) { @@ -675,7 +669,7 @@ static void playPlaylistOrderNumber(int orderNum) struct song *song; char *uri; - playlist_state = PLAYLIST_STATE_PLAY; + playlist.playing = true; playlist_noGoToNext = 0; playlist.queued = -1; @@ -699,7 +693,7 @@ enum playlist_result playPlaylist(int song, int stopOnError) if (queue_is_empty(&playlist.queue)) return PLAYLIST_RESULT_SUCCESS; - if (playlist_state == PLAYLIST_STATE_PLAY) { + if (playlist.playing) { playerSetPause(0); return PLAYLIST_RESULT_SUCCESS; } @@ -711,15 +705,14 @@ enum playlist_result playPlaylist(int song, int stopOnError) return PLAYLIST_RESULT_BAD_RANGE; if (playlist.queue.random) { - if (song == -1 && playlist_state == PLAYLIST_STATE_PLAY) { + if (song == -1 && playlist.playing) { queue_shuffle_order(&playlist.queue); } else { if (song >= 0) i = queue_position_to_order(&playlist.queue, song); - if (playlist_state == PLAYLIST_STATE_STOP) { + if (!playlist.playing) playlist.current = 0; - } queue_swap_order(&playlist.queue, i, playlist.current); @@ -753,7 +746,7 @@ static void playPlaylistIfPlayerStopped(void); void syncPlayerAndPlaylist(void) { - if (playlist_state != PLAYLIST_STATE_PLAY) + if (!playlist.playing) return; if (getPlayerState() == PLAYER_STATE_STOP) @@ -767,7 +760,7 @@ void syncPlayerAndPlaylist(void) static void currentSongInPlaylist(void) { - if (playlist_state != PLAYLIST_STATE_PLAY) + if (!playlist.playing) return; playlist_stopOnError = 0; @@ -784,7 +777,7 @@ void nextSongInPlaylist(void) { int next_order; - if (playlist_state != PLAYLIST_STATE_PLAY) + if (!playlist.playing) return; assert(!queue_is_empty(&playlist.queue)); @@ -819,7 +812,7 @@ static void playPlaylistIfPlayerStopped(void) else playlist_errorCount++; - if (playlist_state == PLAYLIST_STATE_PLAY + if (playlist.playing && ((playlist_stopOnError && error != PLAYER_ERROR_NOERROR) || error == PLAYER_ERROR_AUDIO || error == PLAYER_ERROR_SYSTEM @@ -847,7 +840,7 @@ void setPlaylistRepeatStatus(bool status) if (status == playlist.queue.repeat) return; - if (playlist_state == PLAYLIST_STATE_PLAY && + if (playlist.playing && playlist.queue.repeat && playlist.queued == 0) clearPlayerQueue(); @@ -885,7 +878,7 @@ enum playlist_result moveSongInPlaylist(unsigned from, int to) to = (currentSong + abs(to)) % queue_length(&playlist.queue); } - if (playlist_state == PLAYLIST_STATE_PLAY && playlist.queued >= 0) { + if (playlist.playing && playlist.queued >= 0) { int queuedSong = queue_order_to_position(&playlist.queue, playlist.queued); if (queuedSong == (int)from || queuedSong == to @@ -938,7 +931,7 @@ static void orderPlaylist(void) playlist.current = queue_order_to_position(&playlist.queue, playlist.current); - if (playlist_state == PLAYLIST_STATE_PLAY && playlist.queued >= 0) + if (playlist.playing && playlist.queued >= 0) clearPlayerQueue(); queue_restore_order(&playlist.queue); @@ -982,7 +975,7 @@ void previousSongInPlaylist(void) lastTime += diff; - if (playlist_state != PLAYLIST_STATE_PLAY) + if (!playlist.playing) return; syncPlaylistWithQueue(); @@ -1005,7 +998,7 @@ void shufflePlaylist(void) unsigned i; if (queue_length(&playlist.queue) > 1) { - if (playlist_state == PLAYLIST_STATE_PLAY) { + if (playlist.playing) { if (playlist.queued >= 0) clearPlayerQueue(); @@ -1101,7 +1094,7 @@ enum playlist_result seekSongInPlaylist(unsigned song, float seek_time) playlist_stopOnError = 1; playlist_errorCount = 0; - if (playlist_state == PLAYLIST_STATE_PLAY) { + if (playlist.playing) { if (playlist.queued >= 0) clearPlayerQueue(); } else diff --git a/src/playlist.h b/src/playlist.h index 330eba6ea..5e0b84c5e 100644 --- a/src/playlist.h +++ b/src/playlist.h @@ -50,6 +50,12 @@ typedef struct _Playlist { struct queue queue; /** + * This value is true if the player is currently playing (or + * should be playing). + */ + bool playing; + + /** * 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. |