1 #include "../../include/freenet/messagelistxml.h"
\r
7 MessageListXML::MessageListXML()
\r
12 void MessageListXML::AddMessage(const std::string &date, const long index, const std::vector<std::string> &boards)
\r
14 m_messages.push_back(message(date,index,boards));
\r
17 void MessageListXML::AddExternalMessage(const std::string &identity, const std::string &date, const long index, const std::vector<std::string> &boards)
\r
19 m_externalmessages.push_back(externalmessage("Keyed",identity,date,index,boards));
\r
22 void MessageListXML::AddExternalMessage(const std::string &messagekey, const std::string &date, const std::vector<std::string> &boards)
\r
24 m_externalmessages.push_back(externalmessage("Anonymous",messagekey,date,boards));
\r
27 std::vector<std::string> MessageListXML::GetBoards(const long index)
\r
29 if(index>=0 && index<m_messages.size())
\r
31 return m_messages[index].m_boards;
\r
35 return std::vector<std::string>();
\r
39 std::string MessageListXML::GetDate(const long index)
\r
41 if(index>=0 && index<m_messages.size())
\r
43 return m_messages[index].m_date;
\r
51 std::vector<std::string> MessageListXML::GetExternalBoards(const long index)
\r
53 if(index>=0 && index<m_externalmessages.size())
\r
55 return m_externalmessages[index].m_boards;
\r
59 return std::vector<std::string>();
\r
63 std::string MessageListXML::GetExternalDate(const long index)
\r
65 if(index>=0 && index<m_externalmessages.size())
\r
67 return m_externalmessages[index].m_date;
\r
75 std::string MessageListXML::GetExternalIdentity(const long index)
\r
77 if(index>=0 && index<m_externalmessages.size())
\r
79 return m_externalmessages[index].m_identity;
\r
87 const long MessageListXML::GetExternalIndex(const long index)
\r
89 if(index>=0 && index<m_externalmessages.size())
\r
91 return m_externalmessages[index].m_index;
\r
99 std::string MessageListXML::GetExternalMessageKey(const long index)
\r
101 if(index>=0 && index<m_externalmessages.size())
\r
103 return m_externalmessages[index].m_messagekey;
\r
111 std::string MessageListXML::GetExternalType(const long index)
\r
113 if(index>=0 && index<m_externalmessages.size())
\r
115 return m_externalmessages[index].m_type;
\r
123 const long MessageListXML::GetIndex(const long index)
\r
125 if(index>=0 && index<m_messages.size())
\r
127 return m_messages[index].m_index;
\r
135 std::string MessageListXML::GetXML()
\r
138 TiXmlDeclaration *tdec=new TiXmlDeclaration("1.0","UTF-8","");
\r
142 td.LinkEndChild(tdec);
\r
143 tid=new TiXmlElement("MessageList");
\r
144 td.LinkEndChild(tid);
\r
146 for(std::vector<message>::iterator i=m_messages.begin(); i!=m_messages.end(); i++)
\r
148 TiXmlElement *tr=new TiXmlElement("Message");
\r
149 tid->LinkEndChild(tr);
\r
150 tr->LinkEndChild(XMLCreateTextElement("Date",(*i).m_date));
\r
151 tr->LinkEndChild(XMLCreateTextElement("Index",(*i).m_index));
\r
152 TiXmlElement *brds=new TiXmlElement("Boards");
\r
153 tr->LinkEndChild(brds);
\r
154 for(std::vector<std::string>::iterator j=(*i).m_boards.begin(); j!=(*i).m_boards.end(); j++)
\r
156 brds->LinkEndChild(XMLCreateCDATAElement("Board",(*j)));
\r
160 for(std::vector<externalmessage>::iterator i=m_externalmessages.begin(); i!=m_externalmessages.end(); i++)
\r
162 TiXmlElement *tr=new TiXmlElement("ExternalMessage");
\r
163 tid->LinkEndChild(tr);
\r
164 tr->LinkEndChild(XMLCreateTextElement("Type",(*i).m_type));
\r
165 if((*i).m_type=="Keyed")
\r
167 tr->LinkEndChild(XMLCreateCDATAElement("Identity",(*i).m_identity));
\r
168 tr->LinkEndChild(XMLCreateTextElement("Index",(*i).m_index));
\r
172 tr->LinkEndChild(XMLCreateCDATAElement("MessageKey",(*i).m_messagekey));
\r
174 tr->LinkEndChild(XMLCreateTextElement("Date",(*i).m_date));
\r
175 TiXmlElement *brds=new TiXmlElement("Boards");
\r
176 tr->LinkEndChild(brds);
\r
177 for(std::vector<std::string>::iterator j=(*i).m_boards.begin(); j!=(*i).m_boards.end(); j++)
\r
179 brds->LinkEndChild(XMLCreateCDATAElement("Board",(*j)));
\r
184 return std::string(tp.CStr());
\r
187 void MessageListXML::Initialize()
\r
189 m_messages.clear();
\r
190 m_externalmessages.clear();
\r
193 const bool MessageListXML::ParseXML(const std::string &xml)
\r
196 td.Parse(xml.c_str());
\r
200 std::string tempstr;
\r
203 std::vector<std::string> boards;
\r
205 TiXmlHandle hnd(&td);
\r
211 node=hnd.FirstChild("MessageList").FirstChild("Message").ToNode();
\r
218 TiXmlHandle hnd2(node);
\r
219 txt=hnd2.FirstChild("Date").FirstChild().ToText();
\r
222 date=SanitizeSingleString(txt->ValueStr());
\r
224 txt=hnd2.FirstChild("Index").FirstChild().ToText();
\r
227 tempstr=SanitizeSingleString(txt->ValueStr());
\r
228 StringFunctions::Convert(tempstr,index);
\r
230 node2=hnd2.FirstChild("Boards").FirstChild("Board").ToNode();
\r
233 if(node2->FirstChild())
\r
235 std::string boardname=SanitizeSingleString(node2->FirstChild()->ValueStr());
\r
236 StringFunctions::LowerCase(boardname,boardname);
\r
237 boards.push_back(boardname);
\r
239 node2=node2->NextSibling("Board");
\r
242 m_messages.push_back(message(date,index,boards));
\r
244 node=node->NextSibling("Message");
\r
247 node=hnd.FirstChild("MessageList").FirstChild("ExternalMessage").ToNode();
\r
250 std::string type="";
\r
251 std::string identity="";
\r
256 TiXmlHandle hnd2(node);
\r
257 txt=hnd2.FirstChild("Type").FirstChild().ToText();
\r
260 type=SanitizeSingleString(txt->ValueStr());
\r
265 txt=hnd2.FirstChild("Identity").FirstChild().ToText();
\r
268 identity=SanitizeSingleString(txt->ValueStr());
\r
270 txt=hnd2.FirstChild("Date").FirstChild().ToText();
\r
273 date=SanitizeSingleString(txt->ValueStr());
\r
275 txt=hnd2.FirstChild("Index").FirstChild().ToText();
\r
278 tempstr=SanitizeSingleString(txt->ValueStr());
\r
279 StringFunctions::Convert(tempstr,index);
\r
281 node2=hnd2.FirstChild("Boards").FirstChild("Board").ToNode();
\r
284 if(node2->FirstChild())
\r
286 std::string boardname=SanitizeSingleString(node2->FirstChild()->ValueStr());
\r
287 StringFunctions::LowerCase(boardname,boardname);
\r
288 boards.push_back(boardname);
\r
290 node2=node2->NextSibling("Board");
\r
292 m_externalmessages.push_back(externalmessage("Keyed",identity,date,index,boards));
\r
295 node=node->NextSibling("ExternalMessage");
\r