//never used bool CMovieInfo::parseXmlTree(char */*text*/, MI_MOVIE_INFO * /*movie_info*/) { #ifndef XMLTREE_LIB return (false); // no XML lib available return false #else /* XMLTREE_LIB */ //int helpIDtoLoad = 80; //XMLTreeParser *parser=new XMLTreeParser("ISO-8859-1"); XMLTreeParser *parser = new XMLTreeParser(NULL); if (!parser->Parse(text, strlen(text), 1)) { TRACE("parse error: %s at line %d \r\n", parser->ErrorString(parser->GetErrorCode()), parser->GetCurrentLineNumber()); //fclose(in); delete parser; return (false); } XMLTreeNode *root = parser->RootNode(); if (!root) { TRACE(" root error \r\n"); delete parser; return (false); } if (strcmp(root->GetType(), MI_XML_TAG_NEUTRINO)) { TRACE("not neutrino file. %s", root->GetType()); delete parser; return (false); } XMLTreeNode *node = parser->RootNode(); for (node = node->GetChild(); node; node = node->GetNext()) { if (!strcmp(node->GetType(), MI_XML_TAG_RECORD)) { for (XMLTreeNode * xam1 = node->GetChild(); xam1; xam1 = xam1->GetNext()) { XML_GET_DATA_STRING(xam1, MI_XML_TAG_CHANNELNAME, movie_info->epgChannel); XML_GET_DATA_STRING(xam1, MI_XML_TAG_EPGTITLE, movie_info->epgTitle); XML_GET_DATA_LONG(xam1, MI_XML_TAG_ID, movie_info->epgId); XML_GET_DATA_STRING(xam1, MI_XML_TAG_INFO1, movie_info->epgInfo1); XML_GET_DATA_STRING(xam1, MI_XML_TAG_INFO2, movie_info->epgInfo2); XML_GET_DATA_LONG(xam1, MI_XML_TAG_EPGID, movie_info->epgEpgId); // %llu XML_GET_DATA_INT(xam1, MI_XML_TAG_MODE, movie_info->epgMode); //%d XML_GET_DATA_INT(xam1, MI_XML_TAG_VIDEOPID, movie_info->epgVideoPid); //%u XML_GET_DATA_INT(xam1, MI_XML_TAG_VIDEOTYPE, movie_info->VideoType); //%u if (!strcmp(xam1->GetType(), MI_XML_TAG_AUDIOPIDS)) { for (XMLTreeNode * xam2 = xam1->GetChild(); xam2; xam2 = xam2->GetNext()) { if (!strcmp(xam2->GetType(), MI_XML_TAG_AUDIO)) { EPG_AUDIO_PIDS pids; pids.epgAudioPid = atoi(xam2->GetAttributeValue(MI_XML_TAG_PID)); pids.atype = atoi(xam2->GetAttributeValue(MI_XML_TAG_ATYPE)); pids.selected = atoi(xam2->GetAttributeValue(MI_XML_TAG_SELECTED)); pids.epgAudioPidName = decodeXmlSpecialChars(xam2->GetAttributeValue(MI_XML_TAG_NAME)); //printf("MOVIE INFO: apid %d type %d name %s selected %d\n", pids.epgAudioPid, pids.atype, pids.epgAudioPidName.c_str(), pids.selected); movie_info->audioPids.push_back(pids); } } } XML_GET_DATA_INT(xam1, MI_XML_TAG_VTXTPID, movie_info->epgVTXPID); //%u /***************************************************** * new tags */ XML_GET_DATA_INT(xam1, MI_XML_TAG_GENRE_MAJOR, movie_info->genreMajor); XML_GET_DATA_INT(xam1, MI_XML_TAG_GENRE_MINOR, movie_info->genreMinor); XML_GET_DATA_STRING(xam1, MI_XML_TAG_SERIE_NAME, movie_info->serieName); XML_GET_DATA_INT(xam1, MI_XML_TAG_LENGTH, movie_info->length); XML_GET_DATA_STRING(xam1, MI_XML_TAG_PRODUCT_COUNTRY, movie_info->productionCountry); //if(!strcmp(xam1->GetType(), MI_XML_TAG_PRODUCT_COUNTRY)) if(xam1->GetData() != NULL)strncpy(movie_info->productionCountry, xam1->GetData(),4); XML_GET_DATA_INT(xam1, MI_XML_TAG_PRODUCT_DATE, movie_info->productionDate); XML_GET_DATA_INT(xam1, MI_XML_TAG_QUALITIY, movie_info->quality); XML_GET_DATA_INT(xam1, MI_XML_TAG_QUALITY, movie_info->quality); XML_GET_DATA_INT(xam1, MI_XML_TAG_PARENTAL_LOCKAGE, movie_info->parentalLockAge); XML_GET_DATA_INT(xam1, MI_XML_TAG_DATE_OF_LAST_PLAY, movie_info->dateOfLastPlay); if (!strcmp(xam1->GetType(), MI_XML_TAG_BOOKMARK)) { for (XMLTreeNode * xam2 = xam1->GetChild(); xam2; xam2 = xam2->GetNext()) { XML_GET_DATA_INT(xam2, MI_XML_TAG_BOOKMARK_START, movie_info->bookmarks.start); XML_GET_DATA_INT(xam2, MI_XML_TAG_BOOKMARK_END, movie_info->bookmarks.end); XML_GET_DATA_INT(xam2, MI_XML_TAG_BOOKMARK_LAST, movie_info->bookmarks.lastPlayStop); } } /*****************************************************/ } } } delete parser; if (movie_info->epgInfo2.empty()) { movie_info->epgInfo2 = movie_info->epgInfo1; //movie_info->epgInfo1 = ""; } #endif /* XMLTREE_LIB */ return (true); }
std::vector<UPnPEntry> *CUpnpBrowserGui::decodeResult(std::string result) { XMLTreeParser *parser; XMLTreeNode *root, *node, *snode; std::vector<UPnPEntry> *entries; parser = new XMLTreeParser("UTF-8"); parser->Parse(result.c_str(), result.size(), 1); root=parser->RootNode(); if (!root){ delete parser; return NULL; } entries = new std::vector<UPnPEntry>; for (node=root->GetChild(); node; node=node->GetNext()) { bool isdir; std::string title, artist = "", album = "", id, children; char *type, *p; if (!strcmp(node->GetType(), "container")) { std::vector<UPnPResource> resources; isdir=true; for (snode=node->GetChild(); snode; snode=snode->GetNext()) { type=snode->GetType(); p = strchr(type,':'); if (p) type=p+1; if (!strcmp(type,"title")) { p=snode->GetData(); if (!p) p=(char *) ""; title=std::string(p); } } p = node->GetAttributeValue((char *) "id"); if (!p) p=(char *) ""; id=std::string(p); p = node->GetAttributeValue((char *) "childCount"); if (!p) p=(char *) ""; children=std::string(p); UPnPEntry entry={id, isdir, title, artist, album, children, resources, -1}; entries->push_back(entry); } if (!strcmp(node->GetType(), "item")) { std::vector<UPnPResource> resources; int preferred = -1; std::string protocol, prot, network, mime, additional; isdir=false; for (snode=node->GetChild(); snode; snode=snode->GetNext()) { std::string duration, url, size; unsigned int i; type=snode->GetType(); p = strchr(type,':'); if (p) type=p+1; if (!strcmp(type,"title")) { p=snode->GetData(); if (!p) p=(char *) ""; title=std::string(p); } else if (!strcmp(type,"artist")) { p=snode->GetData(); if (!p) p=(char *) ""; artist=std::string(p); } else if (!strcmp(type,"album")) { p=snode->GetData(); if (!p) p=(char *) ""; album=std::string(p); } else if (!strcmp(type,"res")) { p = snode->GetData(); if (!p) p=(char *) ""; url=std::string(p); p = snode->GetAttributeValue((char *) "size"); if (!p) p=(char *) "0"; size=std::string(p); p = snode->GetAttributeValue((char *) "duration"); if (!p) p=(char *) ""; duration=std::string(p); p = snode->GetAttributeValue((char *) "protocolInfo"); if (!p) p=(char *) ""; protocol=std::string(p); UPnPResource resource = {url, protocol, size, duration}; resources.push_back(resource); } int pref=0; preferred=-1; for (i=0; i<resources.size(); i++) { protocol=resources[i].protocol; splitProtocol(protocol, prot, network, mime, additional); if (prot != "http-get") continue; #if 0 if (mime == "image/jpeg" && pref < 1) { preferred=i; pref=1; } if (mime == "image/gif" && pref < 2) { preferred=i; pref=2; } #endif if (mime == "audio/mpeg" && pref < 3) { preferred=i; pref=3; } if (mime == "audio/x-vorbis+ogg" && pref < 4) { preferred=i; pref=4; } } } p = node->GetAttributeValue((char *) "id"); if (!p) p=(char *) ""; id=std::string(p); p = node->GetAttributeValue((char *) "childCount"); if (!p) p=(char *) ""; children=std::string(p); UPnPEntry entry={id, isdir, title, artist, album, children, resources, preferred}; entries->push_back(entry); } } delete parser; return entries; }
static XMLElement * GetTree1() { XMLTreeParser tp; XMLElement * e = tp.Parse( XML1 ); STOPEQ( e, 0 ); return e; }