summaryrefslogtreecommitdiff
path: root/libpiano/xml.c
diff options
context:
space:
mode:
Diffstat (limited to 'libpiano/xml.c')
-rw-r--r--libpiano/xml.c62
1 files changed, 23 insertions, 39 deletions
diff --git a/libpiano/xml.c b/libpiano/xml.c
index 32aa990..a113a12 100644
--- a/libpiano/xml.c
+++ b/libpiano/xml.c
@@ -79,6 +79,24 @@ void PianoXmlStructParser (xmlNode *structRoot,
}
}
+/* get text from <value> nodes; some of them have <boolean>, <string>
+ * or <int> subnodes, just ignore them
+ * @author PromyLOPh
+ * @added 2008-06-13
+ * @param xml node <value>
+ */
+char *PianoXmlGetNodeText (xmlNode *node) {
+ /* FIXME: this is not the correct way; we should check the node type
+ * as well */
+ if (node->content != NULL) {
+ return (char *) node->content;
+ } else if (node->children != NULL &&
+ node->children->content != NULL) {
+ return (char *) node->children->content;
+ }
+ return NULL;
+}
+
/* structParser callback; writes userinfo to PianoUserInfo structure
* @author PromyLOPh
* @added 2008-06-03
@@ -88,17 +106,9 @@ void PianoXmlStructParser (xmlNode *structRoot,
* @return nothing
*/
void PianoXmlParseUserinfoCb (char *key, xmlNode *value, void *data) {
- char *valueStr = NULL;
PianoUserInfo_t *user = data;
+ char *valueStr = PianoXmlGetNodeText (value);
- /* some values have subnodes like <boolean> or <string>, just
- * ignore them... */
- if (value->content != NULL) {
- valueStr = (char *) value->content;
- } else if (value->children != NULL &&
- value->children->content != NULL) {
- valueStr = (char *) value->children->content;
- }
/* FIXME: should be continued later */
if (strcmp ("webAuthToken", key) == 0) {
user->webAuthToken = strdup (valueStr);
@@ -111,17 +121,8 @@ void PianoXmlParseUserinfoCb (char *key, xmlNode *value, void *data) {
void PianoXmlParseStationsCb (char *key, xmlNode *value, void *data) {
PianoStation_t *station = data;
- char *valueStr = NULL;
+ char *valueStr = PianoXmlGetNodeText (value);
- /* FIXME: copy & waste */
- /* some values have subnodes like <boolean> or <string>, just
- * ignore them... */
- if (value->content != NULL) {
- valueStr = (char *) value->content;
- } else if (value->children != NULL &&
- value->children->content != NULL) {
- valueStr = (char *) value->children->content;
- }
if (strcmp ("stationName", key) == 0) {
station->name = strdup (valueStr);
} else if (strcmp ("stationId", key) == 0) {
@@ -132,16 +133,8 @@ void PianoXmlParseStationsCb (char *key, xmlNode *value, void *data) {
/* FIXME: copy & waste */
void PianoXmlParsePlaylistCb (char *key, xmlNode *value, void *data) {
PianoSong_t *song = data;
- char *valueStr = NULL;
-
- /* some values have subnodes like <boolean> or <string>, just
- * ignore them... */
- if (value->content != NULL) {
- valueStr = (char *) value->content;
- } else if (value->children != NULL &&
- value->children->content != NULL) {
- valueStr = (char *) value->children->content;
- }
+ char *valueStr = PianoXmlGetNodeText (value);
+
if (strcmp ("audioURL", key) == 0) {
/* last 48 chars of audioUrl are encrypted, but they put the key
* into the door's lock; dumb pandora... */
@@ -327,16 +320,7 @@ PianoReturn_t PianoXmlParseSimple (char *xml) {
*/
void PianoXmlParseSearchArtistCb (char *key, xmlNode *value, void *data) {
PianoArtist_t *artist = data;
- char *valueStr = NULL;
-
- /* some values have subnodes like <boolean> or <string>, just
- * ignore them... */
- if (value->content != NULL) {
- valueStr = (char *) value->content;
- } else if (value->children != NULL &&
- value->children->content != NULL) {
- valueStr = (char *) value->children->content;
- }
+ char *valueStr = PianoXmlGetNodeText (value);
if (strcmp ("artistName", key) == 0) {
artist->name = strdup (valueStr);