2a47d81315ca1be4e7811c18e8c8512d5ab8a549
[fms.git] / src / freenet / inactivemessagelistrequester.cpp
1 #include "../../include/freenet/inactivemessagelistrequester.h"\r
2 \r
3 #include <Poco/DateTimeFormatter.h>\r
4 \r
5 #ifdef XMEM\r
6         #include <xmem.h>\r
7 #endif\r
8 \r
9 InactiveMessageListRequester::InactiveMessageListRequester()\r
10 {\r
11         Initialize();\r
12 }\r
13 \r
14 InactiveMessageListRequester::InactiveMessageListRequester(FCPv2::Connection *fcp):MessageListRequester(fcp)\r
15 {\r
16         Initialize();\r
17 }\r
18 \r
19 void InactiveMessageListRequester::Initialize()\r
20 {\r
21         m_fcpuniquename="InactiveMessageListRequester";\r
22         std::string tempval="";\r
23 \r
24         m_maxrequests=0;\r
25         Option::Instance()->GetInt("MaxMessageListRequests",m_maxrequests);\r
26 \r
27         // inactive identities get 1/2 of the max requests option -  active identities get 1/2 + any remaining if not evenly divisible\r
28         m_maxrequests=(m_maxrequests/2);\r
29 \r
30         if(m_maxrequests<1)\r
31         {\r
32                 m_maxrequests=1;\r
33                 m_log->error("Option MaxMessageListRequests is currently set at "+tempval+".  It must be 1 or greater.");\r
34         }\r
35         if(m_maxrequests>100)\r
36         {\r
37                 m_log->warning("Option MaxMessageListRequests is currently set at "+tempval+".  This value might be incorrectly configured.");\r
38         }\r
39 \r
40         tempval="";\r
41         Option::Instance()->Get("LocalTrustOverridesPeerTrust",tempval);\r
42         if(tempval=="true")\r
43         {\r
44                 m_localtrustoverrides=true;\r
45         }\r
46         else\r
47         {\r
48                 m_localtrustoverrides=false;\r
49         }\r
50 \r
51         tempval="";\r
52         Option::Instance()->Get("SaveMessagesFromNewBoards",tempval);\r
53         if(tempval=="true")\r
54         {\r
55                 m_savetonewboards=true;\r
56         }\r
57         else\r
58         {\r
59                 m_savetonewboards=false;\r
60         }\r
61 \r
62         m_messagedownloadmaxdaysbackward=5;\r
63         tempval="5";\r
64         Option::Instance()->Get("MessageDownloadMaxDaysBackward",tempval);\r
65         StringFunctions::Convert(tempval,m_messagedownloadmaxdaysbackward);\r
66 \r
67 }\r
68 \r
69 void InactiveMessageListRequester::PopulateIDList()\r
70 {\r
71         Poco::DateTime date;\r
72         Poco::DateTime yesterday=date-Poco::Timespan(1,0,0,0,0);\r
73         int id;\r
74 \r
75         SQLite3DB::Statement st;\r
76 \r
77         // select identities we want to query (we've seen them today) - sort by their trust level (descending) with secondary sort on how long ago we saw them (ascending)\r
78         if(m_localtrustoverrides==false)\r
79         {\r
80                 st=m_db->Prepare("SELECT tblIdentity.IdentityID FROM tblIdentity INNER JOIN vwIdentityStats ON tblIdentity.IdentityID=vwIdentityStats.IdentityID WHERE PublicKey IS NOT NULL AND PublicKey <> '' AND LastSeen>='"+Poco::DateTimeFormatter::format(date,"%Y-%m-%d")+"' AND (vwIdentityStats.LastMessageDate IS NULL OR vwIdentityStats.LastMessageDate<'"+Poco::DateTimeFormatter::format(yesterday,"%Y-%m-%d")+"') AND (LocalMessageTrust IS NULL OR LocalMessageTrust>=(SELECT OptionValue FROM tblOption WHERE Option='MinLocalMessageTrust')) AND (PeerMessageTrust IS NULL OR PeerMessageTrust>=(SELECT OptionValue FROM tblOption WHERE Option='MinPeerMessageTrust')) ORDER BY LocalMessageTrust+LocalTrustListTrust DESC, LastSeen;");\r
81         }\r
82         else\r
83         {\r
84                 st=m_db->Prepare("SELECT tblIdentity.IdentityID FROM tblIdentity INNER JOIN vwIdentityStats ON tblIdentity.IdentityID=vwIdentityStats.IdentityID WHERE PublicKey IS NOT NULL AND PublicKey <> '' AND LastSeen>='"+Poco::DateTimeFormatter::format(date,"%Y-%m-%d")+"' AND (vwIdentityStats.LastMessageDate IS NULL OR vwIdentityStats.LastMessageDate<'"+Poco::DateTimeFormatter::format(yesterday,"%Y-%m-%d")+"') AND (LocalMessageTrust>=(SELECT OptionValue FROM tblOption WHERE Option='MinLocalMessageTrust') OR (LocalMessageTrust IS NULL AND (PeerMessageTrust IS NULL OR PeerMessageTrust>=(SELECT OptionValue FROM tblOption WHERE Option='MinPeerMessageTrust')))) ORDER BY LocalMessageTrust+LocalTrustListTrust DESC, LastSeen;");\r
85         }\r
86         st.Step();\r
87 \r
88         m_ids.clear();\r
89 \r
90         while(st.RowReturned())\r
91         {\r
92                 st.ResultInt(0,id);\r
93                 m_ids[id]=false;\r
94                 st.Step();\r
95         }\r
96 }\r