version 0.3.2
[fms.git] / src / freenet / boardlistxml.cpp
index eb9ca8c..55d877b 100644 (file)
@@ -13,7 +13,13 @@ void BoardListXML::AddBoard(const std::string &name, const std::string &descript
 {\r
        if(name!="" && description!="")\r
        {\r
-               m_boards.push_back(board(name,description));\r
+               std::string lowername=name;\r
+               StringFunctions::LowerCase(lowername,lowername);\r
+               if(lowername.size()>40)\r
+               {\r
+                       lowername.erase(40);\r
+               }\r
+               m_boards.push_back(board(lowername,description));\r
        }\r
 }\r
 \r
@@ -43,25 +49,22 @@ const std::string BoardListXML::GetName(const long index)
 \r
 std::string BoardListXML::GetXML()\r
 {\r
-       TiXmlDocument td;\r
-       TiXmlDeclaration *tdec=new TiXmlDeclaration("1.0","UTF-8","");\r
-       TiXmlElement *tid;\r
-       TiXmlPrinter tp;\r
+       Poco::AutoPtr<Poco::XML::Document> doc=new Poco::XML::Document;\r
+       Poco::AutoPtr<Poco::XML::Element> root=doc->createElement("BoardList");\r
 \r
-       td.LinkEndChild(tdec);\r
-       tid=new TiXmlElement("BoardList");\r
-       td.LinkEndChild(tid);\r
+       doc->appendChild(root);\r
 \r
        for(std::vector<board>::iterator i=m_boards.begin(); i!=m_boards.end(); i++)\r
        {\r
-               TiXmlElement *tr=new TiXmlElement("Board");\r
-               tid->LinkEndChild(tr);\r
-               tr->LinkEndChild(XMLCreateCDATAElement("Name",(*i).m_name));\r
-               tr->LinkEndChild(XMLCreateCDATAElement("Description",(*i).m_description));\r
+               std::string boardname=(*i).m_name;\r
+               StringFunctions::LowerCase(boardname,boardname);\r
+               Poco::AutoPtr<Poco::XML::Element> tr=doc->createElement("Board");\r
+               root->appendChild(tr);\r
+               tr->appendChild(XMLCreateCDATAElement(doc,"Name",boardname));\r
+               tr->appendChild(XMLCreateCDATAElement(doc,"Description",(*i).m_description));\r
        }\r
 \r
-       td.Accept(&tp);\r
-       return std::string(tp.CStr());\r
+       return GenerateXML(doc);\r
 }\r
 \r
 void BoardListXML::Initialize()\r
@@ -71,49 +74,53 @@ void BoardListXML::Initialize()
 \r
 const bool BoardListXML::ParseXML(const std::string &xml)\r
 {\r
-       std::string name;\r
-       std::string description;\r
-       TiXmlDocument td;\r
-       td.Parse(xml.c_str());\r
+       bool parsed=false;\r
+       Poco::XML::DOMParser dp;\r
 \r
-       if(!td.Error())\r
-       {\r
-               TiXmlText *txt;\r
-               TiXmlHandle hnd(&td);\r
-               TiXmlNode *node;\r
+       Initialize();\r
 \r
-               Initialize();\r
+       try\r
+       {\r
+               Poco::AutoPtr<Poco::XML::Document> doc=dp.parseString(FixCDATA(xml));\r
+               Poco::XML::Element *root=XMLGetFirstChild(doc,"BoardList");\r
+               Poco::XML::Element *boardel=NULL;\r
 \r
-               node=hnd.FirstChild("BoardList").FirstChild("Board").ToElement();\r
-               while(node)\r
+               boardel=XMLGetFirstChild(root,"Board");\r
+               while(boardel)\r
                {\r
-                       name="";\r
-                       description="";\r
+                       std::string name="";\r
+                       std::string description="";\r
 \r
-                       TiXmlHandle hnd2(node);\r
-                       txt=hnd2.FirstChild("Name").FirstChild().ToText();\r
-                       if(txt)\r
+                       Poco::XML::Element *txt=XMLGetFirstChild(boardel,"Name");\r
+                       if(txt && txt->firstChild())\r
                        {\r
-                               name=txt->ValueStr();\r
+                               name=SanitizeSingleString(txt->firstChild()->getNodeValue());\r
+                               StringFunctions::LowerCase(name,name);\r
+                               if(name.size()>40)\r
+                               {\r
+                                       name.erase(40);\r
+                               }\r
                        }\r
-                       txt=hnd2.FirstChild("Description").FirstChild().ToText();\r
-                       if(txt)\r
+                       txt=XMLGetFirstChild(boardel,"Description");\r
+                       if(txt && txt->firstChild())\r
                        {\r
-                               description=txt->ValueStr();\r
+                               description=SanitizeSingleString(txt->firstChild()->getNodeValue());\r
                        }\r
 \r
                        if(name!="" && description!="")\r
                        {\r
                                m_boards.push_back(board(name,description));\r
                        }\r
-                       \r
-                       node=node->NextSibling("Board");\r
+\r
+                       boardel=XMLGetNextSibling(boardel,"Board");\r
                }\r
-               return true;\r
+\r
+               parsed=true;\r
 \r
        }\r
-       else\r
+       catch(...)\r
        {\r
-               return false;\r
        }\r
-}
\ No newline at end of file
+\r
+       return parsed;\r
+}\r