summaryrefslogtreecommitdiff
path: root/libpiano/src
diff options
context:
space:
mode:
Diffstat (limited to 'libpiano/src')
-rw-r--r--libpiano/src/main.c12
-rw-r--r--libpiano/src/piano.h5
-rw-r--r--libpiano/src/xml.c10
-rw-r--r--libpiano/src/xml.h3
4 files changed, 16 insertions, 14 deletions
diff --git a/libpiano/src/main.c b/libpiano/src/main.c
index 16d30d7..2bf8426 100644
--- a/libpiano/src/main.c
+++ b/libpiano/src/main.c
@@ -133,10 +133,10 @@ void PianoDestroyStations (PianoStation_t *stations) {
* @param piano handle
* @return nothing
*/
-void PianoDestroyPlaylist (PianoHandle_t *ph) {
+void PianoDestroyPlaylist (PianoSong_t *playlist) {
PianoSong_t *curSong, *lastSong;
- curSong = ph->playlist;
+ curSong = playlist;
while (curSong != NULL) {
PianoFree (curSong->audioUrl, 0);
PianoFree (curSong->artist, 0);
@@ -152,7 +152,6 @@ void PianoDestroyPlaylist (PianoHandle_t *ph) {
curSong = curSong->next;
PianoFree (lastSong, sizeof (*lastSong));
}
- ph->playlist = NULL;
}
/* frees the whole piano handle structure
@@ -176,7 +175,6 @@ void PianoDestroy (PianoHandle_t *ph) {
curGenreCat = curGenreCat->next;
PianoFree (lastGenreCat, sizeof (*lastGenreCat));
}
- PianoDestroyPlaylist (ph);
memset (ph, 0, sizeof (*ph));
}
@@ -255,9 +253,11 @@ PianoReturn_t PianoGetStations (PianoHandle_t *ph) {
/* get next songs for station (usually four tracks)
* @param piano handle
* @param station id
+ * @param audio format
+ * @param return value: playlist
*/
PianoReturn_t PianoGetPlaylist (PianoHandle_t *ph, const char *stationId,
- PianoAudioFormat_t format) {
+ PianoAudioFormat_t format, PianoSong_t **retPlaylist) {
char xmlSendBuf[PIANO_SEND_BUFFER_SIZE], *retStr;
PianoReturn_t ret;
@@ -283,7 +283,7 @@ PianoReturn_t PianoGetPlaylist (PianoHandle_t *ph, const char *stationId,
if ((ret = PianoHttpPost (&ph->waith, xmlSendBuf, &retStr)) ==
PIANO_RET_OK) {
- ret = PianoXmlParsePlaylist (ph, retStr);
+ ret = PianoXmlParsePlaylist (ph, retStr, retPlaylist);
PianoFree (retStr, 0);
}
diff --git a/libpiano/src/piano.h b/libpiano/src/piano.h
index 3bb9108..cd3e8ca 100644
--- a/libpiano/src/piano.h
+++ b/libpiano/src/piano.h
@@ -90,7 +90,6 @@ typedef struct PianoHandle {
PianoUserInfo_t user;
/* linked lists */
PianoStation_t *stations;
- PianoSong_t *playlist;
PianoGenreCategory_t *genreStations;
} PianoHandle_t;
@@ -109,13 +108,13 @@ typedef enum {PIANO_RET_OK, PIANO_RET_ERR, PIANO_RET_XML_INVALID,
void PianoInit (PianoHandle_t *);
void PianoDestroy (PianoHandle_t *);
-void PianoDestroyPlaylist (PianoHandle_t *);
+void PianoDestroyPlaylist (PianoSong_t *);
void PianoDestroySearchResult (PianoSearchResult_t *);
PianoReturn_t PianoConnect (PianoHandle_t *, const char *, const char *);
PianoReturn_t PianoGetStations (PianoHandle_t *);
PianoReturn_t PianoGetPlaylist (PianoHandle_t *, const char *,
- PianoAudioFormat_t);
+ PianoAudioFormat_t, PianoSong_t **);
PianoReturn_t PianoRateTrack (PianoHandle_t *, PianoSong_t *,
PianoSongRating_t);
diff --git a/libpiano/src/xml.c b/libpiano/src/xml.c
index 8e8fb2a..8d34a32 100644
--- a/libpiano/src/xml.c
+++ b/libpiano/src/xml.c
@@ -484,8 +484,10 @@ PianoReturn_t PianoXmlParseAddSeed (PianoHandle_t *ph, char *xml,
/* parses playlist; used when searching too
* @param piano handle
* @param xml document
+ * @param return: playlist
*/
-PianoReturn_t PianoXmlParsePlaylist (PianoHandle_t *ph, char *xml) {
+PianoReturn_t PianoXmlParsePlaylist (PianoHandle_t *ph, char *xml,
+ PianoSong_t **retPlaylist) {
ezxml_t xmlDoc, dataNode;
PianoReturn_t ret;
@@ -508,10 +510,10 @@ PianoReturn_t PianoXmlParsePlaylist (PianoHandle_t *ph, char *xml) {
PianoXmlStructParser (ezxml_child (dataNode, "struct"),
PianoXmlParsePlaylistCb, tmpSong);
/* begin linked list or append */
- if (ph->playlist == NULL) {
- ph->playlist = tmpSong;
+ if (*retPlaylist == NULL) {
+ *retPlaylist = tmpSong;
} else {
- PianoSong_t *curSong = ph->playlist;
+ PianoSong_t *curSong = *retPlaylist;
while (curSong->next != NULL) {
curSong = curSong->next;
}
diff --git a/libpiano/src/xml.h b/libpiano/src/xml.h
index 5c0e5c2..7d1f1b2 100644
--- a/libpiano/src/xml.h
+++ b/libpiano/src/xml.h
@@ -28,7 +28,8 @@ THE SOFTWARE.
PianoReturn_t PianoXmlParseUserinfo (PianoHandle_t *ph, const char *xml);
PianoReturn_t PianoXmlParseStations (PianoHandle_t *ph, const char *xml);
-PianoReturn_t PianoXmlParsePlaylist (PianoHandle_t *ph, const char *xml);
+PianoReturn_t PianoXmlParsePlaylist (PianoHandle_t *ph, const char *xml,
+ PianoSong_t **);
PianoReturn_t PianoXmlParseSearch (const char *searchXml,
PianoSearchResult_t *searchResult);
PianoReturn_t PianoXmlParseSimple (const char *xml);