core/playlist: Add new playlist_type struct

I intend to use this for creating playlists with different properties,
such as using the playlist interface to add library paths.

Signed-off-by: Anna Schumaker <Anna@OcarinaProject.net>
This commit is contained in:
Anna Schumaker 2016-04-24 09:57:50 -04:00 committed by Anna Schumaker
parent 140abe79bc
commit e3d4143565
2 changed files with 24 additions and 4 deletions

View File

@ -156,6 +156,13 @@ static struct queue *__pl_system_get_queue(const gchar *name)
}
struct playlist_type pl_system = {
.pl_get_queue = __pl_system_get_queue,
.pl_add_track = __pl_system_add,
.pl_remove_track = __pl_system_remove,
};
void playlist_init(struct queue_ops *ops)
{
queue_init(&playlist_q, Q_ENABLED | Q_REPEAT, ops);
@ -178,19 +185,19 @@ bool playlist_add(enum playlist_t plist, struct track *track)
{
if (!track || __playlist_is_dynamic(plist))
return false;
return __pl_system_add(playlist_names[plist], track);
return pl_system.pl_add_track(playlist_names[plist], track);
}
bool playlist_remove(enum playlist_t plist, struct track *track)
{
if (!track || __playlist_is_dynamic(plist))
return false;
return __pl_system_remove(playlist_names[plist], track);
return pl_system.pl_remove_track(playlist_names[plist], track);
}
bool playlist_has(enum playlist_t plist, struct track *track)
{
struct queue *queue = __pl_system_get_queue(playlist_names[plist]);
struct queue *queue = pl_system.pl_get_queue(playlist_names[plist]);
if (!track || !queue)
return false;
return queue_has(queue, track);
@ -213,6 +220,6 @@ void playlist_select(enum playlist_t plist)
struct queue *playlist_get_queue(enum playlist_t plist)
{
if (__playlist_is_static(plist))
return __pl_system_get_queue(playlist_names[plist]);
return pl_system.pl_get_queue(playlist_names[plist]);
return &playlist_q;
}

View File

@ -19,6 +19,19 @@ enum playlist_t {
PL_LEAST_PLAYED, /* Songs with a below average play count. */
};
struct playlist_type {
/* Called to get the queue for the playlist. */
struct queue *(*pl_get_queue)(const gchar *);
/* Called to add a track to the playlist. */
bool (*pl_add_track)(const gchar *, struct track *);
/* Called to remove a track from the playlist. */
bool (*pl_remove_track)(const gchar *, struct track *);
};
/* Called to initialize the playlist manager. */
void playlist_init(struct queue_ops *);