47 #include <xspf/XspfIndentFormatter.h> 48 #include <xspf/XspfProps.h> 49 #include <xspf/XspfReader.h> 50 #include <xspf/XspfReaderCallback.h> 51 #include <xspf/XspfTrack.h> 52 #include <xspf/XspfWriter.h> 81 void addTrack(XspfTrack *track);
85 void setProps(XspfProps *props);
118 (*newtrack)->
creator = track->stealCreator();
119 (*newtrack)->title = track->stealTitle();
120 (*newtrack)->album = track->stealAlbum();
121 (*newtrack)->duration = track->getDuration();
122 (*newtrack)->tracknum = track->getTrackNum();
123 (*newtrack)->pdata = NULL;
126 newmv = &(*newtrack)->locations;
127 while ((str = track->stealFirstLocation()) != NULL) {
129 (*newmv)->
value = str;
130 (*newmv)->pdata = NULL;
133 newmv = &(*newmv)->
next;
138 newmv = &(*newtrack)->identifiers;
139 while ((str = track->stealFirstIdentifier()) != NULL) {
141 (*newmv)->
value = str;
142 (*newmv)->pdata = NULL;
145 newmv = &(*newmv)->
next;
151 newtrack = &(*newtrack)->
next;
157 list->license = props->stealLicense();
158 list->location = props->stealLocation();
159 list->identifier = props->stealIdentifier();
172 for (; mv != NULL; mv = nmv) {
195 if (read.parseFile(filename, &readcb, baseuri) == XSPF_READER_SUCCESS) {
216 if (read.parseMemory(memory, len_bytes, &readcb, baseuri) == XSPF_READER_SUCCESS) {
250 for (tr = list->
tracks; tr != NULL; tr = ntr) {
279 len = strlen(nstr) + 1;
280 *str =
new char[len];
324 XspfIndentFormatter formatter(-2);
326 XspfWriter *
const writer = XspfWriter::makeWriter(formatter,
327 baseuri, XspfWriter::NO_XML_BASE, &error);
328 if (writer == NULL) {
335 props.lendLicense(list->
license);
338 writer->setProps(props);
344 track.lendCreator(strack->
creator);
345 track.lendTitle(strack->
title);
346 track.lendAlbum(strack->
album);
347 track.setDuration(strack->
duration);
348 track.setTrackNum(strack->
tracknum);
352 track.lendAppendLocation(smvalue->
value);
354 track.lendAppendIdentifier(smvalue->
value);
356 writer->addTrack(track);
359 int const res = writer->writeFile(filename);
void xspf_setvalue(char **str, char const *nstr)
Set or overwrite a value in the xspf_list, xspf_track or xspf_mvalue structures. Passing NULL will un...
void * pdata
Private data that can be freely used.
int tracknum
Track number.
Linked list for values inside tracks or lists with string values.
struct xspf_mvalue * identifiers
Unique track identifiers.
struct xspf_track * xspf_new_track_before(struct xspf_track **track)
Insert a new track to the linked list before the specified one. This routine can also be used to inse...
XspfCReaderCallback(xspf_list *list)
Create callback interface for filling a xspf_list.
char * license
Playlist's license.
void addTrack(XspfTrack *track)
Callback which adds tracks to the xspf_list.
Single track in an XSPF list.
Xspf list reading callback, which stores data in a specific C-style Xspf list.
xspf_list * list
The C-style Xspf list the tracks should be appended to.
int duration
Track duration in milliseconds.
struct xspf_list * xspf_new(void)
Create a new empty XSPF playlist.
struct xspf_track * tracks
Linked list of tracks inside the playlist.
Simple libxspf C bindings.
void setProps(XspfProps *props)
Callback which sets properties in the xspf_list.
char * album
Album or collection of origin.
void xspf_free(struct xspf_list *list)
Free the parser results.
void * pdata
Private data that can be freely used.
char * identifier
Playlist's unique indentifier.
char * title
Track's display name.
#define XSPF_TRACK_FOREACH_IDENTIFIER(t, i)
Easy interface for walking through identifiers.
virtual ~XspfCReaderCallback()
Finalize the xspf_list.
struct xspf_mvalue * next
Pointer to next object in the list.
void * pdata
Private data that can be freely used.
xspf_track ** newtrack
Pointer to the `next' field in the last inserted item for improving append speed. ...
char * location
Playlist's file location.
#define XSPF_LIST_FOREACH_TRACK(l, t)
Easy interface for walking through tracks.
struct xspf_list * xspf_parse_memory(char const *memory, int len_bytes, char const *baseuri)
Parse an XSPF file from memory.
char * creator
Track's creator.
struct xspf_list * xspf_parse(char const *filename, char const *baseuri)
Parse an XSPF file by filename.
#define XSPF_TRACK_FOREACH_LOCATION(t, l)
Easy interface for walking through locations.
struct xspf_mvalue * locations
Track's file locations.
int xspf_write(struct xspf_list *list, char const *filename, char const *baseuri)
Write the Xspf playlist to a file.
struct xspf_track * next
Pointer to next track.
static void xspf_mvalue_free(struct xspf_mvalue *mv)
Deallocate all objects in a xspf_mvalue linked list.
char * value
Value of the current list entry.
struct xspf_mvalue * xspf_new_mvalue_before(struct xspf_mvalue **mvalue)
Insert a new mvalue to the linked list before the specified one. This routine can also be used to ins...