c05bb665489c56f2f1b9a72200b0497bdb7a2ac7
[fms.git] / src / freenet / messagelistxml.cpp
1 #include "../../include/freenet/messagelistxml.h"\r
2 \r
3 #ifdef XMEM\r
4         #include <xmem.h>\r
5 #endif\r
6 \r
7 MessageListXML::MessageListXML()\r
8 {\r
9         Initialize();\r
10 }\r
11 \r
12 void MessageListXML::AddMessage(const std::string &date, const long index, const std::vector<std::string> boards)\r
13 {\r
14         m_messages.push_back(message(date,index,boards));\r
15 }\r
16 \r
17 std::vector<std::string> MessageListXML::GetBoards(const long index)\r
18 {\r
19         if(index>=0 && index<m_messages.size())\r
20         {\r
21                 return m_messages[index].m_boards;\r
22         }\r
23         else\r
24         {\r
25                 return std::vector<std::string>();\r
26         }\r
27 }\r
28 \r
29 std::string MessageListXML::GetDate(const long index)\r
30 {\r
31         if(index>=0 && index<m_messages.size())\r
32         {\r
33                 return m_messages[index].m_date;\r
34         }\r
35         else\r
36         {\r
37                 return "";\r
38         }\r
39 }\r
40 \r
41 const long MessageListXML::GetIndex(const long index)\r
42 {\r
43         if(index>=0 && index<m_messages.size())\r
44         {\r
45                 return m_messages[index].m_index;\r
46         }\r
47         else\r
48         {\r
49                 return -1;\r
50         }\r
51 }\r
52 \r
53 std::string MessageListXML::GetXML()\r
54 {\r
55         TiXmlDocument td;\r
56         TiXmlDeclaration *tdec=new TiXmlDeclaration("1.0","UTF-8","");\r
57         TiXmlElement *tid;\r
58         TiXmlPrinter tp;\r
59 \r
60         td.LinkEndChild(tdec);\r
61         tid=new TiXmlElement("MessageList");\r
62         td.LinkEndChild(tid);\r
63 \r
64         for(std::vector<message>::iterator i=m_messages.begin(); i!=m_messages.end(); i++)\r
65         {\r
66                 TiXmlElement *tr=new TiXmlElement("Message");\r
67                 tid->LinkEndChild(tr);\r
68                 tr->LinkEndChild(XMLCreateTextElement("Date",(*i).m_date));\r
69                 tr->LinkEndChild(XMLCreateTextElement("Index",(*i).m_index));\r
70                 TiXmlElement *brds=new TiXmlElement("Boards");\r
71                 tr->LinkEndChild(brds);\r
72                 for(std::vector<std::string>::iterator j=(*i).m_boards.begin(); j!=(*i).m_boards.end(); j++)\r
73                 {\r
74                         brds->LinkEndChild(XMLCreateCDATAElement("Board",(*j)));\r
75                 }\r
76         }\r
77 \r
78         td.Accept(&tp);\r
79         return std::string(tp.CStr());\r
80 }\r
81 \r
82 void MessageListXML::Initialize()\r
83 {\r
84         m_messages.clear();\r
85 }\r
86 \r
87 const bool MessageListXML::ParseXML(const std::string &xml)\r
88 {\r
89         TiXmlDocument td;\r
90         td.Parse(xml.c_str());\r
91 \r
92         if(!td.Error())\r
93         {\r
94                 std::string tempstr;\r
95                 std::string date;\r
96                 long index;\r
97                 std::vector<std::string> boards;\r
98                 TiXmlText *txt;\r
99                 TiXmlHandle hnd(&td);\r
100                 TiXmlNode *node;\r
101                 TiXmlNode *node2;\r
102 \r
103                 Initialize();\r
104 \r
105                 node=hnd.FirstChild("MessageList").FirstChild("Message").ToNode();\r
106                 while(node)\r
107                 {\r
108                         date="";\r
109                         index=-1;\r
110                         boards.clear();\r
111 \r
112                         TiXmlHandle hnd2(node);\r
113                         txt=hnd2.FirstChild("Date").FirstChild().ToText();\r
114                         if(txt)\r
115                         {\r
116                                 date=txt->ValueStr();\r
117                         }\r
118                         txt=hnd2.FirstChild("Index").FirstChild().ToText();\r
119                         if(txt)\r
120                         {\r
121                                 tempstr=txt->ValueStr();\r
122                                 StringFunctions::Convert(tempstr,index);\r
123                         }\r
124                         node2=hnd2.FirstChild("Boards").FirstChild("Board").ToNode();\r
125                         while(node2)\r
126                         {\r
127                                 if(node2->FirstChild())\r
128                                 {\r
129                                         boards.push_back(node2->FirstChild()->ValueStr());\r
130                                 }\r
131                                 node2=node2->NextSibling("Board");\r
132                         }\r
133 \r
134                         m_messages.push_back(message(date,index,boards));\r
135 \r
136                         node=node->NextSibling("Message");\r
137                 }\r
138 \r
139                 return true;\r
140         }\r
141         else\r
142         {\r
143                 return false;\r
144         }\r
145 }\r