1 #include "../../include/freenet/boardlistinserter.h"
\r
2 #include "../../include/freenet/boardlistxml.h"
\r
8 BoardListInserter::BoardListInserter()
\r
13 BoardListInserter::BoardListInserter(FCPv2 *fcp):IIndexInserter<long>(fcp)
\r
18 void BoardListInserter::CheckForNeededInsert()
\r
20 // only do 1 insert at a time
\r
21 if(m_inserting.size()==0)
\r
26 today.SetToGMTime();
\r
27 daysback.SetToGMTime();
\r
30 daysback.Add(0,0,0,-20);
\r
32 // get identities who posted messages to boards in the past 20 days
\r
33 SQLite3DB::Statement st=m_db->Prepare("SELECT tblLocalIdentity.LocalIdentityID FROM tblLocalIdentity INNER JOIN tblMessageInserts ON tblLocalIdentity.LocalIdentityID=tblMessageInserts.LocalIdentityID WHERE tblLocalIdentity.PublishBoardList='true' AND (tblLocalIdentity.LastInsertedBoardList<? OR tblLocalIdentity.LastInsertedBoardList IS NULL) AND tblMessageInserts.Day>=? GROUP BY tblLocalIdentity.LocalIdentityID;");
\r
34 st.Bind(0,today.Format("%Y-%m-%d"));
\r
35 st.Bind(1,daysback.Format("%Y-%m-%d"));
\r
38 if(st.RowReturned())
\r
40 int localidentityid;
\r
41 st.ResultInt(0,localidentityid);
\r
42 StartInsert(localidentityid);
\r
47 const bool BoardListInserter::HandlePutFailed(FCPMessage &message)
\r
49 std::vector<std::string> idparts;
\r
50 long localidentityid;
\r
53 StringFunctions::Split(message["Identifier"],"|",idparts);
\r
54 StringFunctions::Convert(idparts[1],localidentityid);
\r
55 StringFunctions::Convert(idparts[2],index);
\r
57 if(message["Fatal"]=="true" || message["Code"]=="9")
\r
59 SQLite3DB::Statement st=m_db->Prepare("INSERT INTO tblBoardListInserts(LocalIdentityID,Day,InsertIndex,Inserted) VALUES(?,?,?,'false');");
\r
60 st.Bind(0,localidentityid);
\r
61 st.Bind(1,idparts[4]);
\r
66 RemoveFromInsertList(localidentityid);
\r
71 const bool BoardListInserter::HandlePutSuccessful(FCPMessage &message)
\r
74 std::vector<std::string> idparts;
\r
75 long localidentityid;
\r
78 StringFunctions::Split(message["Identifier"],"|",idparts);
\r
79 StringFunctions::Convert(idparts[1],localidentityid);
\r
80 StringFunctions::Convert(idparts[2],index);
\r
82 SQLite3DB::Statement st=m_db->Prepare("INSERT INTO tblBoardListInserts(LocalIdentityID,Day,InsertIndex,Inserted) VALUES(?,?,?,'true');");
\r
83 st.Bind(0,localidentityid);
\r
84 st.Bind(1,idparts[4]);
\r
89 st=m_db->Prepare("UPDATE tblLocalIdentity SET LastInsertedBoardList=? WHERE LocalIdentityID=?;");
\r
90 st.Bind(0,now.Format("%Y-%m-%d %H:%M:%S"));
\r
91 st.Bind(1,localidentityid);
\r
94 RemoveFromInsertList(localidentityid);
\r
96 m_log->WriteLog(LogFile::LOGLEVEL_DEBUG,"BoardListInserter::HandlePutSuccessful successfully inserted BoardList.");
\r
101 void BoardListInserter::Initialize()
\r
103 m_fcpuniquename="BoardListInserter";
\r
106 const bool BoardListInserter::StartInsert(const long &localidentityid)
\r
111 FCPMessage message;
\r
113 std::string datasizestr;
\r
114 std::string privatekey="";
\r
116 std::string indexstr="";
\r
117 std::string localidentityidstr;
\r
120 daysback.SetToGMTime();
\r
121 daysback.Add(0,0,0,-20);
\r
124 SQLite3DB::Statement st=m_db->Prepare("SELECT BoardName,BoardDescription FROM tblBoard INNER JOIN tblMessageBoard ON tblBoard.BoardID=tblMessageBoard.BoardID INNER JOIN tblMessage ON tblMessageBoard.MessageID=tblMessage.MessageID INNER JOIN tblMessageInserts ON tblMessage.MessageUUID=tblMessageInserts.MessageUUID WHERE tblMessageInserts.LocalIdentityID=? AND tblMessageInserts.Day>=? GROUP BY tblBoard.BoardID;");
\r
125 st.Bind(0,localidentityid);
\r
126 st.Bind(1,daysback.Format("%Y-%m-%d"));
\r
129 while(st.RowReturned())
\r
131 std::string name="";
\r
132 std::string description="";
\r
134 st.ResultText(0,name);
\r
135 st.ResultText(1,description);
\r
137 xml.AddBoard(name,description);
\r
143 st=m_db->Prepare("SELECT PrivateKey FROM tblLocalIdentity WHERE LocalIdentityID=?;");
\r
144 st.Bind(0,localidentityid);
\r
146 if(st.RowReturned())
\r
148 st.ResultText(0,privatekey);
\r
153 st=m_db->Prepare("SELECT MAX(InsertIndex) FROM tblBoardListInserts WHERE LocalIdentityID=? AND Day=?;");
\r
154 st.Bind(0,localidentityid);
\r
155 st.Bind(1,now.Format("%Y-%m-%d"));
\r
157 if(st.RowReturned())
\r
159 if(st.ResultNull(0)==false)
\r
161 st.ResultInt(0,index);
\r
165 StringFunctions::Convert(index,indexstr);
\r
168 StringFunctions::Convert(data.size(),datasizestr);
\r
169 StringFunctions::Convert(localidentityid,localidentityidstr);
\r
171 message.SetName("ClientPut");
\r
172 message["URI"]=privatekey+m_messagebase+"|"+now.Format("%Y-%m-%d")+"|BoardList|"+indexstr+".xml";
\r
173 message["Identifier"]=m_fcpuniquename+"|"+localidentityidstr+"|"+indexstr+"|"+message["URI"];
\r
174 message["UploadFrom"]="direct";
\r
175 message["DataLength"]=datasizestr;
\r
176 m_fcp->SendMessage(message);
\r
177 m_fcp->SendRaw(data.c_str(),data.size());
\r
179 m_inserting.push_back(localidentityid);
\r