core/playlists: Add a pl_next() playlist operation

This is mostly needed so the queued tracks playlist can be saved after
picking a track.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2016-08-05 08:00:13 -04:00
parent 903357395b
commit a775eeb761
7 changed files with 44 additions and 2 deletions

View File

@ -91,12 +91,12 @@ void playlist_sort(enum playlist_type_t type, const gchar *name,
struct track *playlist_next(void)
{
return queue_next(playlist_get_queue(PL_SYSTEM, "Collection"));
return playlist_types[PL_SYSTEM]->pl_next("Collection");
}
struct track *playlist_prev(void)
{
return queue_next(playlist_get_queue(PL_SYSTEM, "History"));
return playlist_types[PL_SYSTEM]->pl_next("History");
}
struct queue *playlist_get_queue(enum playlist_type_t type, const gchar *name)

View File

@ -82,6 +82,12 @@ static void pl_artist_sort(const gchar *name, enum compare_t sort, bool reset)
playlist_generic_sort(playlist, sort, reset);
}
static struct track *pl_artist_next(const gchar *name)
{
struct playlist *playlist = __artist_pl_lookup(name);
return playlist_generic_next(playlist);
}
struct playlist_type pl_artist = {
.pl_get_queue = pl_artist_get_queue,
@ -92,6 +98,7 @@ struct playlist_type pl_artist = {
.pl_update = pl_artist_update,
.pl_set_flag = pl_artist_set_flag,
.pl_sort = pl_artist_sort,
.pl_next = pl_artist_next,
};

View File

@ -92,3 +92,8 @@ void playlist_generic_sort(struct playlist *playlist,
{
queue_sort(&playlist->pl_queue, sort, reset);
}
struct track *playlist_generic_next(struct playlist *playlist)
{
return queue_next(&playlist->pl_queue);
}

View File

@ -204,6 +204,12 @@ static void pl_library_sort(const gchar *name, enum compare_t sort, bool reset)
playlist_generic_sort(playlist, sort, reset);
}
static struct track *pl_library_next(const gchar *name)
{
struct playlist *playlist = __lib_pl_lookup(name);
return playlist_generic_next(playlist);
}
struct playlist_type pl_library = {
.pl_get_queue = pl_library_get_queue,
@ -214,6 +220,7 @@ struct playlist_type pl_library = {
.pl_update = pl_library_update,
.pl_set_flag = pl_library_set_flag,
.pl_sort = pl_library_sort,
.pl_next = pl_library_next,
};

View File

@ -64,6 +64,7 @@ static struct sys_playlist sys_favorites = {
.spl_remove = sys_pl_favorites_remove,
.spl_set_flag = playlist_generic_set_flag,
.spl_sort = playlist_generic_sort,
.spl_next = playlist_generic_next,
};
@ -99,6 +100,7 @@ static struct sys_playlist sys_hidden = {
.spl_remove = sys_pl_hidden_remove,
.spl_set_flag = playlist_generic_set_flag,
.spl_sort = playlist_generic_sort,
.spl_next = playlist_generic_next,
};
@ -164,6 +166,7 @@ static struct sys_playlist sys_collection = {
.spl_update = sys_pl_collection_update,
.spl_set_flag = sys_pl_collection_set_flag,
.spl_sort = sys_pl_collection_sort,
.spl_next = playlist_generic_next,
};
@ -192,6 +195,7 @@ static struct sys_playlist sys_history = {
.spl_remove = playlist_generic_remove_track,
.spl_set_flag = playlist_noop_set_flag,
.spl_sort = playlist_noop_sort,
.spl_next = playlist_generic_next,
};
@ -221,6 +225,7 @@ static struct sys_playlist sys_unplayed = {
.spl_update = sys_pl_unplayed_update,
.spl_set_flag = playlist_generic_set_flag,
.spl_sort = playlist_generic_sort,
.spl_next = playlist_generic_next,
};
@ -252,6 +257,7 @@ static struct sys_playlist sys_most_played = {
.spl_update = sys_pl_most_played_update,
.spl_set_flag = playlist_generic_set_flag,
.spl_sort = playlist_generic_sort,
.spl_next = playlist_generic_next,
};
@ -283,6 +289,7 @@ static struct sys_playlist sys_least_played = {
.spl_update = sys_pl_least_played_update,
.spl_set_flag = playlist_generic_set_flag,
.spl_sort = playlist_generic_sort,
.spl_next = playlist_generic_next,
};
@ -399,6 +406,14 @@ static void pl_system_sort(const gchar *name, enum compare_t sort, bool reset)
sys_pl->spl_sort(&sys_pl->spl_playlist, sort, reset);
}
static struct track *pl_system_next(const gchar *name)
{
struct sys_playlist *sys_pl = __sys_pl_lookup(name);
if (sys_pl)
return sys_pl->spl_next(&sys_pl->spl_playlist);
return NULL;
}
struct playlist_type pl_system = {
.pl_get_queue = pl_system_get_queue,
@ -409,6 +424,7 @@ struct playlist_type pl_system = {
.pl_update = pl_system_update,
.pl_set_flag = pl_system_set_flag,
.pl_sort = pl_system_sort,
.pl_next = pl_system_next,
};

View File

@ -26,6 +26,7 @@ struct sys_playlist {
bool (*spl_update)(struct playlist *, struct track *);
void (*spl_set_flag)(struct playlist *, enum queue_flags, bool);
void (*spl_sort)(struct playlist *, enum compare_t, bool);
struct track *(*spl_next)(struct playlist *);
};

View File

@ -51,6 +51,9 @@ struct playlist_type {
/* Called to sort a playlist. */
void (*pl_sort)(const gchar *, enum compare_t, bool);
/* Called to pick the next track from a playlist. */
struct track *(*pl_next)(const gchar *);
};
@ -80,5 +83,8 @@ void playlist_generic_set_flag(struct playlist *, enum queue_flags, bool);
/* Generic playlist sorting operation. */
void playlist_generic_sort(struct playlist *, enum compare_t, bool);
/* Generic playlist next track operation. */
struct track *playlist_generic_next(struct playlist *);
#endif /* OCARINA_CORE_PLAYLISTS_TYPE_H */