|
Line
Link Here
|
| 0 |
-- configure |
0 |
++ configure |
|
Lines 301-307
fi
Link Here
|
| 301 |
if [ "$CFG_XSPF" != "" ] |
301 |
if [ "$CFG_XSPF" != "" ] |
| 302 |
then |
302 |
then |
| 303 |
CFLAGS="$CFLAGS -DBUILD_XSPF" |
303 |
CFLAGS="$CFLAGS -DBUILD_XSPF" |
| 304 |
LDFLAGS="$LDFLAGS -lspiff" |
304 |
test_pkgconfig "libxspf" "xspf" "_vfs_xspf" |
| 305 |
SRCS="$SRCS util vfs_xspf" |
305 |
SRCS="$SRCS util vfs_xspf" |
| 306 |
PLAYQ_DUMPFILE="autosave.xspf" |
306 |
PLAYQ_DUMPFILE="autosave.xspf" |
| 307 |
else |
307 |
else |
| 308 |
-- src/conftest.c |
308 |
++ src/conftest.c |
|
Lines 56-71
Link Here
|
| 56 |
#include <vorbis/codec.h> |
56 |
#include <vorbis/codec.h> |
| 57 |
#include <vorbis/vorbisfile.h> |
57 |
#include <vorbis/vorbisfile.h> |
| 58 |
#endif /* BUILD_VORBIS */ |
58 |
#endif /* BUILD_VORBIS */ |
| 59 |
#ifdef BUILD_XSPF |
|
|
| 60 |
#include <spiff/spiff_c.h> |
| 61 |
#endif /* BUILD_XSPF */ |
| 62 |
|
59 |
|
| 63 |
int |
60 |
int |
| 64 |
main(int argc, char *argv[]) |
61 |
main(int argc, char *argv[]) |
| 65 |
{ |
62 |
{ |
| 66 |
#ifdef BUILD_XSPF |
|
|
| 67 |
spiff_write(NULL, NULL, NULL); |
| 68 |
#endif /* BUILD_XSPF */ |
| 69 |
|
63 |
|
| 70 |
return (0); |
64 |
return (0); |
| 71 |
} |
65 |
} |
| 72 |
-- src/vfs_xspf.c |
66 |
++ src/vfs_xspf.c |
|
Lines 30-36
Link Here
|
| 30 |
|
30 |
|
| 31 |
#include "stdinc.h" |
31 |
#include "stdinc.h" |
| 32 |
|
32 |
|
| 33 |
#include <spiff/spiff_c.h> |
33 |
#include <xspf_c.h> |
| 34 |
|
34 |
|
| 35 |
#include "util.h" |
35 |
#include "util.h" |
| 36 |
#include "vfs.h" |
36 |
#include "vfs.h" |
|
Lines 50-71
vfs_xspf_match(struct vfsent *ve, int isdir)
Link Here
|
| 50 |
int |
50 |
int |
| 51 |
vfs_xspf_populate(struct vfsent *ve) |
51 |
vfs_xspf_populate(struct vfsent *ve) |
| 52 |
{ |
52 |
{ |
| 53 |
struct spiff_list *slist; |
53 |
struct xspf_list *slist; |
| 54 |
struct spiff_track *strack; |
54 |
struct xspf_track *strack; |
| 55 |
struct spiff_mvalue *sloc; |
55 |
struct xspf_mvalue *sloc; |
| 56 |
char *dirname, *baseuri, *filename; |
56 |
char *dirname, *baseuri, *filename; |
| 57 |
struct vfsref *vr; |
57 |
struct vfsref *vr; |
| 58 |
|
58 |
|
| 59 |
baseuri = url_escape(ve->filename); |
59 |
baseuri = url_escape(ve->filename); |
| 60 |
slist = spiff_parse(ve->filename, baseuri); |
60 |
slist = xspf_parse(ve->filename, baseuri); |
| 61 |
g_free(baseuri); |
61 |
g_free(baseuri); |
| 62 |
if (slist == NULL) |
62 |
if (slist == NULL) |
| 63 |
return (-1); |
63 |
return (-1); |
| 64 |
|
64 |
|
| 65 |
dirname = g_path_get_dirname(ve->filename); |
65 |
dirname = g_path_get_dirname(ve->filename); |
| 66 |
|
66 |
|
| 67 |
SPIFF_LIST_FOREACH_TRACK(slist, strack) { |
67 |
XSPF_LIST_FOREACH_TRACK(slist, strack) { |
| 68 |
SPIFF_TRACK_FOREACH_LOCATION(strack, sloc) { |
68 |
XSPF_TRACK_FOREACH_LOCATION(strack, sloc) { |
| 69 |
/* Skip file:// part */ |
69 |
/* Skip file:// part */ |
| 70 |
filename = url_unescape(sloc->value); |
70 |
filename = url_unescape(sloc->value); |
| 71 |
|
71 |
|
|
Lines 77-116
vfs_xspf_populate(struct vfsent *ve)
Link Here
|
| 77 |
} |
77 |
} |
| 78 |
|
78 |
|
| 79 |
g_free(dirname); |
79 |
g_free(dirname); |
| 80 |
spiff_free(slist); |
80 |
xspf_free(slist); |
| 81 |
return (0); |
81 |
return (0); |
| 82 |
} |
82 |
} |
| 83 |
|
83 |
|
| 84 |
int |
84 |
int |
| 85 |
vfs_xspf_write(const struct vfslist *vl, const char *filename) |
85 |
vfs_xspf_write(const struct vfslist *vl, const char *filename) |
| 86 |
{ |
86 |
{ |
| 87 |
struct spiff_list *list; |
87 |
struct xspf_list *list; |
| 88 |
struct spiff_track *track; |
88 |
struct xspf_track *track; |
| 89 |
struct spiff_mvalue *location; |
89 |
struct xspf_mvalue *location; |
| 90 |
char *fn, *baseuri; |
90 |
char *fn, *baseuri; |
| 91 |
struct vfsref *vr; |
91 |
struct vfsref *vr; |
| 92 |
int ret; |
92 |
int ret; |
| 93 |
|
93 |
|
| 94 |
list = spiff_new(); |
94 |
list = xspf_new(); |
| 95 |
|
95 |
|
| 96 |
VFS_LIST_FOREACH_REVERSE(vl, vr) { |
96 |
VFS_LIST_FOREACH_REVERSE(vl, vr) { |
| 97 |
/* Add a new track to the beginning of the list */ |
97 |
/* Add a new track to the beginning of the list */ |
| 98 |
track = spiff_new_track_before(&list->tracks); |
98 |
track = xspf_new_track_before(&list->tracks); |
| 99 |
|
99 |
|
| 100 |
/* Make sure we don't write non-UTF-8 titles to disk */ |
100 |
/* Make sure we don't write non-UTF-8 titles to disk */ |
| 101 |
if (g_utf8_validate(vfs_name(vr), -1, NULL)) |
101 |
if (g_utf8_validate(vfs_name(vr), -1, NULL)) |
| 102 |
spiff_setvalue(&track->title, vfs_name(vr)); |
102 |
xspf_setvalue(&track->title, vfs_name(vr)); |
| 103 |
|
103 |
|
| 104 |
location = spiff_new_mvalue_before(&track->locations); |
104 |
location = xspf_new_mvalue_before(&track->locations); |
| 105 |
fn = url_escape(vfs_filename(vr)); |
105 |
fn = url_escape(vfs_filename(vr)); |
| 106 |
spiff_setvalue(&location->value, fn); |
106 |
xspf_setvalue(&location->value, fn); |
| 107 |
g_free(fn); |
107 |
g_free(fn); |
| 108 |
} |
108 |
} |
| 109 |
|
109 |
|
| 110 |
baseuri = url_escape(filename); |
110 |
baseuri = url_escape(filename); |
| 111 |
ret = spiff_write(list, filename, baseuri); |
111 |
ret = xspf_write(list, filename, baseuri); |
| 112 |
g_free(baseuri); |
112 |
g_free(baseuri); |
| 113 |
spiff_free(list); |
113 |
xspf_free(list); |
| 114 |
|
114 |
|
| 115 |
return (ret); |
115 |
return (ret); |
| 116 |
} |
116 |
} |