2015-12-10 13:59:21 -05:00
|
|
|
/*
|
2013-12-22 17:24:09 -05:00
|
|
|
* Copyright 2013 (c) Anna Schumaker.
|
|
|
|
*/
|
2014-06-05 10:19:22 -04:00
|
|
|
#include <core/playlist.h>
|
2016-05-09 07:52:10 -04:00
|
|
|
#include <core/playlists/library.h>
|
2016-04-24 10:36:15 -04:00
|
|
|
#include <core/playlists/system.h>
|
2013-12-22 17:24:09 -05:00
|
|
|
|
2016-05-06 08:05:21 -04:00
|
|
|
struct playlist_type *playlist_types[] = {
|
|
|
|
[PL_SYSTEM] = &pl_system,
|
2016-05-09 07:52:10 -04:00
|
|
|
[PL_LIBRARY] = &pl_library,
|
2016-05-06 08:05:21 -04:00
|
|
|
};
|
|
|
|
|
2015-12-10 10:55:53 -05:00
|
|
|
|
2015-12-09 08:11:21 -05:00
|
|
|
void playlist_init(struct queue_ops *ops)
|
2014-05-18 21:09:46 -04:00
|
|
|
{
|
2016-04-24 10:36:15 -04:00
|
|
|
pl_system_init(ops);
|
2016-05-09 07:52:10 -04:00
|
|
|
pl_library_init(ops);
|
2014-05-18 21:09:46 -04:00
|
|
|
}
|
2014-02-02 14:11:38 -05:00
|
|
|
|
2015-12-09 09:20:18 -05:00
|
|
|
void playlist_deinit()
|
|
|
|
{
|
2016-04-24 10:36:15 -04:00
|
|
|
pl_system_deinit();
|
2016-05-09 07:52:10 -04:00
|
|
|
pl_library_deinit();
|
2015-12-09 09:20:18 -05:00
|
|
|
}
|
|
|
|
|
2016-05-09 10:38:47 -04:00
|
|
|
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);
|
|
|
|
}
|
|
|
|
|
2016-05-06 08:05:21 -04:00
|
|
|
bool playlist_add(enum playlist_type_t type, const gchar *name,
|
|
|
|
struct track *track)
|
2013-12-22 17:53:58 -05:00
|
|
|
{
|
2016-04-27 16:06:18 -04:00
|
|
|
if (!track)
|
2016-04-22 13:56:42 -04:00
|
|
|
return false;
|
2016-05-06 08:05:21 -04:00
|
|
|
return playlist_types[type]->pl_add_track(name, track);
|
2013-12-22 17:53:58 -05:00
|
|
|
}
|
|
|
|
|
2016-05-06 08:05:21 -04:00
|
|
|
bool playlist_remove(enum playlist_type_t type, const gchar *name,
|
|
|
|
struct track *track)
|
2013-12-22 17:53:58 -05:00
|
|
|
{
|
2016-04-27 16:06:18 -04:00
|
|
|
if (!track)
|
2016-04-22 13:56:42 -04:00
|
|
|
return false;
|
2016-05-06 08:05:21 -04:00
|
|
|
return playlist_types[type]->pl_remove_track(name, track);
|
2013-12-22 17:53:58 -05:00
|
|
|
}
|
2013-12-22 20:53:06 -05:00
|
|
|
|
2016-05-06 08:05:21 -04:00
|
|
|
void playlist_update(enum playlist_type_t type, const gchar *name)
|
2016-05-01 09:17:21 -04:00
|
|
|
{
|
2016-05-06 08:05:21 -04:00
|
|
|
playlist_types[type]->pl_update(name);
|
2016-05-01 09:17:21 -04:00
|
|
|
}
|
|
|
|
|
2016-05-06 08:05:21 -04:00
|
|
|
bool playlist_has(enum playlist_type_t type, const gchar *name,
|
|
|
|
struct track *track)
|
2015-12-09 09:31:12 -05:00
|
|
|
{
|
2016-05-06 08:05:21 -04:00
|
|
|
struct queue *queue = playlist_get_queue(type, name);
|
2016-04-24 09:17:18 -04:00
|
|
|
if (!track || !queue)
|
2015-12-09 09:31:12 -05:00
|
|
|
return false;
|
2016-04-22 14:17:17 -04:00
|
|
|
return queue_has(queue, track);
|
2015-12-09 09:31:12 -05:00
|
|
|
}
|
|
|
|
|
2016-05-06 08:05:21 -04:00
|
|
|
unsigned int playlist_size(enum playlist_type_t type, const gchar *name)
|
2016-04-28 10:10:11 -04:00
|
|
|
{
|
2016-05-06 08:05:21 -04:00
|
|
|
struct queue *queue = playlist_get_queue(type, name);
|
2016-04-28 10:10:11 -04:00
|
|
|
return queue ? queue_size(queue) : 0;
|
|
|
|
}
|
|
|
|
|
2016-05-06 08:05:21 -04:00
|
|
|
void playlist_set_random(enum playlist_type_t type, const gchar *name,
|
|
|
|
bool enabled)
|
2016-05-01 19:55:47 -04:00
|
|
|
{
|
2016-05-06 08:05:21 -04:00
|
|
|
playlist_types[type]->pl_set_flag(name, Q_RANDOM, enabled);
|
2016-05-01 19:55:47 -04:00
|
|
|
}
|
|
|
|
|
2016-05-06 08:05:21 -04:00
|
|
|
bool playlist_get_random(enum playlist_type_t type, const gchar *name)
|
2016-05-01 19:55:47 -04:00
|
|
|
{
|
2016-05-06 08:05:21 -04:00
|
|
|
return queue_has_flag(playlist_get_queue(type, name), Q_RANDOM);
|
2016-05-01 19:55:47 -04:00
|
|
|
}
|
|
|
|
|
2016-05-06 08:05:21 -04:00
|
|
|
void playlist_sort(enum playlist_type_t type, const gchar *name,
|
|
|
|
enum compare_t sort, bool reset)
|
2016-05-04 09:55:37 -04:00
|
|
|
{
|
2016-05-06 08:05:21 -04:00
|
|
|
playlist_types[type]->pl_sort(name, sort, reset);
|
2016-05-04 09:55:37 -04:00
|
|
|
}
|
|
|
|
|
2016-05-04 09:24:10 -04:00
|
|
|
struct track *playlist_next(void)
|
|
|
|
{
|
2016-05-06 08:05:21 -04:00
|
|
|
return queue_next(playlist_get_queue(PL_SYSTEM, "Collection"));
|
2016-05-04 09:24:10 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
struct track *playlist_prev(void)
|
|
|
|
{
|
2016-05-06 08:05:21 -04:00
|
|
|
return queue_next(playlist_get_queue(PL_SYSTEM, "History"));
|
2016-05-04 09:24:10 -04:00
|
|
|
}
|
|
|
|
|
2016-05-06 08:05:21 -04:00
|
|
|
struct queue *playlist_get_queue(enum playlist_type_t type, const gchar *name)
|
2013-12-31 16:58:40 -05:00
|
|
|
{
|
2016-05-06 08:05:21 -04:00
|
|
|
return playlist_types[type]->pl_get_queue(name);
|
2013-12-22 20:53:06 -05:00
|
|
|
}
|