version 0.1.2
[fms.git] / src / freenet / identityinserter.cpp
index 028f495..aa1f4ab 100644 (file)
@@ -26,10 +26,13 @@ void IdentityInserter::CheckForNeededInsert()
        // set date to 1 hour back\r
        date.Add(0,0,-1);\r
 \r
-       // Because of importance of Identity.xml, if we are now at the next day we immediately want to insert identities so change the date back to now\r
+       // Because of importance of Identity.xml, if we are now at the next day we immediately want to insert identities so change the date back to 12:00 AM so we find all identities not inserted yet today\r
        if(date.GetDay()!=now.GetDay())\r
        {\r
                date=now;\r
+               date.SetHour(0);\r
+               date.SetMinute(0);\r
+               date.SetSecond(0);\r
        }\r
 \r
        SQLite3DB::Recordset rs=m_db->Query("SELECT LocalIdentityID FROM tblLocalIdentity WHERE PrivateKey IS NOT NULL AND PrivateKey <> '' AND InsertingIdentity='false' AND (LastInsertedIdentity<'"+date.Format("%Y-%m-%d %H:%M:%S")+"' OR LastInsertedIdentity IS NULL) ORDER BY LastInsertedIdentity;");\r
@@ -77,16 +80,23 @@ const bool IdentityInserter::HandleMessage(FCPMessage &message)
 \r
                if(message.GetName()=="PutSuccessful")\r
                {\r
-                       m_db->Execute("UPDATE tblLocalIdentity SET InsertingIdentity='false', LastInsertedIdentity='"+now.Format("%Y-%m-%d %H:%M:%S")+"' WHERE LocalIdentityID="+idparts[1]+";");\r
+                       // a little hack here - if we just inserted index yesterday and it is now the next day - we would have inserted todays date not yesterdays as LastInsertedIdentity.\r
+                       // If this is the case, we will skip updating LastInsertedIdentity so that we can insert this identity again for today\r
+                       DateTime lastdate;\r
+                       lastdate.Set(idparts[4]);\r
+                       if(lastdate.GetDay()!=now.GetDay())\r
+                       {\r
+                               m_db->Execute("UPDATE tblLocalIdentity SET InsertingIdentity='false', LastInsertedIdentity='"+now.Format("%Y-%m-%d %H:%M:%S")+"' WHERE LocalIdentityID="+idparts[1]+";");\r
+                       }\r
                        m_db->Execute("INSERT INTO tblLocalIdentityInserts(LocalIdentityID,Day,InsertIndex) VALUES("+idparts[1]+",'"+idparts[4]+"',"+idparts[2]+");");\r
-                       m_log->WriteLog(LogFile::LOGLEVEL_DEBUG,__FUNCTION__" inserted identity xml");\r
+                       m_log->WriteLog(LogFile::LOGLEVEL_DEBUG,"IdentityInserter::HandleMessage inserted Identity xml");\r
                        return true;\r
                }\r
 \r
                if(message.GetName()=="PutFailed")\r
                {\r
                        m_db->Execute("UPDATE tblLocalIdentity SET InsertingIdentity='false' WHERE LocalIdentityID="+idparts[1]+";");\r
-                       m_log->WriteLog(LogFile::LOGLEVEL_DEBUG,__FUNCTION__" failure inserting identity xml.  Code="+message["Code"]+" Description="+message["CodeDescription"]);\r
+                       m_log->WriteLog(LogFile::LOGLEVEL_DEBUG,"IdentityInserter::HandleMessage failure inserting Identity xml.  Code="+message["Code"]+" Description="+message["CodeDescription"]);\r
                        \r
                        // if code 9 (collision), then insert index into inserted table\r
                        if(message["Code"]=="9")\r
@@ -195,7 +205,7 @@ void IdentityInserter::StartInsert(const long localidentityid)
 \r
                if(rs.GetField(4))\r
                {\r
-                       publishboardlist=rs.GetField(3);\r
+                       publishboardlist=rs.GetField(4);\r
                }\r
                publishboardlist=="true" ? idxml.SetPublishBoardList(true) : idxml.SetPublishBoardList(false);\r
 \r