diff --git a/core/playlist.c b/core/playlist.c index 4c7e4c74..9928f620 100644 --- a/core/playlist.c +++ b/core/playlist.c @@ -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; 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++) { - queue = __playlist_lookup(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"); - } + for (i = 0; i < 2; i++) + __pl_system_save_queue(playlist_names[i]); file_close(&playlist_f); } @@ -104,6 +109,32 @@ static bool __playlist_init_idle() 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) { @@ -136,38 +167,22 @@ void playlist_deinit() bool playlist_add(enum playlist_t plist, struct track *track) { - struct queue *queue; - if (!track || __playlist_is_dynamic(plist)) return false; - queue = __playlist_alloc(playlist_names[plist]); - if (queue_has(queue, track)) - return false; - queue_add(queue, track); - __playlist_save(); - return true; + return __pl_system_add(playlist_names[plist], track); } bool playlist_remove(enum playlist_t plist, struct track *track) { - struct queue *queue; - if (!track || __playlist_is_dynamic(plist)) return false; - queue = __playlist_lookup(playlist_names[plist]); - if (!queue) - return true; - if (!queue_remove_all(queue, track)) - return false; - __playlist_save(); - return true; + return __pl_system_remove(playlist_names[plist], track); } bool playlist_has(enum playlist_t plist, struct track *track) { - struct queue *queue = __playlist_lookup(playlist_names[plist]); - - if (!queue || !track) + struct queue *queue = __pl_system_get_queue(playlist_names[plist]); + if (!track || !queue) return false; 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) { if (__playlist_is_static(plist)) - return __playlist_lookup(playlist_names[plist]); + return __pl_system_get_queue(playlist_names[plist]); return &playlist_q; }