diff --git a/core/audio.c b/core/audio.c index ad7d0879..ad817f40 100644 --- a/core/audio.c +++ b/core/audio.c @@ -77,7 +77,7 @@ static struct track *__audio_next(GstState state) { struct track *track = tempq_next(); if (!track) - track = queue_next(collection_get_queue()); + track = playlist_next(); return __audio_load(track, state); } @@ -211,7 +211,7 @@ struct track *audio_next() struct track *audio_prev() { - return __audio_load_basic(history_prev(), GST_STATE_PLAYING); + return __audio_load_basic(playlist_prev(), GST_STATE_PLAYING); } struct track *audio_eos() diff --git a/core/playlist.c b/core/playlist.c index e96dbc54..29ade58a 100644 --- a/core/playlist.c +++ b/core/playlist.c @@ -63,6 +63,16 @@ void playlist_sort(const gchar *name, enum compare_t sort, bool reset) pl_system.pl_sort(name, sort, reset); } +struct track *playlist_next(void) +{ + return queue_next(playlist_get_queue("Collection")); +} + +struct track *playlist_prev(void) +{ + return queue_next(playlist_get_queue("History")); +} + struct queue *playlist_get_queue(const gchar *name) { return pl_system.pl_get_queue(name); diff --git a/include/core/playlist.h b/include/core/playlist.h index 7ec166da..1fbcc937 100644 --- a/include/core/playlist.h +++ b/include/core/playlist.h @@ -45,6 +45,13 @@ bool playlist_get_random(const gchar *); void playlist_sort(const gchar *, enum compare_t, bool); +/* Called to get the next track from the default playlist. */ +struct track *playlist_next(void); + +/* Called to get a previously played track. */ +struct track *playlist_prev(void); + + /* Called to access the playlist queue. */ struct queue *playlist_get_queue(const gchar *); diff --git a/tests/gui/audio.c b/tests/gui/audio.c index 307a6cec..59c33147 100644 --- a/tests/gui/audio.c +++ b/tests/gui/audio.c @@ -55,6 +55,7 @@ static void test_audio_seek(gint64 pos) static void test_audio() { + struct db_entry *dbe, *next; struct track *track; gchar *duration; int argc = 0; @@ -72,9 +73,16 @@ static void test_audio() collection_add("tests/Music/Hyrule Symphony"); while (idle_run_task()) {}; - track = track_get(0); + db_for_each(dbe, next, track_db_get()) { + if (TRACK(dbe)->tr_track == 1) { + track = TRACK(dbe); + break; + } + } + playlist_add("Favorites", track); playlist_add("Hidden", track); + test_equal(playlist_has("Collection", track), (bool)false); audio_load(track); duration = string_sec2str(track->tr_length); @@ -97,11 +105,11 @@ static void test_audio() test_set_pause_after(0); audio_eos(); - test_equal(audio_cur_track()->tr_track, 1); + test_equal(audio_cur_track()->tr_track, 2); test_str_equal(test_get_pause_text(), "(disabled)"); test_click_button("o_next"); - test_equal(audio_cur_track()->tr_track, 2); + test_equal(audio_cur_track()->tr_track, 3); test_equal(test_get_toggle_state("o_favorite"), (bool)false); test_equal(test_get_toggle_state("o_hide"), (bool)false); @@ -109,15 +117,15 @@ static void test_audio() test_str_equal(test_get_pause_text(), "next track"); audio_eos(); - test_equal(audio_cur_track()->tr_track, 3); + test_equal(audio_cur_track()->tr_track, 4); test_str_equal(test_get_pause_text(), "this track"); audio_eos(); - test_equal(audio_cur_track()->tr_track, 4); + test_equal(audio_cur_track()->tr_track, 5); test_str_equal(test_get_pause_text(), "(disabled)"); test_click_button("o_prev"); - test_equal(audio_cur_track()->tr_track, 3); + test_equal(audio_cur_track()->tr_track, 4); test_click_button("o_pause"); test_audio_seek(71 * GST_SECOND);