--- /dev/null
+#include "../include/messagethread.h"\r
+#include "../include/stringfunctions.h"\r
+\r
+#include <algorithm>\r
+\r
+#ifdef XMEM\r
+ #include <xmem.h>\r
+#endif\r
+\r
+void MessageThread::AddChildren(const long messageid, const long level, const long boardid)\r
+{\r
+ SQLite3DB::Statement st=m_db->Prepare("SELECT tblMessageReplyTo.MessageID, tblMessage1.Subject, tblMessage1.FromName, tblMessage1.MessageDate || ' ' || tblMessage1.MessageTime FROM tblMessage INNER JOIN tblMessageReplyTo ON tblMessage.MessageUUID=tblMessageReplyTo.ReplyToMessageUUID INNER JOIN tblMessage AS 'tblMessage1' ON tblMessageReplyTo.MessageID=tblMessage1.MessageID INNER JOIN tblMessageBoard ON tblMessage1.MessageID=tblMessageBoard.MessageID WHERE tblMessage.MessageID=? AND tblMessageBoard.BoardID=? AND tblMessageReplyTo.ReplyOrder=0 ORDER BY tblMessage1.MessageDate || ' ' || tblMessage1.MessageTime;");\r
+ st.Bind(0,messageid);\r
+ st.Bind(1,boardid);\r
+ st.Step();\r
+ while(st.RowReturned())\r
+ {\r
+ int childid=0;\r
+ std::string subject="";\r
+ std::string fromname="";\r
+ std::string datetime="";\r
+ st.ResultInt(0,childid);\r
+ st.ResultText(1,subject);\r
+ st.ResultText(2,fromname);\r
+ st.ResultText(3,datetime);\r
+ \r
+ threadnode node;\r
+ node.m_messageid=childid;\r
+ node.m_level=level;\r
+ node.m_subject=subject;\r
+ node.m_fromname=fromname;\r
+ node.m_date=datetime;\r
+ m_nodes.push_back(node);\r
+ \r
+ AddChildren(childid,level+1,boardid);\r
+ \r
+ st.Step();\r
+ } \r
+}\r
+\r
+const MessageThread::threadnode MessageThread::GetOriginalMessageNode(const long messageid, const long boardid)\r
+{\r
+ SQLite3DB::Statement st=m_db->Prepare("SELECT tblMessage.MessageID, tblMessage.Subject, tblMessage.FromName, tblMessage.MessageDate || ' ' || tblMessage.MessageTime FROM tblMessageReplyTo INNER JOIN tblMessage ON tblMessageReplyTo.ReplyToMessageUUID=tblMessage.MessageUUID INNER JOIN tblMessageBoard ON tblMessage.MessageID=tblMessageBoard.MessageID WHERE tblMessageReplyTo.ReplyOrder=0 AND tblMessageReplyTo.MessageID=? AND tblMessageBoard.BoardID=?;");\r
+ st.Bind(0,messageid);\r
+ st.Bind(1,boardid);\r
+ st.Step();\r
+ if(st.RowReturned())\r
+ {\r
+ int id=0;\r
+ std::string subject="";\r
+ std::string fromname="";\r
+ std::string datetime="";\r
+ st.ResultInt(0,id);\r
+ st.ResultText(1,subject);\r
+ st.ResultText(2,fromname);\r
+ st.ResultText(3,datetime);\r
+\r
+ threadnode node;\r
+ node.m_messageid=id;\r
+ node.m_level=0;\r
+ node.m_subject=subject;\r
+ node.m_fromname=fromname;\r
+ node.m_date=datetime;\r
+\r
+ return GetOriginalMessageNode(node.m_messageid,boardid);\r
+ }\r
+ else\r
+ {\r
+ threadnode node;\r
+ node.m_messageid=-1;\r
+ node.m_level=0;\r
+ node.m_subject="";\r
+ node.m_fromname="";\r
+ node.m_date="";\r
+\r
+ SQLite3DB::Statement st2=m_db->Prepare("SELECT Subject, FromName, MessageDate || ' ' || MessageTime FROM tblMessage WHERE MessageID=?;");\r
+ st2.Bind(0,messageid);\r
+ st2.Step();\r
+\r
+ if(st2.RowReturned())\r
+ {\r
+ node.m_messageid=messageid;\r
+ st2.ResultText(0,node.m_subject);\r
+ st2.ResultText(1,node.m_fromname);\r
+ st2.ResultText(2,node.m_date);\r
+ }\r
+\r
+ return node;\r
+ }\r
+}\r
+\r
+const bool MessageThread::Load(const long messageid, const long boardid, const bool bydate)\r
+{\r
+ threadnode originalmessagenode=GetOriginalMessageNode(messageid,boardid);\r
+ \r
+ if(originalmessagenode.m_messageid>=0)\r
+ {\r
+ m_nodes.push_back(originalmessagenode);\r
+ \r
+ AddChildren(originalmessagenode.m_messageid,1,boardid);\r
+\r
+ if(bydate==true)\r
+ {\r
+ std::sort(m_nodes.begin(),m_nodes.end(),datecompare());\r
+ }\r
+\r
+ return true;\r
+ }\r
+ else\r
+ {\r
+ return false;\r
+ }\r
+}\r
+\r
+const bool MessageThread::Load(const std::string &messageidstr, const long boardid, const bool bydate)\r
+{\r
+ long messageid=0;\r
+ StringFunctions::Convert(messageidstr,messageid);\r
+ return Load(messageid,boardid,bydate);\r
+}\r