core/playlist: Split out basic system playlist functions
I'm going to use this as a starting point for creating a new playlist interface. Signed-off-by: Anna Schumaker <Anna@OcarinaProject.net>
This commit is contained in:
parent
0f5d4e6a34
commit
8026207037
|
@ -59,23 +59,28 @@ static void __playlist_fill_dynamic(enum playlist_t plist)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __playlist_save()
|
static void __pl_system_save_queue(const gchar *name)
|
||||||
|
{
|
||||||
|
struct queue *queue = __playlist_lookup(name);
|
||||||
|
|
||||||
|
if (!queue)
|
||||||
|
return;
|
||||||
|
|
||||||
|
file_writef(&playlist_f, "1 %s\n", name);
|
||||||
|
queue_save_tracks(queue, &playlist_f);
|
||||||
|
file_writef(&playlist_f, "\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
static void __pl_system_save()
|
||||||
{
|
{
|
||||||
struct queue *queue;
|
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
if (!file_open(&playlist_f, OPEN_WRITE))
|
if (!file_open(&playlist_f, OPEN_WRITE))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
file_writef(&playlist_f, "%u\n", g_hash_table_size(playlist_db));
|
file_writef(&playlist_f, "%u\n", g_hash_table_size(playlist_db));
|
||||||
for (i = 0; i < 2; i++) {
|
for (i = 0; i < 2; i++)
|
||||||
queue = __playlist_lookup(playlist_names[i]);
|
__pl_system_save_queue(playlist_names[i]);
|
||||||
if (!queue)
|
|
||||||
continue;
|
|
||||||
file_writef(&playlist_f, "1 %s\n", playlist_names[i]);
|
|
||||||
queue_save_tracks(queue, &playlist_f);
|
|
||||||
file_writef(&playlist_f, "\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
file_close(&playlist_f);
|
file_close(&playlist_f);
|
||||||
}
|
}
|
||||||
|
@ -104,6 +109,32 @@ static bool __playlist_init_idle()
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool __pl_system_add(const gchar *name, struct track *track)
|
||||||
|
{
|
||||||
|
struct queue *queue = __playlist_alloc(name);
|
||||||
|
if (queue_has(queue, track))
|
||||||
|
return false;
|
||||||
|
queue_add(queue, track);
|
||||||
|
__pl_system_save();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool __pl_system_remove(const gchar *name, struct track *track)
|
||||||
|
{
|
||||||
|
struct queue *queue = __playlist_lookup(name);
|
||||||
|
if (!queue)
|
||||||
|
return false;
|
||||||
|
if (!queue_remove_all(queue, track))
|
||||||
|
return false;
|
||||||
|
__pl_system_save();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct queue *__pl_system_get_queue(const gchar *name)
|
||||||
|
{
|
||||||
|
return __playlist_lookup(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void playlist_init(struct queue_ops *ops)
|
void playlist_init(struct queue_ops *ops)
|
||||||
{
|
{
|
||||||
|
@ -136,38 +167,22 @@ void playlist_deinit()
|
||||||
|
|
||||||
bool playlist_add(enum playlist_t plist, struct track *track)
|
bool playlist_add(enum playlist_t plist, struct track *track)
|
||||||
{
|
{
|
||||||
struct queue *queue;
|
|
||||||
|
|
||||||
if (!track || __playlist_is_dynamic(plist))
|
if (!track || __playlist_is_dynamic(plist))
|
||||||
return false;
|
return false;
|
||||||
queue = __playlist_alloc(playlist_names[plist]);
|
return __pl_system_add(playlist_names[plist], track);
|
||||||
if (queue_has(queue, track))
|
|
||||||
return false;
|
|
||||||
queue_add(queue, track);
|
|
||||||
__playlist_save();
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool playlist_remove(enum playlist_t plist, struct track *track)
|
bool playlist_remove(enum playlist_t plist, struct track *track)
|
||||||
{
|
{
|
||||||
struct queue *queue;
|
|
||||||
|
|
||||||
if (!track || __playlist_is_dynamic(plist))
|
if (!track || __playlist_is_dynamic(plist))
|
||||||
return false;
|
return false;
|
||||||
queue = __playlist_lookup(playlist_names[plist]);
|
return __pl_system_remove(playlist_names[plist], track);
|
||||||
if (!queue)
|
|
||||||
return true;
|
|
||||||
if (!queue_remove_all(queue, track))
|
|
||||||
return false;
|
|
||||||
__playlist_save();
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool playlist_has(enum playlist_t plist, struct track *track)
|
bool playlist_has(enum playlist_t plist, struct track *track)
|
||||||
{
|
{
|
||||||
struct queue *queue = __playlist_lookup(playlist_names[plist]);
|
struct queue *queue = __pl_system_get_queue(playlist_names[plist]);
|
||||||
|
if (!track || !queue)
|
||||||
if (!queue || !track)
|
|
||||||
return false;
|
return false;
|
||||||
return queue_has(queue, track);
|
return queue_has(queue, track);
|
||||||
}
|
}
|
||||||
|
@ -189,6 +204,6 @@ void playlist_select(enum playlist_t plist)
|
||||||
struct queue *playlist_get_queue(enum playlist_t plist)
|
struct queue *playlist_get_queue(enum playlist_t plist)
|
||||||
{
|
{
|
||||||
if (__playlist_is_static(plist))
|
if (__playlist_is_static(plist))
|
||||||
return __playlist_lookup(playlist_names[plist]);
|
return __pl_system_get_queue(playlist_names[plist]);
|
||||||
return &playlist_q;
|
return &playlist_q;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue