core/playlist: Split out system playlist load and save functions
Signed-off-by: Anna Schumaker <Anna@OcarinaProject.net>
This commit is contained in:
parent
8026207037
commit
140abe79bc
|
@ -59,56 +59,76 @@ static void __playlist_fill_dynamic(enum playlist_t plist)
|
|||
}
|
||||
}
|
||||
|
||||
static void __pl_system_save_queue(const gchar *name)
|
||||
static void __pl_system_load_queue()
|
||||
{
|
||||
struct queue *queue = __playlist_lookup(name);
|
||||
struct queue *queue;
|
||||
unsigned int valid;
|
||||
gchar *name;
|
||||
|
||||
if (!queue)
|
||||
file_readf(&playlist_f, "%u ", &valid);
|
||||
if (!valid)
|
||||
return;
|
||||
|
||||
file_writef(&playlist_f, "1 %s\n", name);
|
||||
name = file_readl(&playlist_f);
|
||||
queue = __playlist_alloc(name);
|
||||
queue_load_tracks(queue, &playlist_f);
|
||||
}
|
||||
|
||||
static void __pl_system_save_queue(gpointer key, gpointer value,
|
||||
gpointer data)
|
||||
{
|
||||
struct queue *queue = (struct queue *)value;
|
||||
|
||||
file_writef(&playlist_f, "1 %s\n", (gchar *)key);
|
||||
queue_save_tracks(queue, &playlist_f);
|
||||
file_writef(&playlist_f, "\n");
|
||||
}
|
||||
|
||||
static void __pl_system_save()
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
if (!file_open(&playlist_f, OPEN_WRITE))
|
||||
return;
|
||||
|
||||
file_writef(&playlist_f, "%u\n", g_hash_table_size(playlist_db));
|
||||
for (i = 0; i < 2; i++)
|
||||
__pl_system_save_queue(playlist_names[i]);
|
||||
|
||||
g_hash_table_foreach(playlist_db, __pl_system_save_queue, NULL);
|
||||
file_close(&playlist_f);
|
||||
}
|
||||
|
||||
static bool __playlist_init_idle()
|
||||
static bool __pl_system_init_idle()
|
||||
{
|
||||
unsigned int i, n, valid;
|
||||
struct queue *queue;
|
||||
gchar *name;
|
||||
unsigned int i, n;
|
||||
|
||||
if (!file_open(&playlist_f, OPEN_READ))
|
||||
return true;
|
||||
|
||||
file_readf(&playlist_f, "%u\n", &n);
|
||||
for (i = 0; i < n; i++) {
|
||||
file_readf(&playlist_f, "%u ", &valid);
|
||||
if (!valid)
|
||||
continue;
|
||||
|
||||
name = file_readl(&playlist_f);
|
||||
queue = __playlist_alloc(name);
|
||||
queue_load_tracks(queue, &playlist_f);
|
||||
}
|
||||
for (i = 0; i < n; i++)
|
||||
__pl_system_load_queue();
|
||||
|
||||
file_close(&playlist_f);
|
||||
return true;
|
||||
}
|
||||
|
||||
static void __pl_system_init()
|
||||
{
|
||||
playlist_db = g_hash_table_new(g_str_hash, g_str_equal);
|
||||
idle_schedule(IDLE_SYNC, __pl_system_init_idle, NULL);
|
||||
}
|
||||
|
||||
static int __pl_system_deinit_queue(gpointer key, gpointer value, gpointer data)
|
||||
{
|
||||
struct queue *queue = (struct queue *)value;
|
||||
queue_deinit(queue);
|
||||
g_free(queue);
|
||||
return true;
|
||||
}
|
||||
|
||||
static void __pl_system_deinit()
|
||||
{
|
||||
g_hash_table_foreach_remove(playlist_db, __pl_system_deinit_queue, NULL);
|
||||
g_hash_table_destroy(playlist_db);
|
||||
}
|
||||
|
||||
static bool __pl_system_add(const gchar *name, struct track *track)
|
||||
{
|
||||
struct queue *queue = __playlist_alloc(name);
|
||||
|
@ -144,24 +164,13 @@ void playlist_init(struct queue_ops *ops)
|
|||
queue_sort(&playlist_q, COMPARE_TRACK, false);
|
||||
queue_set_flag(&playlist_q, Q_NO_SORT);
|
||||
|
||||
playlist_db = g_hash_table_new(g_str_hash, g_str_equal);
|
||||
playlist_ops = ops;
|
||||
idle_schedule(IDLE_SYNC, __playlist_init_idle, NULL);
|
||||
__pl_system_init();
|
||||
}
|
||||
|
||||
void playlist_deinit()
|
||||
{
|
||||
struct queue *queue;
|
||||
unsigned int i;
|
||||
|
||||
for (i = 0; i < 2; i++) {
|
||||
queue = __playlist_lookup(playlist_names[i]);
|
||||
if (queue)
|
||||
queue_deinit(queue);
|
||||
g_free(queue);
|
||||
}
|
||||
|
||||
g_hash_table_destroy(playlist_db);
|
||||
__pl_system_deinit();
|
||||
queue_deinit(&playlist_q);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue