Mercurial > audlegacy-plugins
annotate src/xspf/xspf.c @ 2158:c15aa8c048f4
Added tag audacious-plugins-1.4.0 for changeset 6151338f5af7
author | William Pitcock <nenolod@atheme.org> |
---|---|
date | Tue, 06 Nov 2007 15:11:03 -0600 |
parents | fe479ddb4f4e |
children | 9fa5a7884514 |
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> |
2ebeb7816c5e
Change from "" to <>-style includes. With thanks to ccr for the correct sed voodoo.
chainsaw@localhost
parents:
1701
diff
changeset
|
36 #include <audacious/playlist.h> |
1952
17a6441c71b6
Some missed #include "" to <> changes.
Matti Hamalainen <ccr@tnsp.org>
parents:
1950
diff
changeset
|
37 #include <audacious/playlist_container.h> |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
38 |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
39 #include <libxml/tree.h> |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
40 #include <libxml/parser.h> |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
41 #include <libxml/xmlreader.h> |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
42 #include <libxml/xpath.h> |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
43 #include <libxml/xpathInternals.h> |
641 | 44 #include <libxml/uri.h> |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
45 |
641 | 46 #define XSPF_ROOT_NODE_NAME "playlist" |
47 #define XSPF_XMLNS "http://xspf.org/ns/0/" | |
47 | 48 |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
49 enum { |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
50 CMP_DEF = 0, |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
51 CMP_GT, |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
52 CMP_NULL |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
53 } xspf_compare; |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
54 |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
55 typedef struct { |
1693 | 56 gint tupleField; |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
57 gchar *xspfName; |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
58 TupleValueType type; |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
59 gboolean isMeta; |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
60 gint compare; |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
61 } xspf_entry_t; |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
62 |
47 | 63 |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
64 static const xspf_entry_t xspf_entries[] = { |
1693 | 65 { FIELD_TITLE, "title", TUPLE_STRING, FALSE, CMP_DEF }, |
66 { FIELD_ARTIST, "creator", TUPLE_STRING, FALSE, CMP_DEF }, | |
67 { FIELD_COMMENT, "annotation", TUPLE_STRING, FALSE, CMP_DEF }, | |
68 { FIELD_ALBUM, "album", TUPLE_STRING, FALSE, CMP_DEF }, | |
69 { FIELD_TRACK_NUMBER, "trackNum", TUPLE_INT, FALSE, CMP_DEF }, | |
70 { 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
|
71 |
1693 | 72 { FIELD_YEAR, "year", TUPLE_INT, TRUE, CMP_DEF }, |
73 { FIELD_DATE, "date", TUPLE_STRING, TRUE, CMP_DEF }, | |
74 { FIELD_GENRE, "genre", TUPLE_STRING, TRUE, CMP_DEF }, | |
75 { 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
|
76 }; |
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 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
|
79 |
641 | 80 |
1963
b9b62802b072
Define a preprocessor macro XSDEBUG() for printing debugging messages, if DEBUG is defined.
Matti Hamalainen <ccr@tnsp.org>
parents:
1962
diff
changeset
|
81 #ifdef DEBUG |
b9b62802b072
Define a preprocessor macro XSDEBUG() for printing debugging messages, if DEBUG is defined.
Matti Hamalainen <ccr@tnsp.org>
parents:
1962
diff
changeset
|
82 # define XSDEBUG(...) { fprintf(stderr, "xspf[%s:%d]: ", __FUNCTION__, (int) __LINE__); fprintf(stderr, __VA_ARGS__); } |
b9b62802b072
Define a preprocessor macro XSDEBUG() for printing debugging messages, if DEBUG is defined.
Matti Hamalainen <ccr@tnsp.org>
parents:
1962
diff
changeset
|
83 #else |
b9b62802b072
Define a preprocessor macro XSDEBUG() for printing debugging messages, if DEBUG is defined.
Matti Hamalainen <ccr@tnsp.org>
parents:
1962
diff
changeset
|
84 # 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
|
85 #endif |
b9b62802b072
Define a preprocessor macro XSDEBUG() for printing debugging messages, if DEBUG is defined.
Matti Hamalainen <ccr@tnsp.org>
parents:
1962
diff
changeset
|
86 |
b9b62802b072
Define a preprocessor macro XSDEBUG() for printing debugging messages, if DEBUG is defined.
Matti Hamalainen <ccr@tnsp.org>
parents:
1962
diff
changeset
|
87 |
892 | 88 static gboolean is_uri(gchar *uri) |
89 { | |
1964
375950feec51
Cosmetic whitespace changes.
Matti Hamalainen <ccr@tnsp.org>
parents:
1963
diff
changeset
|
90 if (strstr(uri, "://")) |
892 | 91 return TRUE; |
92 else | |
93 return FALSE; | |
94 } | |
95 | |
1963
b9b62802b072
Define a preprocessor macro XSDEBUG() for printing debugging messages, if DEBUG is defined.
Matti Hamalainen <ccr@tnsp.org>
parents:
1962
diff
changeset
|
96 |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
97 /* 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
|
98 */ |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
99 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
|
100 { |
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 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
|
102 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
|
103 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
|
104 |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
105 if (path == NULL) |
892 | 106 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
|
107 |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
108 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
|
109 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
|
110 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
|
111 } |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
112 |
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
|
113 cal = xmlCanonicPath(path); |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
114 if (cal == NULL) |
892 | 115 return NULL; |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
116 |
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
|
117 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
|
118 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
|
119 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
|
120 xmlFree(cal); |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
121 |
892 | 122 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
|
123 } |
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 |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
125 |
1962 | 126 static void xspf_add_file(xmlNode *track, const gchar *filename, |
127 gint pos, const gchar *base) | |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
128 { |
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
|
129 xmlNode *nptr; |
1444
3b1651d37b58
xspf: update to new API
William Pitcock <nenolod@atheme-project.org>
parents:
1395
diff
changeset
|
130 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
|
131 gchar *location = NULL; |
2057
cf4fa45ffd80
playlist API vtabling
William Pitcock <nenolod@atheme.org>
parents:
2053
diff
changeset
|
132 Playlist *playlist = aud_playlist_get_active(); |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
133 |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
134 |
1976
5fa26178eaef
s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents:
1966
diff
changeset
|
135 tuple = aud_tuple_new(); |
5fa26178eaef
s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents:
1966
diff
changeset
|
136 aud_tuple_associate_int(tuple, FIELD_LENGTH, NULL, -1); |
5fa26178eaef
s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents:
1966
diff
changeset
|
137 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
|
138 |
641 | 139 |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
140 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
|
141 if (nptr->type == XML_ELEMENT_NODE) { |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
142 if (!xmlStrcmp(nptr->name, (xmlChar *)"location")) { |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
143 /* Location is a special case */ |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
144 gchar *str = (gchar *)xmlNodeGetContent(nptr); |
657 | 145 |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
146 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
|
147 xmlFree(str); |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
148 } else { |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
149 /* Rest of the nodes are handled here */ |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
150 gint i; |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
151 gboolean isMeta; |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
152 xmlChar *findName; |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
153 |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
154 if (!xmlStrcmp(nptr->name, (xmlChar *)"meta")) { |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
155 isMeta = TRUE; |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
156 findName = xmlGetProp(nptr, (xmlChar *)"rel"); |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
157 } else { |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
158 isMeta = FALSE; |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
159 findName = xmlStrdup(nptr->name); |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
160 } |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
161 |
1669 | 162 for (i = 0; i < xspf_nentries; i++) |
163 if ((xspf_entries[i].isMeta == isMeta) && | |
164 !xmlStrcmp(findName, (xmlChar *)xspf_entries[i].xspfName)) { | |
165 xmlChar *str = xmlNodeGetContent(nptr); | |
166 switch (xspf_entries[i].type) { | |
167 case TUPLE_STRING: | |
1976
5fa26178eaef
s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents:
1966
diff
changeset
|
168 aud_tuple_associate_string(tuple, xspf_entries[i].tupleField, NULL, (gchar *)str); |
1669 | 169 break; |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
170 |
1669 | 171 case TUPLE_INT: |
1976
5fa26178eaef
s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents:
1966
diff
changeset
|
172 aud_tuple_associate_int(tuple, xspf_entries[i].tupleField, NULL, atol((char *)str)); |
1669 | 173 break; |
174 | |
175 default: | |
176 break; | |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
177 } |
1669 | 178 xmlFree(str); |
179 break; | |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
180 } |
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 xmlFree(findName); |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
183 } |
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
|
184 } |
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 } |
47 | 186 |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
187 if (location) { |
1278
d1c66f8ccf73
adapt xspf for file:// scheme.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1271
diff
changeset
|
188 gchar *uri = NULL; |
1444
3b1651d37b58
xspf: update to new API
William Pitcock <nenolod@atheme-project.org>
parents:
1395
diff
changeset
|
189 gchar *scratch; |
3b1651d37b58
xspf: update to new API
William Pitcock <nenolod@atheme-project.org>
parents:
1395
diff
changeset
|
190 |
3b1651d37b58
xspf: update to new API
William Pitcock <nenolod@atheme-project.org>
parents:
1395
diff
changeset
|
191 scratch = g_path_get_basename(location); |
1976
5fa26178eaef
s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents:
1966
diff
changeset
|
192 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
|
193 g_free(scratch); |
3b1651d37b58
xspf: update to new API
William Pitcock <nenolod@atheme-project.org>
parents:
1395
diff
changeset
|
194 |
3b1651d37b58
xspf: update to new API
William Pitcock <nenolod@atheme-project.org>
parents:
1395
diff
changeset
|
195 scratch = g_path_get_dirname(location); |
1976
5fa26178eaef
s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents:
1966
diff
changeset
|
196 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
|
197 g_free(scratch); |
3b1651d37b58
xspf: update to new API
William Pitcock <nenolod@atheme-project.org>
parents:
1395
diff
changeset
|
198 |
1976
5fa26178eaef
s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents:
1966
diff
changeset
|
199 aud_tuple_associate_string(tuple, FIELD_FILE_EXT, NULL, strrchr(location, '.')); |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
200 |
1976
5fa26178eaef
s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents:
1966
diff
changeset
|
201 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
|
202 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
|
203 |
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
|
204 // add file to playlist |
1278
d1c66f8ccf73
adapt xspf for file:// scheme.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1271
diff
changeset
|
205 uri = g_filename_to_uri(location, NULL, NULL); |
d1c66f8ccf73
adapt xspf for file:// scheme.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1271
diff
changeset
|
206 // uri would be NULL if location is already uri. --yaz |
2057
cf4fa45ffd80
playlist API vtabling
William Pitcock <nenolod@atheme.org>
parents:
2053
diff
changeset
|
207 aud_playlist_load_ins_file_tuple(playlist, uri ? uri: location, filename, pos, tuple); |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
208 g_free(uri); |
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
|
209 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
|
210 } |
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
|
211 |
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 g_free(location); |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
213 } |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
214 |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
215 |
1962 | 216 static void xspf_find_track(xmlNode *tracklist, const gchar *filename, |
217 gint pos, const gchar *base) | |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
218 { |
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
|
219 xmlNode *nptr; |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
220 |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
221 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
|
222 if (nptr->type == XML_ELEMENT_NODE && |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
223 !xmlStrcmp(nptr->name, (xmlChar *)"track")) { |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
224 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
|
225 } |
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
|
226 } |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
227 } |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
228 |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
229 |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
230 static void xspf_find_audoptions(xmlNode *tracklist, const gchar *filename, gint pos) |
641 | 231 { |
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
|
232 xmlNode *nptr; |
2057
cf4fa45ffd80
playlist API vtabling
William Pitcock <nenolod@atheme.org>
parents:
2053
diff
changeset
|
233 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
|
234 |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
235 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
|
236 if (nptr->type == XML_ELEMENT_NODE && |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
237 !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
|
238 xmlChar *opt = NULL; |
884 | 239 |
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
|
240 opt = xmlGetProp(nptr, (xmlChar *)"staticlist"); |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
241 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
|
242 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
|
243 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
|
244 playlist->attribute ^= PLAYLIST_STATIC; |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
245 |
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
|
246 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
|
247 } |
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
|
248 } |
641 | 249 } |
250 | |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
251 |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
252 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
|
253 { |
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
|
254 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
|
255 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
|
256 |
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 g_return_if_fail(filename != NULL); |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
258 |
1963
b9b62802b072
Define a preprocessor macro XSDEBUG() for printing debugging messages, if DEBUG is defined.
Matti Hamalainen <ccr@tnsp.org>
parents:
1962
diff
changeset
|
259 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
|
260 |
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
|
261 doc = xmlRecoverFile(filename); |
1964
375950feec51
Cosmetic whitespace changes.
Matti Hamalainen <ccr@tnsp.org>
parents:
1963
diff
changeset
|
262 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
|
263 return; |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
264 |
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
|
265 // find trackList |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
266 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
|
267 if (nptr->type == XML_ELEMENT_NODE && |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
268 !xmlStrcmp(nptr->name, (xmlChar *)"playlist")) { |
1965
41d726acb915
Remove useless NULL assignations.
Matti Hamalainen <ccr@tnsp.org>
parents:
1964
diff
changeset
|
269 gchar *tmp, *base; |
41d726acb915
Remove useless NULL assignations.
Matti Hamalainen <ccr@tnsp.org>
parents:
1964
diff
changeset
|
270 |
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
|
271 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
|
272 |
b9b62802b072
Define a preprocessor macro XSDEBUG() for printing debugging messages, if DEBUG is defined.
Matti Hamalainen <ccr@tnsp.org>
parents:
1962
diff
changeset
|
273 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
|
274 |
1278
d1c66f8ccf73
adapt xspf for file:// scheme.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1271
diff
changeset
|
275 // 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
|
276 tmp = xmlURIUnescapeString(base, -1, NULL); |
1964
375950feec51
Cosmetic whitespace changes.
Matti Hamalainen <ccr@tnsp.org>
parents:
1963
diff
changeset
|
277 if (tmp) { |
375950feec51
Cosmetic whitespace changes.
Matti Hamalainen <ccr@tnsp.org>
parents:
1963
diff
changeset
|
278 if (!strcmp(tmp, filename)) { |
1278
d1c66f8ccf73
adapt xspf for file:// scheme.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1271
diff
changeset
|
279 xmlFree(base); |
d1c66f8ccf73
adapt xspf for file:// scheme.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1271
diff
changeset
|
280 base = NULL; |
892 | 281 } |
1278
d1c66f8ccf73
adapt xspf for file:// scheme.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1271
diff
changeset
|
282 g_free(tmp); |
892 | 283 } |
1963
b9b62802b072
Define a preprocessor macro XSDEBUG() for printing debugging messages, if DEBUG is defined.
Matti Hamalainen <ccr@tnsp.org>
parents:
1962
diff
changeset
|
284 |
b9b62802b072
Define a preprocessor macro XSDEBUG() for printing debugging messages, if DEBUG is defined.
Matti Hamalainen <ccr@tnsp.org>
parents:
1962
diff
changeset
|
285 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
|
286 |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
287 for (nptr2 = nptr->children; nptr2 != NULL; nptr2 = nptr2->next) { |
641 | 288 |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
289 if (nptr2->type == XML_ELEMENT_NODE && |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
290 !xmlStrcmp(nptr2->name, (xmlChar *)"extension")) { |
641 | 291 //check if application is audacious |
292 xmlChar *app = NULL; | |
293 app = xmlGetProp(nptr2, (xmlChar *)"application"); | |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
294 if (!xmlStrcmp(app, (xmlChar *)"audacious")) |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
295 xspf_find_audoptions(nptr2, filename, pos); |
641 | 296 xmlFree(app); |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
297 } else |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
298 if (nptr2->type == XML_ELEMENT_NODE && |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
299 !xmlStrcmp(nptr2->name, (xmlChar *)"title")) { |
2057
cf4fa45ffd80
playlist API vtabling
William Pitcock <nenolod@atheme.org>
parents:
2053
diff
changeset
|
300 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
|
301 xmlChar *title = xmlNodeGetContent(nptr2); |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
302 |
1528
8fddba1d94e4
xspf: When loading playlist, read title from xml if set
Kieran Clancy <clancy.kieran+audacious@gmail.com>
parents:
1514
diff
changeset
|
303 if (title && *title) { |
2057
cf4fa45ffd80
playlist API vtabling
William Pitcock <nenolod@atheme.org>
parents:
2053
diff
changeset
|
304 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
|
305 } |
8fddba1d94e4
xspf: When loading playlist, read title from xml if set
Kieran Clancy <clancy.kieran+audacious@gmail.com>
parents:
1514
diff
changeset
|
306 xmlFree(title); |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
307 } else |
1964
375950feec51
Cosmetic whitespace changes.
Matti Hamalainen <ccr@tnsp.org>
parents:
1963
diff
changeset
|
308 if (nptr2->type == XML_ELEMENT_NODE && |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
309 !xmlStrcmp(nptr2->name, (xmlChar *)"trackList")) { |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
310 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
|
311 } |
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
|
312 } |
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
|
313 } |
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 xmlFreeDoc(doc); |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
316 } |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
317 |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
318 |
1962 | 319 static void xspf_add_node(xmlNodePtr node, TupleValueType type, |
320 gboolean isMeta, const gchar *xspfName, const gchar *strVal, | |
321 const gint intVal) | |
1668 | 322 { |
323 gchar tmps[64]; | |
324 xmlNodePtr tmp; | |
325 | |
326 if (isMeta) { | |
327 tmp = xmlNewNode(NULL, (xmlChar *) "meta"); | |
328 xmlSetProp(tmp, (xmlChar *) "rel", (xmlChar *) xspfName); | |
329 } else | |
330 tmp = xmlNewNode(NULL, (xmlChar *) xspfName); | |
331 | |
332 switch (type) { | |
333 case TUPLE_STRING: | |
334 xmlAddChild(tmp, xmlNewText((xmlChar *) strVal)); | |
335 break; | |
336 | |
337 case TUPLE_INT: | |
338 g_snprintf(tmps, sizeof(tmps), "%d", intVal); | |
339 xmlAddChild(tmp, xmlNewText((xmlChar *) tmps)); | |
340 break; | |
341 | |
342 default: | |
343 break; | |
344 } | |
345 | |
346 xmlAddChild(node, tmp); | |
347 } | |
348 | |
349 | |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
350 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
|
351 { |
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
|
352 xmlDocPtr doc; |
1669 | 353 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
|
354 GList *node; |
892 | 355 gint baselen = 0; |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
356 gchar *base = NULL; |
2057
cf4fa45ffd80
playlist API vtabling
William Pitcock <nenolod@atheme.org>
parents:
2053
diff
changeset
|
357 Playlist *playlist = aud_playlist_get_active(); |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
358 |
1963
b9b62802b072
Define a preprocessor macro XSDEBUG() for printing debugging messages, if DEBUG is defined.
Matti Hamalainen <ccr@tnsp.org>
parents:
1962
diff
changeset
|
359 XSDEBUG("filename='%s', pos=%d\n", filename, pos); |
892 | 360 |
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
|
361 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
|
362 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
|
363 doc->encoding = xmlStrdup((xmlChar *)"UTF-8"); |
585
2d20bc58a290
[svn] tweak xspf plugin to conform xspf specification version 1.
yaz
parents:
577
diff
changeset
|
364 |
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
|
365 rootnode = xmlNewNode(NULL, (xmlChar *)XSPF_ROOT_NODE_NAME); |
892 | 366 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
|
367 xmlSetProp(rootnode, (xmlChar *)"xmlns", (xmlChar *)XSPF_XMLNS); |
892 | 368 |
1675
ae9b0327b620
Fix plugins to conform with PLAYLIST_{UN}LOCK() change.
Matti Hamalainen <ccr@tnsp.org>
parents:
1669
diff
changeset
|
369 PLAYLIST_LOCK(playlist); |
1278
d1c66f8ccf73
adapt xspf for file:// scheme.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1271
diff
changeset
|
370 |
d1c66f8ccf73
adapt xspf for file:// scheme.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1271
diff
changeset
|
371 /* relative */ |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
372 if (playlist->attribute & PLAYLIST_USE_RELATIVE) { |
892 | 373 /* prescan to determine base uri */ |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
374 for (node = playlist->entries; node != NULL; node = g_list_next(node)) { |
892 | 375 gchar *ptr1, *ptr2; |
376 PlaylistEntry *entry = PLAYLIST_ENTRY(node->data); | |
377 gchar *tmp; | |
378 gint tmplen = 0; | |
379 | |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
380 if (!is_uri(entry->filename)) { //obsolete |
1966 | 381 gchar *tmp2 = g_path_get_dirname(entry->filename); |
892 | 382 tmp = g_strdup_printf("%s/", tmp2); |
1669 | 383 g_free(tmp2); |
1966 | 384 } else |
892 | 385 tmp = g_strdup(entry->filename); |
386 | |
1964
375950feec51
Cosmetic whitespace changes.
Matti Hamalainen <ccr@tnsp.org>
parents:
1963
diff
changeset
|
387 if (!base) { |
892 | 388 base = strdup(tmp); |
389 baselen = strlen(base); | |
390 } | |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
391 |
892 | 392 ptr1 = base; |
393 ptr2 = tmp; | |
394 | |
395 while(ptr1 && ptr2 && *ptr1 && *ptr2 && *ptr1 == *ptr2) { | |
396 ptr1++; | |
397 ptr2++; | |
398 } | |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
399 |
892 | 400 *ptr2 = '\0'; //terminate |
401 tmplen = ptr2 - tmp; | |
402 | |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
403 if (tmplen <= baselen) { |
892 | 404 g_free(base); |
405 base = tmp; | |
406 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
|
407 XSDEBUG("base='%s', baselen=%d\n", base, baselen); |
1966 | 408 } else |
892 | 409 g_free(tmp); |
410 } | |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
411 |
892 | 412 /* set base URI */ |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
413 if (base) { |
892 | 414 gchar *tmp; |
1964
375950feec51
Cosmetic whitespace changes.
Matti Hamalainen <ccr@tnsp.org>
parents:
1963
diff
changeset
|
415 if (!is_uri(base)) { |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
416 tmp = (gchar *) xspf_path_to_uri((xmlChar *)base); |
1964
375950feec51
Cosmetic whitespace changes.
Matti Hamalainen <ccr@tnsp.org>
parents:
1963
diff
changeset
|
417 if (tmp) { |
892 | 418 g_free(base); |
419 base = tmp; | |
420 } | |
421 } | |
422 | |
1964
375950feec51
Cosmetic whitespace changes.
Matti Hamalainen <ccr@tnsp.org>
parents:
1963
diff
changeset
|
423 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
|
424 XSDEBUG("base is not uri. something is wrong.\n"); |
892 | 425 tmp = g_strdup_printf("file://%s", base); |
426 xmlSetProp(rootnode, (xmlChar *)"xml:base", (xmlChar *)tmp); | |
427 g_free(tmp); | |
1966 | 428 } else |
892 | 429 xmlSetProp(rootnode, (xmlChar *)"xml:base", (xmlChar *)base); |
430 } | |
431 } /* USE_RELATIVE */ | |
432 | |
1278
d1c66f8ccf73
adapt xspf for file:// scheme.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1271
diff
changeset
|
433 /* 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
|
434 xmlDocSetRootElement(doc, rootnode); |
1669 | 435 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
|
436 |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
437 /* add staticlist marker */ |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
438 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
|
439 xmlNodePtr extension, options; |
884 | 440 |
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
|
441 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
|
442 xmlSetProp(extension, (xmlChar *)"application", (xmlChar *)"audacious"); |
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 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
|
445 xmlSetProp(options, (xmlChar *)"staticlist", (xmlChar *)"true"); |
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 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
|
448 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
|
449 } |
884 | 450 |
1531
10cfa5b51bce
xspf: Store playlist title when saving playlist
Kieran Clancy <clancy.kieran+audacious@gmail.com>
parents:
1528
diff
changeset
|
451 /* save playlist title */ |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
452 if (playlist->title && playlist->title[0] && |
1669 | 453 g_utf8_validate(playlist->title, -1, NULL)) |
454 xspf_add_node(rootnode, TUPLE_STRING, FALSE, "title", playlist->title, 0); | |
455 | |
1531
10cfa5b51bce
xspf: Store playlist title when saving playlist
Kieran Clancy <clancy.kieran+audacious@gmail.com>
parents:
1528
diff
changeset
|
456 |
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
|
457 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
|
458 xmlAddChild(rootnode, tracklist); |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
459 |
1964
375950feec51
Cosmetic whitespace changes.
Matti Hamalainen <ccr@tnsp.org>
parents:
1963
diff
changeset
|
460 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
|
461 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
|
462 xmlNodePtr track, location; |
1668 | 463 gchar *filename = NULL; |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
464 const gchar *scratch = NULL; |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
465 gint scratchi = 0; |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
466 |
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
|
467 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
|
468 location = xmlNewNode(NULL, (xmlChar *)"location"); |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
469 |
1964
375950feec51
Cosmetic whitespace changes.
Matti Hamalainen <ccr@tnsp.org>
parents:
1963
diff
changeset
|
470 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
|
471 XSDEBUG("filename is uri\n"); |
1278
d1c66f8ccf73
adapt xspf for file:// scheme.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1271
diff
changeset
|
472 filename = g_strdup(entry->filename + baselen); // entry->filename is always uri now. |
1966 | 473 } else { /* local file (obsolete) */ |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
474 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
|
475 if (base) { /* relative */ |
892 | 476 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
|
477 } 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
|
478 XSDEBUG("absolute and local (obsolete)\n"); |
1278
d1c66f8ccf73
adapt xspf for file:// scheme.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1271
diff
changeset
|
479 filename = g_filename_to_uri(tmp, NULL, NULL); |
892 | 480 } |
1965
41d726acb915
Remove useless NULL assignations.
Matti Hamalainen <ccr@tnsp.org>
parents:
1964
diff
changeset
|
481 g_free(tmp); |
1278
d1c66f8ccf73
adapt xspf for file:// scheme.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1271
diff
changeset
|
482 } /* obsolete */ |
585
2d20bc58a290
[svn] tweak xspf plugin to conform xspf specification version 1.
yaz
parents:
577
diff
changeset
|
483 |
1964
375950feec51
Cosmetic whitespace changes.
Matti Hamalainen <ccr@tnsp.org>
parents:
1963
diff
changeset
|
484 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
|
485 continue; |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
486 |
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
|
487 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
|
488 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
|
489 xmlAddChild(tracklist, track); |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
490 |
1669 | 491 /* Do we have a tuple? */ |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
492 if (entry->tuple != NULL) { |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
493 gint i; |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
494 for (i = 0; i < xspf_nentries; i++) { |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
495 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
|
496 gboolean isOK = FALSE; |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
497 |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
498 switch (xs->type) { |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
499 case TUPLE_STRING: |
1976
5fa26178eaef
s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents:
1966
diff
changeset
|
500 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
|
501 switch (xs->compare) { |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
502 case CMP_DEF: isOK = (scratch != NULL); break; |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
503 case CMP_NULL: isOK = (scratch == NULL); break; |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
504 } |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
505 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
|
506 isOK = FALSE; |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
507 break; |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
508 |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
509 case TUPLE_INT: |
1976
5fa26178eaef
s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents:
1966
diff
changeset
|
510 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
|
511 switch (xs->compare) { |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
512 case CMP_DEF: isOK = (scratchi != 0); break; |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
513 case CMP_GT: isOK = (scratchi > 0); break; |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
514 } |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
515 break; |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
516 |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
517 default: |
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 |
1668 | 521 if (isOK) |
522 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
|
523 } |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
524 |
1669 | 525 /* Write mtime unconditionally to support staticlist */ |
1693 | 526 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
|
527 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
|
528 } else { |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
529 |
1668 | 530 if (entry->title != NULL && g_utf8_validate(entry->title, -1, NULL)) |
531 xspf_add_node(track, TUPLE_STRING, FALSE, "title", entry->title, 0); | |
892 | 532 |
1668 | 533 if (entry->length > 0) |
534 xspf_add_node(track, TUPLE_INT, FALSE, "duration", NULL, entry->length); | |
892 | 535 |
1669 | 536 /* Add mtime of -1 */ |
1668 | 537 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
|
538 } |
892 | 539 |
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
|
540 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
|
541 } |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
542 |
1675
ae9b0327b620
Fix plugins to conform with PLAYLIST_{UN}LOCK() change.
Matti Hamalainen <ccr@tnsp.org>
parents:
1669
diff
changeset
|
543 PLAYLIST_UNLOCK(playlist); |
92
fadf346ddde3
[svn] - pls doesn't go along with PLAYLIST_LOCK in playlist_save().
yaz
parents:
87
diff
changeset
|
544 |
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
|
545 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
|
546 xmlFreeDoc(doc); |
892 | 547 xmlFree(base); |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
548 } |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
549 |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
550 |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
551 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
|
552 .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
|
553 .ext = "xspf", |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
554 .plc_read = xspf_playlist_load, |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
555 .plc_write = xspf_playlist_save, |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
556 }; |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
557 |
1962 | 558 |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
559 static void xspf_init(void) |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
560 { |
2053
059bd21a0c80
PlaylistContainer API updates
William Pitcock <nenolod@atheme.org>
parents:
1976
diff
changeset
|
561 aud_playlist_container_register(&plc_xspf); |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
562 } |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
563 |
1962 | 564 |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
565 static void xspf_cleanup(void) |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
566 { |
2053
059bd21a0c80
PlaylistContainer API updates
William Pitcock <nenolod@atheme.org>
parents:
1976
diff
changeset
|
567 aud_playlist_container_unregister(&plc_xspf); |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
568 } |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
569 |
1962 | 570 |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
571 DECLARE_PLUGIN(xspf, xspf_init, xspf_cleanup, NULL, NULL, NULL, NULL, NULL, NULL); |