Mercurial > audlegacy-plugins
annotate src/xspf/xspf.c @ 2204:43da009d6e76
add "fla" to the extension list. fix #6.
author | Yoshiki Yazawa <yaz@cc.rim.or.jp> |
---|---|
date | Mon, 03 Dec 2007 18:50:19 +0900 |
parents | 02cfac0efbdc |
children | 137187e7a379 |
rev | line source |
---|---|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
1 /* |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
2 * Audacious: A cross-platform multimedia player |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
3 * Copyright (c) 2006 William Pitcock, Tony Vroon, George Averill, |
1667 | 4 * Giacomo Lozito, Derek Pomery, Yoshiki Yazawa |
5 * and Matti Hämäläinen. | |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
6 * |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
7 * This program is free software; you can redistribute it and/or modify |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
8 * it under the terms of the GNU General Public License as published by |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
9 * the Free Software Foundation; either version 2 of the License, or |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
10 * (at your option) any later version. |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
11 * |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
12 * This program is distributed in the hope that it will be useful, |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
15 * GNU General Public License for more details. |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
16 * |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
17 * You should have received a copy of the GNU General Public License |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
18 * along with this program; if not, write to the Free Software |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
20 */ |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
21 #include <config.h> |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
22 |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
23 #include <glib.h> |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
24 #include <string.h> |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
25 #include <stdlib.h> |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
26 #include <time.h> |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
27 |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
28 #include <unistd.h> |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
29 #include <sys/types.h> |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
30 #include <sys/stat.h> |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
31 #include <sys/errno.h> |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
32 |
1962 | 33 #include <audacious/plugin.h> |
1950
2ebeb7816c5e
Change from "" to <>-style includes. With thanks to ccr for the correct sed voodoo.
chainsaw@localhost
parents:
1701
diff
changeset
|
34 #include <audacious/main.h> |
2ebeb7816c5e
Change from "" to <>-style includes. With thanks to ccr for the correct sed voodoo.
chainsaw@localhost
parents:
1701
diff
changeset
|
35 #include <audacious/util.h> |
2166
9fa5a7884514
unescape uri before write into tuple.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
2126
diff
changeset
|
36 #include <audacious/strings.h> |
1950
2ebeb7816c5e
Change from "" to <>-style includes. With thanks to ccr for the correct sed voodoo.
chainsaw@localhost
parents:
1701
diff
changeset
|
37 #include <audacious/playlist.h> |
1952
17a6441c71b6
Some missed #include "" to <> changes.
Matti Hamalainen <ccr@tnsp.org>
parents:
1950
diff
changeset
|
38 #include <audacious/playlist_container.h> |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
39 |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
40 #include <libxml/tree.h> |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
41 #include <libxml/parser.h> |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
42 #include <libxml/xmlreader.h> |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
43 #include <libxml/xpath.h> |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
44 #include <libxml/xpathInternals.h> |
641 | 45 #include <libxml/uri.h> |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
46 |
641 | 47 #define XSPF_ROOT_NODE_NAME "playlist" |
48 #define XSPF_XMLNS "http://xspf.org/ns/0/" | |
47 | 49 |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
50 enum { |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
51 CMP_DEF = 0, |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
52 CMP_GT, |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
53 CMP_NULL |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
54 } xspf_compare; |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
55 |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
56 typedef struct { |
1693 | 57 gint tupleField; |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
58 gchar *xspfName; |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
59 TupleValueType type; |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
60 gboolean isMeta; |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
61 gint compare; |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
62 } xspf_entry_t; |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
63 |
47 | 64 |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
65 static const xspf_entry_t xspf_entries[] = { |
1693 | 66 { FIELD_TITLE, "title", TUPLE_STRING, FALSE, CMP_DEF }, |
67 { FIELD_ARTIST, "creator", TUPLE_STRING, FALSE, CMP_DEF }, | |
68 { FIELD_COMMENT, "annotation", TUPLE_STRING, FALSE, CMP_DEF }, | |
69 { FIELD_ALBUM, "album", TUPLE_STRING, FALSE, CMP_DEF }, | |
70 { FIELD_TRACK_NUMBER, "trackNum", TUPLE_INT, FALSE, CMP_DEF }, | |
71 { FIELD_LENGTH, "duration", TUPLE_INT, FALSE, CMP_GT }, | |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
72 |
1693 | 73 { FIELD_YEAR, "year", TUPLE_INT, TRUE, CMP_DEF }, |
74 { FIELD_DATE, "date", TUPLE_STRING, TRUE, CMP_DEF }, | |
75 { FIELD_GENRE, "genre", TUPLE_STRING, TRUE, CMP_DEF }, | |
76 { FIELD_FORMATTER, "formatter", TUPLE_STRING, TRUE, CMP_DEF }, | |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
77 }; |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
78 |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
79 static const gint xspf_nentries = (sizeof(xspf_entries) / sizeof(xspf_entry_t)); |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
80 |
2166
9fa5a7884514
unescape uri before write into tuple.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
2126
diff
changeset
|
81 /* we need encoding conversion */ |
1963
b9b62802b072
Define a preprocessor macro XSDEBUG() for printing debugging messages, if DEBUG is defined.
Matti Hamalainen <ccr@tnsp.org>
parents:
1962
diff
changeset
|
82 #ifdef DEBUG |
2166
9fa5a7884514
unescape uri before write into tuple.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
2126
diff
changeset
|
83 # define XSDEBUG(...) { g_print("xspf[%s:%d]: ", __FUNCTION__, (int) __LINE__); g_print(__VA_ARGS__); } |
1963
b9b62802b072
Define a preprocessor macro XSDEBUG() for printing debugging messages, if DEBUG is defined.
Matti Hamalainen <ccr@tnsp.org>
parents:
1962
diff
changeset
|
84 #else |
b9b62802b072
Define a preprocessor macro XSDEBUG() for printing debugging messages, if DEBUG is defined.
Matti Hamalainen <ccr@tnsp.org>
parents:
1962
diff
changeset
|
85 # define XSDEBUG(...) /* stub */ |
b9b62802b072
Define a preprocessor macro XSDEBUG() for printing debugging messages, if DEBUG is defined.
Matti Hamalainen <ccr@tnsp.org>
parents:
1962
diff
changeset
|
86 #endif |
b9b62802b072
Define a preprocessor macro XSDEBUG() for printing debugging messages, if DEBUG is defined.
Matti Hamalainen <ccr@tnsp.org>
parents:
1962
diff
changeset
|
87 |
b9b62802b072
Define a preprocessor macro XSDEBUG() for printing debugging messages, if DEBUG is defined.
Matti Hamalainen <ccr@tnsp.org>
parents:
1962
diff
changeset
|
88 |
892 | 89 static gboolean is_uri(gchar *uri) |
90 { | |
1964
375950feec51
Cosmetic whitespace changes.
Matti Hamalainen <ccr@tnsp.org>
parents:
1963
diff
changeset
|
91 if (strstr(uri, "://")) |
892 | 92 return TRUE; |
93 else | |
94 return FALSE; | |
95 } | |
96 | |
1963
b9b62802b072
Define a preprocessor macro XSDEBUG() for printing debugging messages, if DEBUG is defined.
Matti Hamalainen <ccr@tnsp.org>
parents:
1962
diff
changeset
|
97 |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
98 /* This function is taken from libxml2-2.6.27. |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
99 */ |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
100 static xmlChar *xspf_path_to_uri(const xmlChar *path) |
652
7f865e3cd285
[svn] - import xmlPathToURI() from libxml2-2.6.27 as audPathToURI(). this function is newly introduced at 2.6.27.
yaz
parents:
647
diff
changeset
|
101 { |
7f865e3cd285
[svn] - import xmlPathToURI() from libxml2-2.6.27 as audPathToURI(). this function is newly introduced at 2.6.27.
yaz
parents:
647
diff
changeset
|
102 xmlURIPtr uri; |
7f865e3cd285
[svn] - import xmlPathToURI() from libxml2-2.6.27 as audPathToURI(). this function is newly introduced at 2.6.27.
yaz
parents:
647
diff
changeset
|
103 xmlURI temp; |
7f865e3cd285
[svn] - import xmlPathToURI() from libxml2-2.6.27 as audPathToURI(). this function is newly introduced at 2.6.27.
yaz
parents:
647
diff
changeset
|
104 xmlChar *ret, *cal; |
7f865e3cd285
[svn] - import xmlPathToURI() from libxml2-2.6.27 as audPathToURI(). this function is newly introduced at 2.6.27.
yaz
parents:
647
diff
changeset
|
105 |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
106 if (path == NULL) |
892 | 107 return NULL; |
652
7f865e3cd285
[svn] - import xmlPathToURI() from libxml2-2.6.27 as audPathToURI(). this function is newly introduced at 2.6.27.
yaz
parents:
647
diff
changeset
|
108 |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
109 if ((uri = xmlParseURI((const char *)path)) != NULL) { |
891
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
110 xmlFreeURI(uri); |
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
111 return xmlStrdup(path); |
652
7f865e3cd285
[svn] - import xmlPathToURI() from libxml2-2.6.27 as audPathToURI(). this function is newly introduced at 2.6.27.
yaz
parents:
647
diff
changeset
|
112 } |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
113 |
652
7f865e3cd285
[svn] - import xmlPathToURI() from libxml2-2.6.27 as audPathToURI(). this function is newly introduced at 2.6.27.
yaz
parents:
647
diff
changeset
|
114 cal = xmlCanonicPath(path); |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
115 if (cal == NULL) |
892 | 116 return NULL; |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
117 |
652
7f865e3cd285
[svn] - import xmlPathToURI() from libxml2-2.6.27 as audPathToURI(). this function is newly introduced at 2.6.27.
yaz
parents:
647
diff
changeset
|
118 memset(&temp, 0, sizeof(temp)); |
891
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
119 temp.path = (char *)cal; |
652
7f865e3cd285
[svn] - import xmlPathToURI() from libxml2-2.6.27 as audPathToURI(). this function is newly introduced at 2.6.27.
yaz
parents:
647
diff
changeset
|
120 ret = xmlSaveUri(&temp); |
7f865e3cd285
[svn] - import xmlPathToURI() from libxml2-2.6.27 as audPathToURI(). this function is newly introduced at 2.6.27.
yaz
parents:
647
diff
changeset
|
121 xmlFree(cal); |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
122 |
892 | 123 return ret; |
652
7f865e3cd285
[svn] - import xmlPathToURI() from libxml2-2.6.27 as audPathToURI(). this function is newly introduced at 2.6.27.
yaz
parents:
647
diff
changeset
|
124 } |
7f865e3cd285
[svn] - import xmlPathToURI() from libxml2-2.6.27 as audPathToURI(). this function is newly introduced at 2.6.27.
yaz
parents:
647
diff
changeset
|
125 |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
126 |
1962 | 127 static void xspf_add_file(xmlNode *track, const gchar *filename, |
128 gint pos, const gchar *base) | |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
129 { |
891
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
130 xmlNode *nptr; |
1444
3b1651d37b58
xspf: update to new API
William Pitcock <nenolod@atheme-project.org>
parents:
1395
diff
changeset
|
131 Tuple *tuple; |
891
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
132 gchar *location = NULL; |
2057
cf4fa45ffd80
playlist API vtabling
William Pitcock <nenolod@atheme.org>
parents:
2053
diff
changeset
|
133 Playlist *playlist = aud_playlist_get_active(); |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
134 |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
135 |
1976
5fa26178eaef
s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents:
1966
diff
changeset
|
136 tuple = aud_tuple_new(); |
5fa26178eaef
s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents:
1966
diff
changeset
|
137 aud_tuple_associate_int(tuple, FIELD_LENGTH, NULL, -1); |
5fa26178eaef
s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents:
1966
diff
changeset
|
138 aud_tuple_associate_int(tuple, FIELD_MTIME, NULL, -1); |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
139 |
641 | 140 |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
141 for (nptr = track->children; nptr != NULL; nptr = nptr->next) { |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
142 if (nptr->type == XML_ELEMENT_NODE) { |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
143 if (!xmlStrcmp(nptr->name, (xmlChar *)"location")) { |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
144 /* Location is a special case */ |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
145 gchar *str = (gchar *)xmlNodeGetContent(nptr); |
657 | 146 |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
147 location = g_strdup_printf("%s%s", base ? base : "", str); |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
148 xmlFree(str); |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
149 } else { |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
150 /* Rest of the nodes are handled here */ |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
151 gint i; |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
152 gboolean isMeta; |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
153 xmlChar *findName; |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
154 |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
155 if (!xmlStrcmp(nptr->name, (xmlChar *)"meta")) { |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
156 isMeta = TRUE; |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
157 findName = xmlGetProp(nptr, (xmlChar *)"rel"); |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
158 } else { |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
159 isMeta = FALSE; |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
160 findName = xmlStrdup(nptr->name); |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
161 } |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
162 |
1669 | 163 for (i = 0; i < xspf_nentries; i++) |
164 if ((xspf_entries[i].isMeta == isMeta) && | |
165 !xmlStrcmp(findName, (xmlChar *)xspf_entries[i].xspfName)) { | |
166 xmlChar *str = xmlNodeGetContent(nptr); | |
167 switch (xspf_entries[i].type) { | |
168 case TUPLE_STRING: | |
1976
5fa26178eaef
s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents:
1966
diff
changeset
|
169 aud_tuple_associate_string(tuple, xspf_entries[i].tupleField, NULL, (gchar *)str); |
1669 | 170 break; |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
171 |
1669 | 172 case TUPLE_INT: |
1976
5fa26178eaef
s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents:
1966
diff
changeset
|
173 aud_tuple_associate_int(tuple, xspf_entries[i].tupleField, NULL, atol((char *)str)); |
1669 | 174 break; |
175 | |
176 default: | |
177 break; | |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
178 } |
1669 | 179 xmlFree(str); |
180 break; | |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
181 } |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
182 |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
183 xmlFree(findName); |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
184 } |
891
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
185 } |
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
186 } |
47 | 187 |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
188 if (location) { |
2170
02cfac0efbdc
remove unnecessary code. (I can't recall why I used "uri", actually.)
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
2169
diff
changeset
|
189 gchar *realfn = NULL, *scratch = NULL; |
1444
3b1651d37b58
xspf: update to new API
William Pitcock <nenolod@atheme-project.org>
parents:
1395
diff
changeset
|
190 |
2166
9fa5a7884514
unescape uri before write into tuple.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
2126
diff
changeset
|
191 /* filename and path in tuple must be unescaped. */ |
9fa5a7884514
unescape uri before write into tuple.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
2126
diff
changeset
|
192 scratch = g_filename_from_uri(location, NULL, NULL); |
2170
02cfac0efbdc
remove unnecessary code. (I can't recall why I used "uri", actually.)
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
2169
diff
changeset
|
193 realfn = aud_str_to_utf8(scratch ? scratch : location); |
02cfac0efbdc
remove unnecessary code. (I can't recall why I used "uri", actually.)
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
2169
diff
changeset
|
194 g_free(scratch); |
2166
9fa5a7884514
unescape uri before write into tuple.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
2126
diff
changeset
|
195 |
9fa5a7884514
unescape uri before write into tuple.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
2126
diff
changeset
|
196 scratch = g_path_get_basename(realfn); |
1976
5fa26178eaef
s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents:
1966
diff
changeset
|
197 aud_tuple_associate_string(tuple, FIELD_FILE_NAME, NULL, scratch); |
1444
3b1651d37b58
xspf: update to new API
William Pitcock <nenolod@atheme-project.org>
parents:
1395
diff
changeset
|
198 g_free(scratch); |
3b1651d37b58
xspf: update to new API
William Pitcock <nenolod@atheme-project.org>
parents:
1395
diff
changeset
|
199 |
2166
9fa5a7884514
unescape uri before write into tuple.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
2126
diff
changeset
|
200 scratch = g_path_get_dirname(realfn); |
1976
5fa26178eaef
s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents:
1966
diff
changeset
|
201 aud_tuple_associate_string(tuple, FIELD_FILE_PATH, NULL, scratch); |
1444
3b1651d37b58
xspf: update to new API
William Pitcock <nenolod@atheme-project.org>
parents:
1395
diff
changeset
|
202 g_free(scratch); |
3b1651d37b58
xspf: update to new API
William Pitcock <nenolod@atheme-project.org>
parents:
1395
diff
changeset
|
203 |
2166
9fa5a7884514
unescape uri before write into tuple.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
2126
diff
changeset
|
204 aud_tuple_associate_string(tuple, FIELD_FILE_EXT, NULL, strrchr(realfn, '.')); |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
205 |
1976
5fa26178eaef
s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents:
1966
diff
changeset
|
206 XSDEBUG("tuple->file_name = %s\n", aud_tuple_get_string(tuple, FIELD_FILE_NAME, NULL)); |
5fa26178eaef
s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents:
1966
diff
changeset
|
207 XSDEBUG("tuple->file_path = %s\n", aud_tuple_get_string(tuple, FIELD_FILE_PATH, NULL)); |
1963
b9b62802b072
Define a preprocessor macro XSDEBUG() for printing debugging messages, if DEBUG is defined.
Matti Hamalainen <ccr@tnsp.org>
parents:
1962
diff
changeset
|
208 |
2166
9fa5a7884514
unescape uri before write into tuple.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
2126
diff
changeset
|
209 /* add file to playlist */ |
2170
02cfac0efbdc
remove unnecessary code. (I can't recall why I used "uri", actually.)
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
2169
diff
changeset
|
210 aud_playlist_load_ins_file_tuple(playlist, location, filename, pos, tuple); |
02cfac0efbdc
remove unnecessary code. (I can't recall why I used "uri", actually.)
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
2169
diff
changeset
|
211 g_free(realfn); |
891
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
212 pos++; |
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
213 } |
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
214 |
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
215 g_free(location); |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
216 } |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
217 |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
218 |
1962 | 219 static void xspf_find_track(xmlNode *tracklist, const gchar *filename, |
220 gint pos, const gchar *base) | |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
221 { |
891
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
222 xmlNode *nptr; |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
223 |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
224 for (nptr = tracklist->children; nptr != NULL; nptr = nptr->next) { |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
225 if (nptr->type == XML_ELEMENT_NODE && |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
226 !xmlStrcmp(nptr->name, (xmlChar *)"track")) { |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
227 xspf_add_file(nptr, filename, pos, base); |
891
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
228 } |
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
229 } |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
230 } |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
231 |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
232 |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
233 static void xspf_find_audoptions(xmlNode *tracklist, const gchar *filename, gint pos) |
641 | 234 { |
891
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
235 xmlNode *nptr; |
2057
cf4fa45ffd80
playlist API vtabling
William Pitcock <nenolod@atheme.org>
parents:
2053
diff
changeset
|
236 Playlist *playlist = aud_playlist_get_active(); |
891
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
237 |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
238 for (nptr = tracklist->children; nptr != NULL; nptr = nptr->next) { |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
239 if (nptr->type == XML_ELEMENT_NODE && |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
240 !xmlStrcmp(nptr->name, (xmlChar *)"options")) { |
891
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
241 xmlChar *opt = NULL; |
884 | 242 |
891
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
243 opt = xmlGetProp(nptr, (xmlChar *)"staticlist"); |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
244 if (!g_strcasecmp((char *)opt, "true")) |
891
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
245 playlist->attribute |= PLAYLIST_STATIC; |
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
246 else |
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
247 playlist->attribute ^= PLAYLIST_STATIC; |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
248 |
891
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
249 xmlFree(opt); |
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
250 } |
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
251 } |
641 | 252 } |
253 | |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
254 |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
255 static void xspf_playlist_load(const gchar *filename, gint pos) |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
256 { |
891
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
257 xmlDocPtr doc; |
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
258 xmlNode *nptr, *nptr2; |
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
259 |
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
260 g_return_if_fail(filename != NULL); |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
261 |
1963
b9b62802b072
Define a preprocessor macro XSDEBUG() for printing debugging messages, if DEBUG is defined.
Matti Hamalainen <ccr@tnsp.org>
parents:
1962
diff
changeset
|
262 XSDEBUG("filename='%s', pos=%d\n", filename, pos); |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
263 |
1512
7b1b24af319f
now xspf plugin try to load non well formed xspf file. closes #969.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1462
diff
changeset
|
264 doc = xmlRecoverFile(filename); |
1964
375950feec51
Cosmetic whitespace changes.
Matti Hamalainen <ccr@tnsp.org>
parents:
1963
diff
changeset
|
265 if (doc == NULL) |
891
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
266 return; |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
267 |
891
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
268 // find trackList |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
269 for (nptr = doc->children; nptr != NULL; nptr = nptr->next) { |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
270 if (nptr->type == XML_ELEMENT_NODE && |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
271 !xmlStrcmp(nptr->name, (xmlChar *)"playlist")) { |
1965
41d726acb915
Remove useless NULL assignations.
Matti Hamalainen <ccr@tnsp.org>
parents:
1964
diff
changeset
|
272 gchar *tmp, *base; |
41d726acb915
Remove useless NULL assignations.
Matti Hamalainen <ccr@tnsp.org>
parents:
1964
diff
changeset
|
273 |
891
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
274 base = (gchar *)xmlNodeGetBase(doc, nptr); |
1963
b9b62802b072
Define a preprocessor macro XSDEBUG() for printing debugging messages, if DEBUG is defined.
Matti Hamalainen <ccr@tnsp.org>
parents:
1962
diff
changeset
|
275 |
b9b62802b072
Define a preprocessor macro XSDEBUG() for printing debugging messages, if DEBUG is defined.
Matti Hamalainen <ccr@tnsp.org>
parents:
1962
diff
changeset
|
276 XSDEBUG("base @1 = %s\n", base); |
b9b62802b072
Define a preprocessor macro XSDEBUG() for printing debugging messages, if DEBUG is defined.
Matti Hamalainen <ccr@tnsp.org>
parents:
1962
diff
changeset
|
277 |
1278
d1c66f8ccf73
adapt xspf for file:// scheme.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1271
diff
changeset
|
278 // if filename is specified as a base, ignore it. |
d1c66f8ccf73
adapt xspf for file:// scheme.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1271
diff
changeset
|
279 tmp = xmlURIUnescapeString(base, -1, NULL); |
1964
375950feec51
Cosmetic whitespace changes.
Matti Hamalainen <ccr@tnsp.org>
parents:
1963
diff
changeset
|
280 if (tmp) { |
375950feec51
Cosmetic whitespace changes.
Matti Hamalainen <ccr@tnsp.org>
parents:
1963
diff
changeset
|
281 if (!strcmp(tmp, filename)) { |
1278
d1c66f8ccf73
adapt xspf for file:// scheme.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1271
diff
changeset
|
282 xmlFree(base); |
d1c66f8ccf73
adapt xspf for file:// scheme.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1271
diff
changeset
|
283 base = NULL; |
892 | 284 } |
1278
d1c66f8ccf73
adapt xspf for file:// scheme.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1271
diff
changeset
|
285 g_free(tmp); |
892 | 286 } |
1963
b9b62802b072
Define a preprocessor macro XSDEBUG() for printing debugging messages, if DEBUG is defined.
Matti Hamalainen <ccr@tnsp.org>
parents:
1962
diff
changeset
|
287 |
b9b62802b072
Define a preprocessor macro XSDEBUG() for printing debugging messages, if DEBUG is defined.
Matti Hamalainen <ccr@tnsp.org>
parents:
1962
diff
changeset
|
288 XSDEBUG("base @2 = %s\n", base); |
b9b62802b072
Define a preprocessor macro XSDEBUG() for printing debugging messages, if DEBUG is defined.
Matti Hamalainen <ccr@tnsp.org>
parents:
1962
diff
changeset
|
289 |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
290 for (nptr2 = nptr->children; nptr2 != NULL; nptr2 = nptr2->next) { |
641 | 291 |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
292 if (nptr2->type == XML_ELEMENT_NODE && |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
293 !xmlStrcmp(nptr2->name, (xmlChar *)"extension")) { |
641 | 294 //check if application is audacious |
295 xmlChar *app = NULL; | |
296 app = xmlGetProp(nptr2, (xmlChar *)"application"); | |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
297 if (!xmlStrcmp(app, (xmlChar *)"audacious")) |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
298 xspf_find_audoptions(nptr2, filename, pos); |
641 | 299 xmlFree(app); |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
300 } else |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
301 if (nptr2->type == XML_ELEMENT_NODE && |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
302 !xmlStrcmp(nptr2->name, (xmlChar *)"title")) { |
2057
cf4fa45ffd80
playlist API vtabling
William Pitcock <nenolod@atheme.org>
parents:
2053
diff
changeset
|
303 Playlist *plist = aud_playlist_get_active(); |
1528
8fddba1d94e4
xspf: When loading playlist, read title from xml if set
Kieran Clancy <clancy.kieran+audacious@gmail.com>
parents:
1514
diff
changeset
|
304 xmlChar *title = xmlNodeGetContent(nptr2); |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
305 |
1528
8fddba1d94e4
xspf: When loading playlist, read title from xml if set
Kieran Clancy <clancy.kieran+audacious@gmail.com>
parents:
1514
diff
changeset
|
306 if (title && *title) { |
2057
cf4fa45ffd80
playlist API vtabling
William Pitcock <nenolod@atheme.org>
parents:
2053
diff
changeset
|
307 aud_playlist_set_current_name(plist, (gchar*)title); |
1528
8fddba1d94e4
xspf: When loading playlist, read title from xml if set
Kieran Clancy <clancy.kieran+audacious@gmail.com>
parents:
1514
diff
changeset
|
308 } |
8fddba1d94e4
xspf: When loading playlist, read title from xml if set
Kieran Clancy <clancy.kieran+audacious@gmail.com>
parents:
1514
diff
changeset
|
309 xmlFree(title); |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
310 } else |
1964
375950feec51
Cosmetic whitespace changes.
Matti Hamalainen <ccr@tnsp.org>
parents:
1963
diff
changeset
|
311 if (nptr2->type == XML_ELEMENT_NODE && |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
312 !xmlStrcmp(nptr2->name, (xmlChar *)"trackList")) { |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
313 xspf_find_track(nptr2, filename, pos, base); |
891
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
314 } |
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
315 } |
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
316 } |
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
317 } |
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
318 xmlFreeDoc(doc); |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
319 } |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
320 |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
321 |
1962 | 322 static void xspf_add_node(xmlNodePtr node, TupleValueType type, |
323 gboolean isMeta, const gchar *xspfName, const gchar *strVal, | |
324 const gint intVal) | |
1668 | 325 { |
326 gchar tmps[64]; | |
327 xmlNodePtr tmp; | |
328 | |
329 if (isMeta) { | |
330 tmp = xmlNewNode(NULL, (xmlChar *) "meta"); | |
331 xmlSetProp(tmp, (xmlChar *) "rel", (xmlChar *) xspfName); | |
332 } else | |
333 tmp = xmlNewNode(NULL, (xmlChar *) xspfName); | |
334 | |
335 switch (type) { | |
336 case TUPLE_STRING: | |
337 xmlAddChild(tmp, xmlNewText((xmlChar *) strVal)); | |
338 break; | |
339 | |
340 case TUPLE_INT: | |
341 g_snprintf(tmps, sizeof(tmps), "%d", intVal); | |
342 xmlAddChild(tmp, xmlNewText((xmlChar *) tmps)); | |
343 break; | |
344 | |
345 default: | |
346 break; | |
347 } | |
348 | |
349 xmlAddChild(node, tmp); | |
350 } | |
351 | |
352 | |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
353 static void xspf_playlist_save(const gchar *filename, gint pos) |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
354 { |
891
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
355 xmlDocPtr doc; |
1669 | 356 xmlNodePtr rootnode, tracklist; |
891
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
357 GList *node; |
892 | 358 gint baselen = 0; |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
359 gchar *base = NULL; |
2057
cf4fa45ffd80
playlist API vtabling
William Pitcock <nenolod@atheme.org>
parents:
2053
diff
changeset
|
360 Playlist *playlist = aud_playlist_get_active(); |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
361 |
1963
b9b62802b072
Define a preprocessor macro XSDEBUG() for printing debugging messages, if DEBUG is defined.
Matti Hamalainen <ccr@tnsp.org>
parents:
1962
diff
changeset
|
362 XSDEBUG("filename='%s', pos=%d\n", filename, pos); |
892 | 363 |
891
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
364 doc = xmlNewDoc((xmlChar *)"1.0"); |
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
365 doc->charset = XML_CHAR_ENCODING_UTF8; |
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
366 doc->encoding = xmlStrdup((xmlChar *)"UTF-8"); |
585
2d20bc58a290
[svn] tweak xspf plugin to conform xspf specification version 1.
yaz
parents:
577
diff
changeset
|
367 |
891
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
368 rootnode = xmlNewNode(NULL, (xmlChar *)XSPF_ROOT_NODE_NAME); |
892 | 369 xmlSetProp(rootnode, (xmlChar *)"version", (xmlChar *)"1"); |
891
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
370 xmlSetProp(rootnode, (xmlChar *)"xmlns", (xmlChar *)XSPF_XMLNS); |
892 | 371 |
1675
ae9b0327b620
Fix plugins to conform with PLAYLIST_{UN}LOCK() change.
Matti Hamalainen <ccr@tnsp.org>
parents:
1669
diff
changeset
|
372 PLAYLIST_LOCK(playlist); |
1278
d1c66f8ccf73
adapt xspf for file:// scheme.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1271
diff
changeset
|
373 |
d1c66f8ccf73
adapt xspf for file:// scheme.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1271
diff
changeset
|
374 /* relative */ |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
375 if (playlist->attribute & PLAYLIST_USE_RELATIVE) { |
892 | 376 /* prescan to determine base uri */ |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
377 for (node = playlist->entries; node != NULL; node = g_list_next(node)) { |
892 | 378 gchar *ptr1, *ptr2; |
379 PlaylistEntry *entry = PLAYLIST_ENTRY(node->data); | |
380 gchar *tmp; | |
381 gint tmplen = 0; | |
382 | |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
383 if (!is_uri(entry->filename)) { //obsolete |
1966 | 384 gchar *tmp2 = g_path_get_dirname(entry->filename); |
892 | 385 tmp = g_strdup_printf("%s/", tmp2); |
1669 | 386 g_free(tmp2); |
1966 | 387 } else |
892 | 388 tmp = g_strdup(entry->filename); |
389 | |
1964
375950feec51
Cosmetic whitespace changes.
Matti Hamalainen <ccr@tnsp.org>
parents:
1963
diff
changeset
|
390 if (!base) { |
892 | 391 base = strdup(tmp); |
392 baselen = strlen(base); | |
393 } | |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
394 |
892 | 395 ptr1 = base; |
396 ptr2 = tmp; | |
397 | |
398 while(ptr1 && ptr2 && *ptr1 && *ptr2 && *ptr1 == *ptr2) { | |
399 ptr1++; | |
400 ptr2++; | |
401 } | |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
402 |
892 | 403 *ptr2 = '\0'; //terminate |
404 tmplen = ptr2 - tmp; | |
405 | |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
406 if (tmplen <= baselen) { |
892 | 407 g_free(base); |
408 base = tmp; | |
409 baselen = tmplen; | |
1963
b9b62802b072
Define a preprocessor macro XSDEBUG() for printing debugging messages, if DEBUG is defined.
Matti Hamalainen <ccr@tnsp.org>
parents:
1962
diff
changeset
|
410 XSDEBUG("base='%s', baselen=%d\n", base, baselen); |
1966 | 411 } else |
892 | 412 g_free(tmp); |
413 } | |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
414 |
892 | 415 /* set base URI */ |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
416 if (base) { |
892 | 417 gchar *tmp; |
1964
375950feec51
Cosmetic whitespace changes.
Matti Hamalainen <ccr@tnsp.org>
parents:
1963
diff
changeset
|
418 if (!is_uri(base)) { |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
419 tmp = (gchar *) xspf_path_to_uri((xmlChar *)base); |
1964
375950feec51
Cosmetic whitespace changes.
Matti Hamalainen <ccr@tnsp.org>
parents:
1963
diff
changeset
|
420 if (tmp) { |
892 | 421 g_free(base); |
422 base = tmp; | |
423 } | |
424 } | |
425 | |
1964
375950feec51
Cosmetic whitespace changes.
Matti Hamalainen <ccr@tnsp.org>
parents:
1963
diff
changeset
|
426 if (!is_uri(base)) { |
1963
b9b62802b072
Define a preprocessor macro XSDEBUG() for printing debugging messages, if DEBUG is defined.
Matti Hamalainen <ccr@tnsp.org>
parents:
1962
diff
changeset
|
427 XSDEBUG("base is not uri. something is wrong.\n"); |
892 | 428 tmp = g_strdup_printf("file://%s", base); |
429 xmlSetProp(rootnode, (xmlChar *)"xml:base", (xmlChar *)tmp); | |
430 g_free(tmp); | |
1966 | 431 } else |
892 | 432 xmlSetProp(rootnode, (xmlChar *)"xml:base", (xmlChar *)base); |
433 } | |
434 } /* USE_RELATIVE */ | |
435 | |
1278
d1c66f8ccf73
adapt xspf for file:// scheme.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1271
diff
changeset
|
436 /* common */ |
891
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
437 xmlDocSetRootElement(doc, rootnode); |
1669 | 438 xspf_add_node(rootnode, TUPLE_STRING, FALSE, "creator", PACKAGE "-" VERSION, 0); |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
439 |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
440 /* add staticlist marker */ |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
441 if (playlist->attribute & PLAYLIST_STATIC) { |
891
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
442 xmlNodePtr extension, options; |
884 | 443 |
891
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
444 extension = xmlNewNode(NULL, (xmlChar *)"extension"); |
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
445 xmlSetProp(extension, (xmlChar *)"application", (xmlChar *)"audacious"); |
884 | 446 |
891
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
447 options = xmlNewNode(NULL, (xmlChar *)"options"); |
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
448 xmlSetProp(options, (xmlChar *)"staticlist", (xmlChar *)"true"); |
884 | 449 |
891
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
450 xmlAddChild(extension, options); |
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
451 xmlAddChild(rootnode, extension); |
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
452 } |
884 | 453 |
1531
10cfa5b51bce
xspf: Store playlist title when saving playlist
Kieran Clancy <clancy.kieran+audacious@gmail.com>
parents:
1528
diff
changeset
|
454 /* save playlist title */ |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
455 if (playlist->title && playlist->title[0] && |
1669 | 456 g_utf8_validate(playlist->title, -1, NULL)) |
457 xspf_add_node(rootnode, TUPLE_STRING, FALSE, "title", playlist->title, 0); | |
458 | |
1531
10cfa5b51bce
xspf: Store playlist title when saving playlist
Kieran Clancy <clancy.kieran+audacious@gmail.com>
parents:
1528
diff
changeset
|
459 |
891
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
460 tracklist = xmlNewNode(NULL, (xmlChar *)"trackList"); |
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
461 xmlAddChild(rootnode, tracklist); |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
462 |
1964
375950feec51
Cosmetic whitespace changes.
Matti Hamalainen <ccr@tnsp.org>
parents:
1963
diff
changeset
|
463 for (node = playlist->entries; node != NULL; node = g_list_next(node)) { |
891
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
464 PlaylistEntry *entry = PLAYLIST_ENTRY(node->data); |
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
465 xmlNodePtr track, location; |
1668 | 466 gchar *filename = NULL; |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
467 const gchar *scratch = NULL; |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
468 gint scratchi = 0; |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
469 |
891
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
470 track = xmlNewNode(NULL, (xmlChar *)"track"); |
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
471 location = xmlNewNode(NULL, (xmlChar *)"location"); |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
472 |
1964
375950feec51
Cosmetic whitespace changes.
Matti Hamalainen <ccr@tnsp.org>
parents:
1963
diff
changeset
|
473 if (is_uri(entry->filename)) { /* uri */ |
1963
b9b62802b072
Define a preprocessor macro XSDEBUG() for printing debugging messages, if DEBUG is defined.
Matti Hamalainen <ccr@tnsp.org>
parents:
1962
diff
changeset
|
474 XSDEBUG("filename is uri\n"); |
1278
d1c66f8ccf73
adapt xspf for file:// scheme.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1271
diff
changeset
|
475 filename = g_strdup(entry->filename + baselen); // entry->filename is always uri now. |
1966 | 476 } else { /* local file (obsolete) */ |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
477 gchar *tmp = (gchar *) xspf_path_to_uri((const xmlChar *)entry->filename + baselen); |
1964
375950feec51
Cosmetic whitespace changes.
Matti Hamalainen <ccr@tnsp.org>
parents:
1963
diff
changeset
|
478 if (base) { /* relative */ |
892 | 479 filename = g_strdup_printf("%s", tmp); |
1546
a8436c6e3753
Some cleanups; Removed useless heap allocations, use a small static buffer
Matti Hamalainen <ccr@tnsp.org>
parents:
1531
diff
changeset
|
480 } else { |
1963
b9b62802b072
Define a preprocessor macro XSDEBUG() for printing debugging messages, if DEBUG is defined.
Matti Hamalainen <ccr@tnsp.org>
parents:
1962
diff
changeset
|
481 XSDEBUG("absolute and local (obsolete)\n"); |
1278
d1c66f8ccf73
adapt xspf for file:// scheme.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1271
diff
changeset
|
482 filename = g_filename_to_uri(tmp, NULL, NULL); |
892 | 483 } |
1965
41d726acb915
Remove useless NULL assignations.
Matti Hamalainen <ccr@tnsp.org>
parents:
1964
diff
changeset
|
484 g_free(tmp); |
1278
d1c66f8ccf73
adapt xspf for file:// scheme.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1271
diff
changeset
|
485 } /* obsolete */ |
585
2d20bc58a290
[svn] tweak xspf plugin to conform xspf specification version 1.
yaz
parents:
577
diff
changeset
|
486 |
1964
375950feec51
Cosmetic whitespace changes.
Matti Hamalainen <ccr@tnsp.org>
parents:
1963
diff
changeset
|
487 if (!g_utf8_validate(filename, -1, NULL)) |
891
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
488 continue; |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
489 |
891
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
490 xmlAddChild(location, xmlNewText((xmlChar *)filename)); |
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
491 xmlAddChild(track, location); |
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
492 xmlAddChild(tracklist, track); |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
493 |
1669 | 494 /* Do we have a tuple? */ |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
495 if (entry->tuple != NULL) { |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
496 gint i; |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
497 for (i = 0; i < xspf_nentries; i++) { |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
498 const xspf_entry_t *xs = &xspf_entries[i]; |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
499 gboolean isOK = FALSE; |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
500 |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
501 switch (xs->type) { |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
502 case TUPLE_STRING: |
1976
5fa26178eaef
s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents:
1966
diff
changeset
|
503 scratch = aud_tuple_get_string(entry->tuple, xs->tupleField, NULL); |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
504 switch (xs->compare) { |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
505 case CMP_DEF: isOK = (scratch != NULL); break; |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
506 case CMP_NULL: isOK = (scratch == NULL); break; |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
507 } |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
508 if (scratch != NULL && !g_utf8_validate(scratch, -1, NULL)) |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
509 isOK = FALSE; |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
510 break; |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
511 |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
512 case TUPLE_INT: |
1976
5fa26178eaef
s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents:
1966
diff
changeset
|
513 scratchi = aud_tuple_get_int(entry->tuple, xs->tupleField, NULL); |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
514 switch (xs->compare) { |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
515 case CMP_DEF: isOK = (scratchi != 0); break; |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
516 case CMP_GT: isOK = (scratchi > 0); break; |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
517 } |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
518 break; |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
519 |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
520 default: |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
521 break; |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
522 } |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
523 |
1668 | 524 if (isOK) |
525 xspf_add_node(track, xs->type, xs->isMeta, xs->xspfName, scratch, scratchi); | |
891
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
526 } |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
527 |
1669 | 528 /* Write mtime unconditionally to support staticlist */ |
1693 | 529 xspf_add_node(track, TUPLE_INT, TRUE, "mtime", NULL, |
1976
5fa26178eaef
s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents:
1966
diff
changeset
|
530 aud_tuple_get_int(entry->tuple, FIELD_MTIME, NULL)); |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
531 } else { |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
532 |
1668 | 533 if (entry->title != NULL && g_utf8_validate(entry->title, -1, NULL)) |
534 xspf_add_node(track, TUPLE_STRING, FALSE, "title", entry->title, 0); | |
892 | 535 |
1668 | 536 if (entry->length > 0) |
537 xspf_add_node(track, TUPLE_INT, FALSE, "duration", NULL, entry->length); | |
892 | 538 |
1669 | 539 /* Add mtime of -1 */ |
1668 | 540 xspf_add_node(track, TUPLE_INT, TRUE, "mtime", NULL, -1); |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
541 } |
892 | 542 |
891
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
543 g_free(filename); |
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
544 } |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
545 |
1675
ae9b0327b620
Fix plugins to conform with PLAYLIST_{UN}LOCK() change.
Matti Hamalainen <ccr@tnsp.org>
parents:
1669
diff
changeset
|
546 PLAYLIST_UNLOCK(playlist); |
92
fadf346ddde3
[svn] - pls doesn't go along with PLAYLIST_LOCK in playlist_save().
yaz
parents:
87
diff
changeset
|
547 |
891
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
548 xmlSaveFormatFile(filename, doc, 1); |
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
549 xmlFreeDoc(doc); |
892 | 550 xmlFree(base); |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
551 } |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
552 |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
553 |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
554 PlaylistContainer plc_xspf = { |
891
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
555 .name = "XSPF Playlist Format", |
502222ed5dd4
[svn] justify indentation by gnu indent. current state is a mixture of some styles and very hard to maintain. the code is exactly same to previous revision. this is preparation for upcoming commit so that to make taking diff easier.
yaz
parents:
884
diff
changeset
|
556 .ext = "xspf", |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
557 .plc_read = xspf_playlist_load, |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
558 .plc_write = xspf_playlist_save, |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
559 }; |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
560 |
1962 | 561 |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
562 static void xspf_init(void) |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
563 { |
2053
059bd21a0c80
PlaylistContainer API updates
William Pitcock <nenolod@atheme.org>
parents:
1976
diff
changeset
|
564 aud_playlist_container_register(&plc_xspf); |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
565 } |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
566 |
1962 | 567 |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
568 static void xspf_cleanup(void) |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
569 { |
2053
059bd21a0c80
PlaylistContainer API updates
William Pitcock <nenolod@atheme.org>
parents:
1976
diff
changeset
|
570 aud_playlist_container_unregister(&plc_xspf); |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
571 } |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
572 |
1962 | 573 |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
574 DECLARE_PLUGIN(xspf, xspf_init, xspf_cleanup, NULL, NULL, NULL, NULL, NULL, NULL); |