Initialize();\r
}\r
\r
+void MessageListRequester::GetBoardList(std::map<std::string,bool> &boards)\r
+{\r
+ SQLite3DB::Statement st=m_db->Prepare("SELECT BoardName, SaveReceivedMessages FROM tblBoard;");\r
+ st.Step();\r
+ while(st.RowReturned())\r
+ {\r
+ std::string boardname="";\r
+ std::string tempval="";\r
+ st.ResultText(0,boardname);\r
+ st.ResultText(1,tempval);\r
+\r
+ if(tempval=="true")\r
+ {\r
+ boards[boardname]=true;\r
+ }\r
+ else\r
+ {\r
+ boards[boardname]=false;\r
+ }\r
+\r
+ st.Step();\r
+ }\r
+}\r
+\r
const bool MessageListRequester::HandleAllData(FCPMessage &message)\r
{ \r
SQLite3DB::Statement st;\r
MessageListXML xml;\r
long identityid;\r
long index;\r
+ std::map<std::string,bool> boards; // list of boards and if we will save messages for that board or not\r
+ bool addmessage=false;\r
+ std::string boardsstr="";\r
+\r
+ GetBoardList(boards);\r
\r
StringFunctions::Split(message["Identifier"],"|",idparts);\r
StringFunctions::Convert(message["DataLength"],datalength);\r
SQLite3DB::Statement mst=m_db->Prepare("INSERT INTO tblMessageRequests(IdentityID,Day,RequestIndex,FromMessageList) VALUES(?,?,?,'true');");\r
for(long i=0; i<xml.MessageCount(); i++)\r
{\r
- st.Bind(0,identityid);\r
- st.Bind(1,xml.GetDate(i));\r
- st.Bind(2,xml.GetIndex(i));\r
- st.Step();\r
- if(st.RowReturned()==false)\r
+\r
+ // go through each board the message was posted to and see if we are saving messages to that board\r
+ // if the board isn't found, see if we are saving messages to new boards\r
+ boardsstr="";\r
+ addmessage=false;\r
+ std::vector<std::string> messageboards=xml.GetBoards(i);\r
+ for(std::vector<std::string>::iterator j=messageboards.begin(); j!=messageboards.end(); j++)\r
{\r
- mst.Bind(0,identityid);\r
- mst.Bind(1,xml.GetDate(i));\r
- mst.Bind(2,xml.GetIndex(i));\r
- mst.Step();\r
- mst.Reset();\r
+ if(boards.find((*j))!=boards.end())\r
+ {\r
+ if(boards[(*j)]==true)\r
+ {\r
+ addmessage=true;\r
+ }\r
+ }\r
+ else if(m_savetonewboards==true)\r
+ {\r
+ addmessage=true;\r
+ }\r
+ if(j!=messageboards.begin())\r
+ {\r
+ boardsstr+=", ";\r
+ }\r
+ boardsstr+=(*j);\r
+ }\r
+\r
+ if(addmessage==true)\r
+ {\r
+ st.Bind(0,identityid);\r
+ st.Bind(1,xml.GetDate(i));\r
+ st.Bind(2,xml.GetIndex(i));\r
+ st.Step();\r
+ if(st.RowReturned()==false)\r
+ {\r
+ mst.Bind(0,identityid);\r
+ mst.Bind(1,xml.GetDate(i));\r
+ mst.Bind(2,xml.GetIndex(i));\r
+ mst.Step();\r
+ mst.Reset();\r
+ }\r
+ st.Reset();\r
+ }\r
+ else\r
+ {\r
+ m_log->trace("MessageListRequester::HandleAllData will not download message posted to "+boardsstr);\r
}\r
- st.Reset();\r
}\r
\r
// insert external message indexes\r
{\r
if(xml.GetExternalType(i)=="Keyed")\r
{\r
- spk.Bind(0,xml.GetExternalIdentity(i));\r
- spk.Step();\r
- if(spk.RowReturned())\r
+ // go through each board the message was posted to and see if we are saving messages to that board\r
+ // if the board isn't found, see if we are saving messages to new boards\r
+ boardsstr="";\r
+ addmessage=false;\r
+ std::vector<std::string> messageboards=xml.GetExternalBoards(i);\r
+ for(std::vector<std::string>::iterator j=messageboards.begin(); j!=messageboards.end(); j++)\r
{\r
- int thisidentityid=0;\r
- spk.ResultInt(0,thisidentityid);\r
- mst.Bind(0,thisidentityid);\r
- mst.Bind(1,xml.GetExternalDate(i));\r
- mst.Bind(2,xml.GetExternalIndex(i));\r
- mst.Step();\r
- mst.Reset();\r
+ if(boards.find((*j))!=boards.end())\r
+ {\r
+ if(boards[(*j)]==true)\r
+ {\r
+ addmessage=true;\r
+ }\r
+ }\r
+ else if(m_savetonewboards==true)\r
+ {\r
+ addmessage=true;\r
+ }\r
+ if(j!=messageboards.begin())\r
+ {\r
+ boardsstr+=", ";\r
+ }\r
+ boardsstr+=(*j);\r
+ }\r
+\r
+ if(addmessage==true)\r
+ {\r
+ spk.Bind(0,xml.GetExternalIdentity(i));\r
+ spk.Step();\r
+ if(spk.RowReturned())\r
+ {\r
+ int thisidentityid=0;\r
+ spk.ResultInt(0,thisidentityid);\r
+ mst.Bind(0,thisidentityid);\r
+ mst.Bind(1,xml.GetExternalDate(i));\r
+ mst.Bind(2,xml.GetExternalIndex(i));\r
+ mst.Step();\r
+ mst.Reset();\r
+ }\r
+ spk.Reset();\r
+ }\r
+ else\r
+ {\r
+ m_log->trace("MessageListRequester::HandleAllData will not download external message posted to "+boardsstr+" from " + xml.GetExternalIdentity(i));\r
}\r
- spk.Reset();\r
}\r
}\r
\r
m_log->warning("Option MaxMessageListRequests is currently set at "+tempval+". This value might be incorrectly configured.");\r
}\r
\r
+ tempval="";\r
Option::Instance()->Get("LocalTrustOverridesPeerTrust",tempval);\r
if(tempval=="true")\r
{\r
m_localtrustoverrides=false;\r
}\r
\r
+ tempval="";\r
+ Option::Instance()->Get("SaveMessagesFromNewBoards",tempval);\r
+ if(tempval=="true")\r
+ {\r
+ m_savetonewboards=true;\r
+ }\r
+ else\r
+ {\r
+ m_savetonewboards=false;\r
+ }\r
+\r
}\r
\r
void MessageListRequester::PopulateIDList()\r