Mercurial > audlegacy-plugins
diff src/Container/pls/pls.c @ 0:13389e613d67 trunk
[svn] - initial import of audacious-plugins tree (lots to do)
| author | nenolod |
|---|---|
| date | Mon, 18 Sep 2006 01:11:49 -0700 |
| parents | |
| children | 088092a52fea |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/Container/pls/pls.c Mon Sep 18 01:11:49 2006 -0700 @@ -0,0 +1,126 @@ +/* + * Audacious: A cross-platform multimedia player + * Copyright (c) 2006 William Pitcock, Tony Vroon, George Averill, + * Giacomo Lozito, Derek Pomery and Yoshiki Yazawa. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include <glib.h> +#include <string.h> +#include <glib.h> +#include <glib/gprintf.h> +#include <stdlib.h> +#include <string.h> +#include <time.h> + +#include <unistd.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <sys/errno.h> + +#include "audacious/main.h" +#include "audacious/util.h" +#include "audacious/playlist.h" +#include "audacious/playlist_container.h" +#include "audacious/plugin.h" +#include "libaudacious/vfs.h" + +static void +playlist_load_pls(const gchar * filename, gint pos) +{ + guint i, count, added_count = 0; + gchar key[10]; + gchar *line; + + g_return_if_fail(filename != NULL); + + if (!str_has_suffix_nocase(filename, ".pls")) + return; + + if (!(line = read_ini_string(filename, "playlist", "NumberOfEntries"))) + return; + + count = atoi(line); + g_free(line); + + for (i = 1; i <= count; i++) { + g_snprintf(key, sizeof(key), "File%d", i); + if ((line = read_ini_string(filename, "playlist", key))) { + playlist_load_ins_file(line, filename, pos, NULL, -1); + added_count++; + + if (pos >= 0) + pos++; + + g_free(line); + } + } +} + +static void +playlist_save_pls(const gchar *filename, gint pos) +{ + GList *node; + VFSFile *file = vfs_fopen(filename, "wb"); + + g_return_if_fail(file != NULL); + + vfs_fprintf(file, "[playlist]\n"); + vfs_fprintf(file, "NumberOfEntries=%d\n", playlist_get_length()); + + PLAYLIST_LOCK(); + + for (node = playlist_get(); node; node = g_list_next(node)) { + PlaylistEntry *entry = PLAYLIST_ENTRY(node->data); + + vfs_fprintf(file, "File%d=%s\n", g_list_position(playlist_get(), node) + 1, + entry->filename); + } + + PLAYLIST_UNLOCK(); + + vfs_fclose(file); +} + +PlaylistContainer plc_pls = { + .name = "Winamp .pls Playlist Format", + .ext = "pls", + .plc_read = playlist_load_pls, + .plc_write = playlist_save_pls, +}; + +static void init(void) +{ + playlist_container_register(&plc_pls); +} + +static void cleanup(void) +{ + playlist_container_unregister(&plc_pls); +} + +LowlevelPlugin llp_pls = { + NULL, + NULL, + "Winamp .pls Playlist Format", + init, + cleanup, +}; + +LowlevelPlugin *get_lplugin_info(void) +{ + return &llp_pls; +}
