diff options
Diffstat (limited to 'src/player.c')
| -rw-r--r-- | src/player.c | 65 |
1 files changed, 33 insertions, 32 deletions
diff --git a/src/player.c b/src/player.c index 2a2b8a9..41acbc9 100644 --- a/src/player.c +++ b/src/player.c @@ -24,6 +24,7 @@ struct player *player; static void player_clear_msg(void); static int handle_mpd_status(int status); +static void player_play_next(struct track *track); static void player_clear_msg(void) @@ -53,6 +54,37 @@ handle_mpd_status(int status) } void +player_play_next(struct track *prev) +{ + struct link *iter; + struct track *track; + int index; + + if (list_empty(&player->playlist)) + return; + + iter = NULL; + if (player->shuffle) { + /* TODO better algorithm for random sequence */ + index = rand() % list_len(&player->playlist); + iter = list_at(&player->playlist, index); + ASSERT(iter != NULL); + } else if (player->loaded) { + for (LIST_ITER(&player->playlist, iter)) { + track = UPCAST(iter, struct ref)->data; + if (track == prev) + break; + } + if (iter) iter = iter->next; + } + + if (!iter) iter = list_at(&player->playlist, 0); + track = UPCAST(iter, struct ref)->data; + + player_play_track(track); +} + +void player_init(void) { player = malloc(sizeof(struct player)); @@ -87,7 +119,7 @@ player_init(void) } void -player_free(void) +player_deinit(void) { struct link *iter; @@ -105,37 +137,6 @@ player_free(void) } void -player_play_next(struct track *prev) -{ - struct link *iter; - struct track *track; - int index; - - if (list_empty(&player->playlist)) - return; - - iter = NULL; - if (player->shuffle) { - /* TODO better algorithm for random sequence */ - index = rand() % list_len(&player->playlist); - iter = list_at(&player->playlist, index); - ASSERT(iter != NULL); - } else if (player->loaded) { - for (LIST_ITER(&player->playlist, iter)) { - track = UPCAST(iter, struct ref)->data; - if (track == prev) - break; - } - if (iter) iter = iter->next; - } - - if (!iter) iter = list_at(&player->playlist, 0); - track = UPCAST(iter, struct ref)->data; - - player_play_track(track); -} - -void player_update(void) { struct mpd_status *status; |
