version 0.1.12
[fms.git] / src / message.cpp
index 123d370..41add10 100644 (file)
@@ -3,6 +3,7 @@
 #include "../include/uuidgenerator.h"\r
 #include "../include/stringfunctions.h"\r
 #include "../include/freenet/messagexml.h"\r
+#include "../include/option.h"\r
 \r
 #include <algorithm>\r
 \r
@@ -43,7 +44,15 @@ const bool Message::CheckForAdministrationBoard(const std::vector<std::string> &
 \r
 const std::string Message::GetNNTPArticleID() const\r
 {\r
-       return "<"+m_messageuuid+"@freenetproject.org>";\r
+       // old message - before 0.1.12 - doesn't have @domain so add @freenetproject.org\r
+       if(m_messageuuid.find("@")==std::string::npos)\r
+       {\r
+               return "<"+m_messageuuid+"@freenetproject.org>";\r
+       }\r
+       else\r
+       {\r
+               return "<"+m_messageuuid+">";\r
+       }\r
 }\r
 \r
 const std::string Message::GetNNTPBody() const\r
@@ -78,7 +87,15 @@ const std::string Message::GetNNTPHeaders() const
                        {\r
                                rval+=" ";\r
                        }\r
-                       rval+="<"+(*j).second+"@freenetproject.org>";\r
+                       // old message - before 0.1.12 - doesn't have @domain so add @freenetproject.org\r
+                       if((*j).second.find("@")==std::string::npos)\r
+                       {\r
+                               rval+="<"+(*j).second+"@freenetproject.org>";\r
+                       }\r
+                       else\r
+                       {\r
+                               rval+="<"+(*j).second+">";\r
+                       }\r
                }\r
                rval+="\r\n";\r
        }\r
@@ -192,8 +209,43 @@ void Message::HandleAdministrationMessage()
 \r
 }\r
 \r
+void Message::HandleChangeTrust()\r
+{\r
+       if(m_changemessagetrustonreply!=0 && m_inreplyto.size()>0)\r
+       {\r
+               SQLite3DB::Statement st=m_db->Prepare("SELECT tblIdentity.IdentityID,tblIdentity.LocalMessageTrust FROM tblIdentity INNER JOIN tblMessage ON tblIdentity.IdentityID=tblMessage.IdentityID WHERE tblMessage.MessageUUID=?;");\r
+               st.Bind(0,m_inreplyto[0]);\r
+               st.Step();\r
+               if(st.RowReturned())\r
+               {\r
+                       int identityid=0;\r
+                       int localmessagetrust=0;\r
+\r
+                       st.ResultInt(0,identityid);\r
+                       st.ResultInt(1,localmessagetrust);\r
+\r
+                       localmessagetrust+=m_changemessagetrustonreply;\r
+                       if(localmessagetrust<0)\r
+                       {\r
+                               localmessagetrust=0;\r
+                       }\r
+                       if(localmessagetrust>100)\r
+                       {\r
+                               localmessagetrust=100;\r
+                       }\r
+\r
+                       SQLite3DB::Statement st2=m_db->Prepare("UPDATE tblIdentity SET LocalMessageTrust=? WHERE IdentityID=?;");\r
+                       st2.Bind(0,localmessagetrust);\r
+                       st2.Bind(1,identityid);\r
+                       st2.Step();\r
+\r
+               }\r
+       }\r
+}\r
+\r
 void Message::Initialize()\r
 {\r
+       std::string tempval="";\r
        m_messageid=-1;\r
        m_messageuuid="";\r
        m_subject="";\r
@@ -203,6 +255,9 @@ void Message::Initialize()
        m_fromname="";\r
        m_boards.clear();\r
        m_inreplyto.clear();\r
+       m_changemessagetrustonreply=0;\r
+       Option::Instance()->Get("ChangeMessageTrustOnReply",tempval);\r
+       StringFunctions::Convert(tempval,m_changemessagetrustonreply);\r
 }\r
 \r
 const bool Message::Load(const long messageid, const long boardid)\r
@@ -286,8 +341,24 @@ const bool Message::Load(const long messageid, const long boardid)
 \r
 const bool Message::Load(const std::string &messageuuid)\r
 {\r
+\r
+       std::string uuid=messageuuid;\r
+\r
+       if(uuid.size()>0 && uuid[0]=='<')\r
+       {\r
+               uuid.erase(0,1);\r
+       }\r
+       if(uuid.size()>0 && uuid[uuid.size()-1]=='>')\r
+       {\r
+               uuid.erase(uuid.size()-1);\r
+       }\r
+       if(uuid.find("@freenetproject.org")!=std::string::npos)\r
+       {\r
+               uuid.erase(uuid.find("@freenetproject.org"));\r
+       }\r
+\r
        SQLite3DB::Statement st=m_db->Prepare("SELECT MessageID FROM tblMessage WHERE MessageUUID=?;");\r
-       st.Bind(0,messageuuid);\r
+       st.Bind(0,uuid);\r
        st.Step();\r
 \r
        if(st.RowReturned())\r
@@ -375,8 +446,10 @@ const bool Message::ParseNNTPMessage(const std::string &nntpmessage)
        // get header info\r
        // date is always set to now regardless of what message has\r
        m_datetime.SetToGMTime();\r
+\r
        // messageuuid is always a unique id we generate regardless of message message-id\r
        m_messageuuid=uuid.Generate();\r
+       \r
        // get from\r
        if(mime.GetFieldValue("From"))\r
        {\r
@@ -480,11 +553,18 @@ const bool Message::ParseNNTPMessage(const std::string &nntpmessage)
                        (*i)=StringFunctions::Replace((*i),"<","");\r
                        (*i)=StringFunctions::Replace((*i),">","");\r
                        (*i)=StringFunctions::TrimWhitespace((*i));\r
+                       /*\r
                        // erase @ and everything after\r
                        if((*i).find("@")!=std::string::npos)\r
                        {\r
                                (*i).erase((*i).find("@"));\r
                        }\r
+                       */\r
+                       // only erase after @ if message is old type with @freenetproject.org\r
+                       if((*i).find("@freenetproject.org")!=std::string::npos)\r
+                       {\r
+                               (*i).erase((*i).find("@"));\r
+                       }\r
                        if((*i)!="")\r
                        {\r
                                m_inreplyto[count++]=(*i);\r
@@ -556,4 +636,6 @@ void Message::StartFreenetInsert()
        st.Bind(2,xml.GetXML());\r
        st.Step();\r
 \r
+       HandleChangeTrust();\r
+\r
 }\r