diff options
-rw-r--r-- | libpiano/xml.c | 62 |
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); |