version 0.3.29
[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(SQLite3DB::DB *db):MessageListRequester(db)\r
10 {\r
11         Initialize();\r
12 }\r
13 \r
14 InactiveMessageListRequester::InactiveMessageListRequester(SQLite3DB::DB *db, FCPv2::Connection *fcp):MessageListRequester(db,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 option(m_db);\r
26         option.GetInt("MaxMessageListRequests",m_maxrequests);\r
27 \r
28         // inactive identities get 1/2 of the max requests option -  active identities get 1/2 + any remaining if not evenly divisible\r
29         m_maxrequests=(m_maxrequests/2);\r
30 \r
31         if(m_maxrequests<1)\r
32         {\r
33                 m_maxrequests=1;\r
34                 m_log->error("Option MaxMessageListRequests is currently set at "+tempval+".  It must be 1 or greater.");\r
35         }\r
36         if(m_maxrequests>100)\r
37         {\r
38                 m_log->warning("Option MaxMessageListRequests is currently set at "+tempval+".  This value might be incorrectly configured.");\r
39         }\r
40 \r
41         tempval="";\r
42         option.Get("LocalTrustOverridesPeerTrust",tempval);\r
43         if(tempval=="true")\r
44         {\r
45                 m_localtrustoverrides=true;\r
46         }\r
47         else\r
48         {\r
49                 m_localtrustoverrides=false;\r
50         }\r
51 \r
52         tempval="";\r
53         option.Get("SaveMessagesFromNewBoards",tempval);\r
54         if(tempval=="true")\r
55         {\r
56                 m_savetonewboards=true;\r
57         }\r
58         else\r
59         {\r
60                 m_savetonewboards=false;\r
61         }\r
62 \r
63         m_messagedownloadmaxdaysbackward=5;\r
64         tempval="5";\r
65         option.Get("MessageDownloadMaxDaysBackward",tempval);\r
66         StringFunctions::Convert(tempval,m_messagedownloadmaxdaysbackward);\r
67 \r
68 }\r
69 \r
70 void InactiveMessageListRequester::PopulateIDList()\r
71 {\r
72         Poco::DateTime date;\r
73         Poco::DateTime yesterday=date-Poco::Timespan(1,0,0,0,0);\r
74         int id;\r
75 \r
76         SQLite3DB::Statement st;\r
77 \r
78         // 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
79         if(m_localtrustoverrides==false)\r
80         {\r
81                 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
82         }\r
83         else\r
84         {\r
85                 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
86         }\r
87         st.Step();\r
88 \r
89         m_ids.clear();\r
90 \r
91         while(st.RowReturned())\r
92         {\r
93                 st.ResultInt(0,id);\r
94                 m_ids[id]=false;\r
95                 st.Step();\r
96         }\r
97 }\r