core/playlist: Add playlist_{next, prev}() functions

Signed-off-by: Anna Schumaker <Anna@OcarinaProject.net>
This commit is contained in:
Anna Schumaker 2016-05-04 09:24:10 -04:00 committed by Anna Schumaker
parent efae58c356
commit 8eaf6506e8
4 changed files with 33 additions and 8 deletions

View File

@ -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()

View File

@ -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);

View File

@ -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 *);

View File

@ -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);