X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Ffreenet%2Fboardlistxml.cpp;h=55d877b1d56c30d7f2dca496923599a26d21b31b;hb=76805933f794915a72b7f0a21b12af6654759f4f;hp=b88cb7330d326e0627e21900caad64b6c365f9a7;hpb=befd91205eff729a182f66de15374a577a8718f7;p=fms.git diff --git a/src/freenet/boardlistxml.cpp b/src/freenet/boardlistxml.cpp index b88cb73..55d877b 100644 --- a/src/freenet/boardlistxml.cpp +++ b/src/freenet/boardlistxml.cpp @@ -15,6 +15,10 @@ void BoardListXML::AddBoard(const std::string &name, const std::string &descript { std::string lowername=name; StringFunctions::LowerCase(lowername,lowername); + if(lowername.size()>40) + { + lowername.erase(40); + } m_boards.push_back(board(lowername,description)); } } @@ -45,27 +49,22 @@ const std::string BoardListXML::GetName(const long index) std::string BoardListXML::GetXML() { - TiXmlDocument td; - TiXmlDeclaration *tdec=new TiXmlDeclaration("1.0","UTF-8",""); - TiXmlElement *tid; - TiXmlPrinter tp; + Poco::AutoPtr doc=new Poco::XML::Document; + Poco::AutoPtr root=doc->createElement("BoardList"); - td.LinkEndChild(tdec); - tid=new TiXmlElement("BoardList"); - td.LinkEndChild(tid); + doc->appendChild(root); for(std::vector::iterator i=m_boards.begin(); i!=m_boards.end(); i++) { std::string boardname=(*i).m_name; - StringFunctions::Convert(boardname,boardname); - TiXmlElement *tr=new TiXmlElement("Board"); - tid->LinkEndChild(tr); - tr->LinkEndChild(XMLCreateCDATAElement("Name",boardname)); - tr->LinkEndChild(XMLCreateCDATAElement("Description",(*i).m_description)); + StringFunctions::LowerCase(boardname,boardname); + Poco::AutoPtr tr=doc->createElement("Board"); + root->appendChild(tr); + tr->appendChild(XMLCreateCDATAElement(doc,"Name",boardname)); + tr->appendChild(XMLCreateCDATAElement(doc,"Description",(*i).m_description)); } - td.Accept(&tp); - return std::string(tp.CStr()); + return GenerateXML(doc); } void BoardListXML::Initialize() @@ -75,50 +74,53 @@ void BoardListXML::Initialize() const bool BoardListXML::ParseXML(const std::string &xml) { - std::string name; - std::string description; - TiXmlDocument td; - td.Parse(xml.c_str()); + bool parsed=false; + Poco::XML::DOMParser dp; - if(!td.Error()) - { - TiXmlText *txt; - TiXmlHandle hnd(&td); - TiXmlNode *node; + Initialize(); - Initialize(); + try + { + Poco::AutoPtr doc=dp.parseString(FixCDATA(xml)); + Poco::XML::Element *root=XMLGetFirstChild(doc,"BoardList"); + Poco::XML::Element *boardel=NULL; - node=hnd.FirstChild("BoardList").FirstChild("Board").ToElement(); - while(node) + boardel=XMLGetFirstChild(root,"Board"); + while(boardel) { - name=""; - description=""; + std::string name=""; + std::string description=""; - TiXmlHandle hnd2(node); - txt=hnd2.FirstChild("Name").FirstChild().ToText(); - if(txt) + Poco::XML::Element *txt=XMLGetFirstChild(boardel,"Name"); + if(txt && txt->firstChild()) { - name=txt->ValueStr(); + name=SanitizeSingleString(txt->firstChild()->getNodeValue()); StringFunctions::LowerCase(name,name); + if(name.size()>40) + { + name.erase(40); + } } - txt=hnd2.FirstChild("Description").FirstChild().ToText(); - if(txt) + txt=XMLGetFirstChild(boardel,"Description"); + if(txt && txt->firstChild()) { - description=txt->ValueStr(); + description=SanitizeSingleString(txt->firstChild()->getNodeValue()); } if(name!="" && description!="") { m_boards.push_back(board(name,description)); } - - node=node->NextSibling("Board"); + + boardel=XMLGetNextSibling(boardel,"Board"); } - return true; + + parsed=true; } - else + catch(...) { - return false; } + + return parsed; }