diff --git a/core/playlist.c b/core/playlist.c index 240a6673..f6e46fd2 100644 --- a/core/playlist.c +++ b/core/playlist.c @@ -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; } diff --git a/include/core/playlist.h b/include/core/playlist.h index 9bc85124..54fbc795 100644 --- a/include/core/playlist.h +++ b/include/core/playlist.h @@ -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 *);