ocarina/core/playlist.c

107 lines
2.4 KiB
C

/*
* Copyright 2013 (c) Anna Schumaker.
*/
#include <core/playlist.h>
#include <core/playlists/artist.h>
#include <core/playlists/library.h>
#include <core/playlists/system.h>
struct playlist_type *playlist_types[] = {
[PL_SYSTEM] = &pl_system,
[PL_ARTIST] = &pl_artist,
[PL_LIBRARY] = &pl_library,
};
void playlist_init(struct queue_ops *ops)
{
pl_system_init(ops);
pl_artist_init(ops);
pl_library_init(ops);
}
void playlist_deinit()
{
pl_system_deinit();
pl_artist_deinit();
pl_library_deinit();
}
bool playlist_new(enum playlist_type_t type, const gchar *name)
{
return playlist_types[type]->pl_new(name);
}
bool playlist_delete(enum playlist_type_t type, const gchar *name)
{
return playlist_types[type]->pl_delete(name);
}
bool playlist_add(enum playlist_type_t type, const gchar *name,
struct track *track)
{
if (!track)
return false;
return playlist_types[type]->pl_add_track(name, track);
}
bool playlist_remove(enum playlist_type_t type, const gchar *name,
struct track *track)
{
if (!track)
return false;
return playlist_types[type]->pl_remove_track(name, track);
}
void playlist_update(enum playlist_type_t type, const gchar *name)
{
playlist_types[type]->pl_update(name);
}
bool playlist_has(enum playlist_type_t type, const gchar *name,
struct track *track)
{
struct queue *queue = playlist_get_queue(type, name);
if (!track || !queue)
return false;
return queue_has(queue, track);
}
unsigned int playlist_size(enum playlist_type_t type, const gchar *name)
{
struct queue *queue = playlist_get_queue(type, name);
return queue ? queue_size(queue) : 0;
}
void playlist_set_random(enum playlist_type_t type, const gchar *name,
bool enabled)
{
playlist_types[type]->pl_set_flag(name, Q_RANDOM, enabled);
}
bool playlist_get_random(enum playlist_type_t type, const gchar *name)
{
return queue_has_flag(playlist_get_queue(type, name), Q_RANDOM);
}
void playlist_sort(enum playlist_type_t type, const gchar *name,
enum compare_t sort, bool reset)
{
playlist_types[type]->pl_sort(name, sort, reset);
}
struct track *playlist_next(void)
{
return queue_next(playlist_get_queue(PL_SYSTEM, "Collection"));
}
struct track *playlist_prev(void)
{
return queue_next(playlist_get_queue(PL_SYSTEM, "History"));
}
struct queue *playlist_get_queue(enum playlist_type_t type, const gchar *name)
{
return playlist_types[type]->pl_get_queue(name);
}