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(); struct track *track = tempq_next();
if (!track) if (!track)
track = queue_next(collection_get_queue()); track = playlist_next();
return __audio_load(track, state); return __audio_load(track, state);
} }
@ -211,7 +211,7 @@ struct track *audio_next()
struct track *audio_prev() 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() 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); 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) struct queue *playlist_get_queue(const gchar *name)
{ {
return pl_system.pl_get_queue(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); 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. */ /* Called to access the playlist queue. */
struct queue *playlist_get_queue(const gchar *); struct queue *playlist_get_queue(const gchar *);

View File

@ -55,6 +55,7 @@ static void test_audio_seek(gint64 pos)
static void test_audio() static void test_audio()
{ {
struct db_entry *dbe, *next;
struct track *track; struct track *track;
gchar *duration; gchar *duration;
int argc = 0; int argc = 0;
@ -72,9 +73,16 @@ static void test_audio()
collection_add("tests/Music/Hyrule Symphony"); collection_add("tests/Music/Hyrule Symphony");
while (idle_run_task()) {}; 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("Favorites", track);
playlist_add("Hidden", track); playlist_add("Hidden", track);
test_equal(playlist_has("Collection", track), (bool)false);
audio_load(track); audio_load(track);
duration = string_sec2str(track->tr_length); duration = string_sec2str(track->tr_length);
@ -97,11 +105,11 @@ static void test_audio()
test_set_pause_after(0); test_set_pause_after(0);
audio_eos(); 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_str_equal(test_get_pause_text(), "(disabled)");
test_click_button("o_next"); 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_favorite"), (bool)false);
test_equal(test_get_toggle_state("o_hide"), (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"); test_str_equal(test_get_pause_text(), "next track");
audio_eos(); 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"); test_str_equal(test_get_pause_text(), "this track");
audio_eos(); 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_str_equal(test_get_pause_text(), "(disabled)");
test_click_button("o_prev"); 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_click_button("o_pause");
test_audio_seek(71 * GST_SECOND); test_audio_seek(71 * GST_SECOND);