X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Ffreenet%2Fboardlistxml.cpp;h=b4c398589011bb29647e3111a3212289cc2d7123;hb=dec33c63afafabf83c3039e916725cac6faef9b3;hp=b88cb7330d326e0627e21900caad64b6c365f9a7;hpb=befd91205eff729a182f66de15374a577a8718f7;p=fms.git diff --git a/src/freenet/boardlistxml.cpp b/src/freenet/boardlistxml.cpp index b88cb73..b4c3985 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,35 @@ 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; - - td.LinkEndChild(tdec); - tid=new TiXmlElement("BoardList"); - td.LinkEndChild(tid); + Poco::AutoPtr doc=new Poco::XML::Document; + //TiXmlDocument td; + //TiXmlDeclaration *tdec=new TiXmlDeclaration("1.0","UTF-8",""); + Poco::XML::Element *root=doc->createElement("BoardList"); + //TiXmlElement *tid; + //TiXmlPrinter tp; + + doc->appendChild(root); + //td.LinkEndChild(tdec); + //tid=new TiXmlElement("BoardList"); + //td.LinkEndChild(tid); 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::XML::Element *tr=doc->createElement("Board"); + //TiXmlElement *tr=new TiXmlElement("Board"); + root->appendChild(tr); + //tid->LinkEndChild(tr); + tr->appendChild(XMLCreateCDATAElement(doc,"Name",boardname)); + //tr->LinkEndChild(XMLCreateCDATAElement("Name",boardname)); + tr->appendChild(XMLCreateCDATAElement(doc,"Description",(*i).m_description)); + //tr->LinkEndChild(XMLCreateCDATAElement("Description",(*i).m_description)); } - td.Accept(&tp); - return std::string(tp.CStr()); + //td.Accept(&tp); + //return std::string(tp.CStr()); + return GenerateXML(doc); } void BoardListXML::Initialize() @@ -75,6 +87,57 @@ void BoardListXML::Initialize() const bool BoardListXML::ParseXML(const std::string &xml) { + bool parsed=false; + Poco::XML::DOMParser dp; + + Initialize(); + + try + { + Poco::AutoPtr doc=dp.parseString(FixCDATA(xml)); + Poco::XML::Element *root=XMLGetFirstChild(doc,"BoardList"); + Poco::XML::Element *boardel=NULL; + + boardel=XMLGetFirstChild(root,"Board"); + while(boardel) + { + std::string name=""; + std::string description=""; + + Poco::XML::Element *txt=XMLGetFirstChild(boardel,"Name"); + if(txt && txt->firstChild()) + { + name=SanitizeSingleString(txt->firstChild()->getNodeValue()); + StringFunctions::LowerCase(name,name); + if(name.size()>40) + { + name.erase(40); + } + } + txt=XMLGetFirstChild(boardel,"Description"); + if(txt && txt->firstChild()) + { + description=SanitizeSingleString(txt->firstChild()->getNodeValue()); + } + + if(name!="" && description!="") + { + m_boards.push_back(board(name,description)); + } + + boardel=XMLGetNextSibling(boardel,"Board"); + } + + parsed=true; + + } + catch(...) + { + } + + return parsed; + + /* std::string name; std::string description; TiXmlDocument td; @@ -100,6 +163,10 @@ const bool BoardListXML::ParseXML(const std::string &xml) { name=txt->ValueStr(); StringFunctions::LowerCase(name,name); + if(name.size()>40) + { + name.erase(40); + } } txt=hnd2.FirstChild("Description").FirstChild().ToText(); if(txt) @@ -121,4 +188,5 @@ const bool BoardListXML::ParseXML(const std::string &xml) { return false; } + */ }