Mercurial > audlegacy-plugins
annotate src/xspf/xspf.c @ 3172:1b2350bdeaef
alsa-ng: Be less stupid if things don't open.
author | William Pitcock <nenolod@atheme.org> |
---|---|
date | Fri, 15 May 2009 16:06:55 -0500 |
parents | 528e08654016 |
children |
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 */ |
2213
137187e7a379
make use of AUDDBG() for debug print out.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
2170
diff
changeset
|
21 |
137187e7a379
make use of AUDDBG() for debug print out.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
2170
diff
changeset
|
22 /* #define AUD_DEBUG 1 */ |
137187e7a379
make use of AUDDBG() for debug print out.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
2170
diff
changeset
|
23 |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
24 #include <config.h> |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
25 |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
26 #include <glib.h> |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
27 #include <string.h> |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
28 #include <stdlib.h> |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
29 #include <time.h> |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
30 |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
31 #include <unistd.h> |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
32 #include <sys/types.h> |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
33 #include <sys/stat.h> |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
34 #include <sys/errno.h> |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
35 |
2971
3134a0987162
- changed include path from audacious to audlegacy.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
2665
diff
changeset
|
36 #include <audlegacy/plugin.h> |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
37 |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
38 #include <libxml/tree.h> |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
39 #include <libxml/parser.h> |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
40 #include <libxml/xmlreader.h> |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
41 #include <libxml/xpath.h> |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
42 #include <libxml/xpathInternals.h> |
641 | 43 #include <libxml/uri.h> |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
44 |
641 | 45 #define XSPF_ROOT_NODE_NAME "playlist" |
46 #define XSPF_XMLNS "http://xspf.org/ns/0/" | |
47 | 47 |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
48 enum { |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
49 CMP_DEF = 0, |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
50 CMP_GT, |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
51 CMP_NULL |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
52 } xspf_compare; |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
53 |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
54 typedef struct { |
1693 | 55 gint tupleField; |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
56 gchar *xspfName; |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
57 TupleValueType type; |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
58 gboolean isMeta; |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
59 gint compare; |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
60 } xspf_entry_t; |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
61 |
47 | 62 |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
63 static const xspf_entry_t xspf_entries[] = { |
1693 | 64 { FIELD_TITLE, "title", TUPLE_STRING, FALSE, CMP_DEF }, |
65 { FIELD_ARTIST, "creator", TUPLE_STRING, FALSE, CMP_DEF }, | |
66 { FIELD_COMMENT, "annotation", TUPLE_STRING, FALSE, CMP_DEF }, | |
67 { FIELD_ALBUM, "album", TUPLE_STRING, FALSE, CMP_DEF }, | |
68 { FIELD_TRACK_NUMBER, "trackNum", TUPLE_INT, FALSE, CMP_DEF }, | |
69 { 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
|
70 |
1693 | 71 { FIELD_YEAR, "year", TUPLE_INT, TRUE, CMP_DEF }, |
72 { FIELD_DATE, "date", TUPLE_STRING, TRUE, CMP_DEF }, | |
73 { FIELD_GENRE, "genre", TUPLE_STRING, TRUE, CMP_DEF }, | |
2234
ef61e0c66000
xspf had not read mtime from some time.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
2213
diff
changeset
|
74 { FIELD_MTIME, "mtime", TUPLE_INT, TRUE, CMP_DEF }, |
1693 | 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 |
892 | 80 static gboolean is_uri(gchar *uri) |
81 { | |
1964
375950feec51
Cosmetic whitespace changes.
Matti Hamalainen <ccr@tnsp.org>
parents:
1963
diff
changeset
|
82 if (strstr(uri, "://")) |
892 | 83 return TRUE; |
84 else | |
85 return FALSE; | |
86 } | |
87 | |
1963
b9b62802b072
Define a preprocessor macro XSDEBUG() for printing debugging messages, if DEBUG is defined.
Matti Hamalainen <ccr@tnsp.org>
parents:
1962
diff
changeset
|
88 |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
89 /* 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
|
90 */ |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
91 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
|
92 { |
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
|
93 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
|
94 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
|
95 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
|
96 |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
97 if (path == NULL) |
892 | 98 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
|
99 |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
100 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
|
101 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
|
102 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
|
103 } |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
104 |
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
|
105 cal = xmlCanonicPath(path); |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
106 if (cal == NULL) |
892 | 107 return NULL; |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
108 |
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
|
109 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
|
110 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
|
111 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
|
112 xmlFree(cal); |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
113 |
892 | 114 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
|
115 } |
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
|
116 |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
117 |
1962 | 118 static void xspf_add_file(xmlNode *track, const gchar *filename, |
119 gint pos, const gchar *base) | |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
120 { |
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
|
121 xmlNode *nptr; |
1444
3b1651d37b58
xspf: update to new API
William Pitcock <nenolod@atheme-project.org>
parents:
1395
diff
changeset
|
122 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
|
123 gchar *location = NULL; |
2057
cf4fa45ffd80
playlist API vtabling
William Pitcock <nenolod@atheme.org>
parents:
2053
diff
changeset
|
124 Playlist *playlist = aud_playlist_get_active(); |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
125 |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
126 |
1976
5fa26178eaef
s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents:
1966
diff
changeset
|
127 tuple = aud_tuple_new(); |
5fa26178eaef
s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents:
1966
diff
changeset
|
128 aud_tuple_associate_int(tuple, FIELD_LENGTH, NULL, -1); |
5fa26178eaef
s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents:
1966
diff
changeset
|
129 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
|
130 |
641 | 131 |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
132 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
|
133 if (nptr->type == XML_ELEMENT_NODE) { |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
134 if (!xmlStrcmp(nptr->name, (xmlChar *)"location")) { |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
135 /* Location is a special case */ |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
136 gchar *str = (gchar *)xmlNodeGetContent(nptr); |
2665
3f931f933750
A tentative fix for adding XSPF playlists with relative file/pathnames.
Matti Hamalainen <ccr@tnsp.org>
parents:
2576
diff
changeset
|
137 if (!strstr(str, "://") && base) |
3f931f933750
A tentative fix for adding XSPF playlists with relative file/pathnames.
Matti Hamalainen <ccr@tnsp.org>
parents:
2576
diff
changeset
|
138 location = g_strdup_printf("%s/%s", base, str); |
3f931f933750
A tentative fix for adding XSPF playlists with relative file/pathnames.
Matti Hamalainen <ccr@tnsp.org>
parents:
2576
diff
changeset
|
139 else |
3f931f933750
A tentative fix for adding XSPF playlists with relative file/pathnames.
Matti Hamalainen <ccr@tnsp.org>
parents:
2576
diff
changeset
|
140 location = g_strdup(str); |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
141 xmlFree(str); |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
142 } else { |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
143 /* Rest of the nodes are handled here */ |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
144 gint i; |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
145 gboolean isMeta; |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
146 xmlChar *findName; |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
147 |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
148 if (!xmlStrcmp(nptr->name, (xmlChar *)"meta")) { |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
149 isMeta = TRUE; |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
150 findName = xmlGetProp(nptr, (xmlChar *)"rel"); |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
151 } else { |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
152 isMeta = FALSE; |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
153 findName = xmlStrdup(nptr->name); |
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 |
1669 | 156 for (i = 0; i < xspf_nentries; i++) |
157 if ((xspf_entries[i].isMeta == isMeta) && | |
158 !xmlStrcmp(findName, (xmlChar *)xspf_entries[i].xspfName)) { | |
159 xmlChar *str = xmlNodeGetContent(nptr); | |
160 switch (xspf_entries[i].type) { | |
161 case TUPLE_STRING: | |
1976
5fa26178eaef
s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents:
1966
diff
changeset
|
162 aud_tuple_associate_string(tuple, xspf_entries[i].tupleField, NULL, (gchar *)str); |
1669 | 163 break; |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
164 |
1669 | 165 case TUPLE_INT: |
2234
ef61e0c66000
xspf had not read mtime from some time.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
2213
diff
changeset
|
166 AUDDBG("field=%s val=%s\n", xspf_entries[i].xspfName, str); |
1976
5fa26178eaef
s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents:
1966
diff
changeset
|
167 aud_tuple_associate_int(tuple, xspf_entries[i].tupleField, NULL, atol((char *)str)); |
1669 | 168 break; |
169 | |
170 default: | |
171 break; | |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
172 } |
1669 | 173 xmlFree(str); |
174 break; | |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
175 } |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
176 |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
177 xmlFree(findName); |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
178 } |
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
|
179 } |
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
|
180 } |
47 | 181 |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
182 if (location) { |
2243
58b89671b395
make use of aud_uri_to_display_*()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
2234
diff
changeset
|
183 gchar *scratch = NULL; |
1444
3b1651d37b58
xspf: update to new API
William Pitcock <nenolod@atheme-project.org>
parents:
1395
diff
changeset
|
184 |
2166
9fa5a7884514
unescape uri before write into tuple.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
2126
diff
changeset
|
185 /* filename and path in tuple must be unescaped. */ |
2243
58b89671b395
make use of aud_uri_to_display_*()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
2234
diff
changeset
|
186 scratch = aud_uri_to_display_basename(location); |
1976
5fa26178eaef
s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents:
1966
diff
changeset
|
187 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
|
188 g_free(scratch); |
3b1651d37b58
xspf: update to new API
William Pitcock <nenolod@atheme-project.org>
parents:
1395
diff
changeset
|
189 |
2243
58b89671b395
make use of aud_uri_to_display_*()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
2234
diff
changeset
|
190 scratch = aud_uri_to_display_dirname(location); |
1976
5fa26178eaef
s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents:
1966
diff
changeset
|
191 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
|
192 g_free(scratch); |
3b1651d37b58
xspf: update to new API
William Pitcock <nenolod@atheme-project.org>
parents:
1395
diff
changeset
|
193 |
2243
58b89671b395
make use of aud_uri_to_display_*()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
2234
diff
changeset
|
194 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
|
195 |
2213
137187e7a379
make use of AUDDBG() for debug print out.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
2170
diff
changeset
|
196 AUDDBG("tuple->file_name = %s\n", aud_tuple_get_string(tuple, FIELD_FILE_NAME, NULL)); |
137187e7a379
make use of AUDDBG() for debug print out.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
2170
diff
changeset
|
197 AUDDBG("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
|
198 |
2166
9fa5a7884514
unescape uri before write into tuple.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
2126
diff
changeset
|
199 /* 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
|
200 aud_playlist_load_ins_file_tuple(playlist, location, filename, pos, 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
|
201 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
|
202 } |
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
|
203 |
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 g_free(location); |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
205 } |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
206 |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
207 |
1962 | 208 static void xspf_find_track(xmlNode *tracklist, const gchar *filename, |
209 gint pos, const gchar *base) | |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
210 { |
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
|
211 xmlNode *nptr; |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
212 |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
213 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
|
214 if (nptr->type == XML_ELEMENT_NODE && |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
215 !xmlStrcmp(nptr->name, (xmlChar *)"track")) { |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
216 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
|
217 } |
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
|
218 } |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
219 } |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
220 |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
221 |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
222 static void xspf_find_audoptions(xmlNode *tracklist, const gchar *filename, gint pos) |
641 | 223 { |
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
|
224 xmlNode *nptr; |
2057
cf4fa45ffd80
playlist API vtabling
William Pitcock <nenolod@atheme.org>
parents:
2053
diff
changeset
|
225 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
|
226 |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
227 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
|
228 if (nptr->type == XML_ELEMENT_NODE && |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
229 !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
|
230 xmlChar *opt = NULL; |
884 | 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 opt = xmlGetProp(nptr, (xmlChar *)"staticlist"); |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
233 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
|
234 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
|
235 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
|
236 playlist->attribute ^= PLAYLIST_STATIC; |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
237 |
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 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
|
239 } |
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 } |
641 | 241 } |
242 | |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
243 |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
244 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
|
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 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
|
247 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
|
248 |
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 g_return_if_fail(filename != NULL); |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
250 |
2213
137187e7a379
make use of AUDDBG() for debug print out.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
2170
diff
changeset
|
251 AUDDBG("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
|
252 |
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
|
253 doc = xmlRecoverFile(filename); |
1964
375950feec51
Cosmetic whitespace changes.
Matti Hamalainen <ccr@tnsp.org>
parents:
1963
diff
changeset
|
254 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
|
255 return; |
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 // find trackList |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
258 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
|
259 if (nptr->type == XML_ELEMENT_NODE && |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
260 !xmlStrcmp(nptr->name, (xmlChar *)"playlist")) { |
1965
41d726acb915
Remove useless NULL assignations.
Matti Hamalainen <ccr@tnsp.org>
parents:
1964
diff
changeset
|
261 gchar *tmp, *base; |
41d726acb915
Remove useless NULL assignations.
Matti Hamalainen <ccr@tnsp.org>
parents:
1964
diff
changeset
|
262 |
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 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
|
264 |
2665
3f931f933750
A tentative fix for adding XSPF playlists with relative file/pathnames.
Matti Hamalainen <ccr@tnsp.org>
parents:
2576
diff
changeset
|
265 AUDDBG("base #1 = %s\n", 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
|
266 |
1278
d1c66f8ccf73
adapt xspf for file:// scheme.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1271
diff
changeset
|
267 // 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
|
268 tmp = xmlURIUnescapeString(base, -1, NULL); |
1964
375950feec51
Cosmetic whitespace changes.
Matti Hamalainen <ccr@tnsp.org>
parents:
1963
diff
changeset
|
269 if (tmp) { |
375950feec51
Cosmetic whitespace changes.
Matti Hamalainen <ccr@tnsp.org>
parents:
1963
diff
changeset
|
270 if (!strcmp(tmp, filename)) { |
1278
d1c66f8ccf73
adapt xspf for file:// scheme.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1271
diff
changeset
|
271 xmlFree(base); |
d1c66f8ccf73
adapt xspf for file:// scheme.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1271
diff
changeset
|
272 base = NULL; |
892 | 273 } |
1278
d1c66f8ccf73
adapt xspf for file:// scheme.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1271
diff
changeset
|
274 g_free(tmp); |
892 | 275 } |
1963
b9b62802b072
Define a preprocessor macro XSDEBUG() for printing debugging messages, if DEBUG is defined.
Matti Hamalainen <ccr@tnsp.org>
parents:
1962
diff
changeset
|
276 |
2665
3f931f933750
A tentative fix for adding XSPF playlists with relative file/pathnames.
Matti Hamalainen <ccr@tnsp.org>
parents:
2576
diff
changeset
|
277 AUDDBG("base #2 = %s\n", base); |
3f931f933750
A tentative fix for adding XSPF playlists with relative file/pathnames.
Matti Hamalainen <ccr@tnsp.org>
parents:
2576
diff
changeset
|
278 |
3f931f933750
A tentative fix for adding XSPF playlists with relative file/pathnames.
Matti Hamalainen <ccr@tnsp.org>
parents:
2576
diff
changeset
|
279 if (!base) |
3f931f933750
A tentative fix for adding XSPF playlists with relative file/pathnames.
Matti Hamalainen <ccr@tnsp.org>
parents:
2576
diff
changeset
|
280 base = g_path_get_dirname(filename); |
3f931f933750
A tentative fix for adding XSPF playlists with relative file/pathnames.
Matti Hamalainen <ccr@tnsp.org>
parents:
2576
diff
changeset
|
281 |
3f931f933750
A tentative fix for adding XSPF playlists with relative file/pathnames.
Matti Hamalainen <ccr@tnsp.org>
parents:
2576
diff
changeset
|
282 AUDDBG("base #3 = %s\n", 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
|
283 |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
284 for (nptr2 = nptr->children; nptr2 != NULL; nptr2 = nptr2->next) { |
641 | 285 |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
286 if (nptr2->type == XML_ELEMENT_NODE && |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
287 !xmlStrcmp(nptr2->name, (xmlChar *)"extension")) { |
641 | 288 //check if application is audacious |
289 xmlChar *app = NULL; | |
290 app = xmlGetProp(nptr2, (xmlChar *)"application"); | |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
291 if (!xmlStrcmp(app, (xmlChar *)"audacious")) |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
292 xspf_find_audoptions(nptr2, filename, pos); |
641 | 293 xmlFree(app); |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
294 } else |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
295 if (nptr2->type == XML_ELEMENT_NODE && |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
296 !xmlStrcmp(nptr2->name, (xmlChar *)"title")) { |
2057
cf4fa45ffd80
playlist API vtabling
William Pitcock <nenolod@atheme.org>
parents:
2053
diff
changeset
|
297 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
|
298 xmlChar *title = xmlNodeGetContent(nptr2); |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
299 |
1528
8fddba1d94e4
xspf: When loading playlist, read title from xml if set
Kieran Clancy <clancy.kieran+audacious@gmail.com>
parents:
1514
diff
changeset
|
300 if (title && *title) { |
2057
cf4fa45ffd80
playlist API vtabling
William Pitcock <nenolod@atheme.org>
parents:
2053
diff
changeset
|
301 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
|
302 } |
8fddba1d94e4
xspf: When loading playlist, read title from xml if set
Kieran Clancy <clancy.kieran+audacious@gmail.com>
parents:
1514
diff
changeset
|
303 xmlFree(title); |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
304 } else |
1964
375950feec51
Cosmetic whitespace changes.
Matti Hamalainen <ccr@tnsp.org>
parents:
1963
diff
changeset
|
305 if (nptr2->type == XML_ELEMENT_NODE && |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
306 !xmlStrcmp(nptr2->name, (xmlChar *)"trackList")) { |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
307 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
|
308 } |
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
|
309 } |
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
|
310 } |
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 xmlFreeDoc(doc); |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
313 } |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
314 |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
315 |
3090
528e08654016
Backed out changeset 9816407adf4a
William Pitcock <nenolod@atheme.org>
parents:
3088
diff
changeset
|
316 static void xspf_add_node(xmlNodePtr node, TupleValueType type, |
1962 | 317 gboolean isMeta, const gchar *xspfName, const gchar *strVal, |
318 const gint intVal) | |
1668 | 319 { |
320 gchar tmps[64]; | |
321 xmlNodePtr tmp; | |
322 | |
323 if (isMeta) { | |
324 tmp = xmlNewNode(NULL, (xmlChar *) "meta"); | |
325 xmlSetProp(tmp, (xmlChar *) "rel", (xmlChar *) xspfName); | |
326 } else | |
327 tmp = xmlNewNode(NULL, (xmlChar *) xspfName); | |
328 | |
329 switch (type) { | |
330 case TUPLE_STRING: | |
3090
528e08654016
Backed out changeset 9816407adf4a
William Pitcock <nenolod@atheme.org>
parents:
3088
diff
changeset
|
331 xmlAddChild(tmp, xmlNewText((xmlChar *) strVal)); |
1668 | 332 break; |
333 | |
334 case TUPLE_INT: | |
335 g_snprintf(tmps, sizeof(tmps), "%d", intVal); | |
336 xmlAddChild(tmp, xmlNewText((xmlChar *) tmps)); | |
337 break; | |
338 | |
339 default: | |
340 break; | |
341 } | |
342 | |
343 xmlAddChild(node, tmp); | |
344 } | |
345 | |
346 | |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
347 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
|
348 { |
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
|
349 xmlDocPtr doc; |
1669 | 350 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
|
351 GList *node; |
892 | 352 gint baselen = 0; |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
353 gchar *base = NULL; |
2057
cf4fa45ffd80
playlist API vtabling
William Pitcock <nenolod@atheme.org>
parents:
2053
diff
changeset
|
354 Playlist *playlist = aud_playlist_get_active(); |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
355 |
2213
137187e7a379
make use of AUDDBG() for debug print out.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
2170
diff
changeset
|
356 AUDDBG("filename='%s', pos=%d\n", filename, pos); |
892 | 357 |
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
|
358 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
|
359 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
|
360 doc->encoding = xmlStrdup((xmlChar *)"UTF-8"); |
585
2d20bc58a290
[svn] tweak xspf plugin to conform xspf specification version 1.
yaz
parents:
577
diff
changeset
|
361 |
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
|
362 rootnode = xmlNewNode(NULL, (xmlChar *)XSPF_ROOT_NODE_NAME); |
892 | 363 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
|
364 xmlSetProp(rootnode, (xmlChar *)"xmlns", (xmlChar *)XSPF_XMLNS); |
892 | 365 |
1675
ae9b0327b620
Fix plugins to conform with PLAYLIST_{UN}LOCK() change.
Matti Hamalainen <ccr@tnsp.org>
parents:
1669
diff
changeset
|
366 PLAYLIST_LOCK(playlist); |
1278
d1c66f8ccf73
adapt xspf for file:// scheme.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1271
diff
changeset
|
367 |
d1c66f8ccf73
adapt xspf for file:// scheme.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1271
diff
changeset
|
368 /* relative */ |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
369 if (playlist->attribute & PLAYLIST_USE_RELATIVE) { |
892 | 370 /* prescan to determine base uri */ |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
371 for (node = playlist->entries; node != NULL; node = g_list_next(node)) { |
2455 | 372 gchar *ptr1, *ptr2, *ptrslash; |
892 | 373 PlaylistEntry *entry = PLAYLIST_ENTRY(node->data); |
374 gchar *tmp; | |
375 gint tmplen = 0; | |
376 | |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
377 if (!is_uri(entry->filename)) { //obsolete |
1966 | 378 gchar *tmp2 = g_path_get_dirname(entry->filename); |
892 | 379 tmp = g_strdup_printf("%s/", tmp2); |
1669 | 380 g_free(tmp2); |
1966 | 381 } else |
892 | 382 tmp = g_strdup(entry->filename); |
383 | |
1964
375950feec51
Cosmetic whitespace changes.
Matti Hamalainen <ccr@tnsp.org>
parents:
1963
diff
changeset
|
384 if (!base) { |
892 | 385 base = strdup(tmp); |
386 baselen = strlen(base); | |
387 } | |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
388 |
892 | 389 ptr1 = base; |
2455 | 390 ptrslash = ptr2 = tmp; |
892 | 391 |
392 while(ptr1 && ptr2 && *ptr1 && *ptr2 && *ptr1 == *ptr2) { | |
2455 | 393 if (*ptr2 == '/') ptrslash = ptr2 + 1; |
394 | |
892 | 395 ptr1++; |
396 ptr2++; | |
397 } | |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
398 |
2455 | 399 if (!(*ptrslash)) ptrslash--; |
400 *ptrslash = '\0'; //terminate | |
401 tmplen = ptrslash - tmp; | |
892 | 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; | |
2213
137187e7a379
make use of AUDDBG() for debug print out.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
2170
diff
changeset
|
407 AUDDBG("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)) { |
2213
137187e7a379
make use of AUDDBG() for debug print out.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
2170
diff
changeset
|
424 AUDDBG("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); |
3090
528e08654016
Backed out changeset 9816407adf4a
William Pitcock <nenolod@atheme.org>
parents:
3088
diff
changeset
|
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)) |
3090
528e08654016
Backed out changeset 9816407adf4a
William Pitcock <nenolod@atheme.org>
parents:
3088
diff
changeset
|
454 xspf_add_node(rootnode, TUPLE_STRING, FALSE, "title", playlist->title, 0); |
1669 | 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 */ |
2213
137187e7a379
make use of AUDDBG() for debug print out.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
2170
diff
changeset
|
471 AUDDBG("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 { |
2213
137187e7a379
make use of AUDDBG() for debug print out.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
2170
diff
changeset
|
478 AUDDBG("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) |
3090
528e08654016
Backed out changeset 9816407adf4a
William Pitcock <nenolod@atheme.org>
parents:
3088
diff
changeset
|
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 |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
525 } else { |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
526 |
1668 | 527 if (entry->title != NULL && g_utf8_validate(entry->title, -1, NULL)) |
3090
528e08654016
Backed out changeset 9816407adf4a
William Pitcock <nenolod@atheme.org>
parents:
3088
diff
changeset
|
528 xspf_add_node(track, TUPLE_STRING, FALSE, "title", entry->title, 0); |
892 | 529 |
1668 | 530 if (entry->length > 0) |
3090
528e08654016
Backed out changeset 9816407adf4a
William Pitcock <nenolod@atheme.org>
parents:
3088
diff
changeset
|
531 xspf_add_node(track, TUPLE_INT, FALSE, "duration", NULL, entry->length); |
892 | 532 |
1669 | 533 /* Add mtime of -1 */ |
3090
528e08654016
Backed out changeset 9816407adf4a
William Pitcock <nenolod@atheme.org>
parents:
3088
diff
changeset
|
534 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
|
535 } |
892 | 536 |
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
|
537 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
|
538 } |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
539 |
1675
ae9b0327b620
Fix plugins to conform with PLAYLIST_{UN}LOCK() change.
Matti Hamalainen <ccr@tnsp.org>
parents:
1669
diff
changeset
|
540 PLAYLIST_UNLOCK(playlist); |
92
fadf346ddde3
[svn] - pls doesn't go along with PLAYLIST_LOCK in playlist_save().
yaz
parents:
87
diff
changeset
|
541 |
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
|
542 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
|
543 xmlFreeDoc(doc); |
892 | 544 xmlFree(base); |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
545 } |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
546 |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
547 |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
548 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
|
549 .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
|
550 .ext = "xspf", |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
551 .plc_read = xspf_playlist_load, |
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
552 .plc_write = xspf_playlist_save, |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
553 }; |
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
554 |
1962 | 555 |
1661
927d341eecb8
Partial rewrite/sanitation of the xspf plugin.
Matti Hamalainen <ccr@tnsp.org>
parents:
1594
diff
changeset
|
556 static void xspf_init(void) |
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
557 { |
2053
059bd21a0c80
PlaylistContainer API updates
William Pitcock <nenolod@atheme.org>
parents:
1976
diff
changeset
|
558 aud_playlist_container_register(&plc_xspf); |
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_cleanup(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_unregister(&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 DECLARE_PLUGIN(xspf, xspf_init, xspf_cleanup, NULL, NULL, NULL, NULL, NULL, NULL); |