version 0.2.11
[fms.git] / src / message.cpp
index eea0633..5905021 100644 (file)
@@ -7,6 +7,10 @@
 \r
 #include <algorithm>\r
 \r
+#ifdef DO_CHARSET_CONVERSION\r
+       #include "../include/charsetconverter.h"\r
+#endif\r
+\r
 #ifdef XMEM\r
        #include <xmem.h>\r
 #endif\r
@@ -179,7 +183,8 @@ void Message::HandleAdministrationMessage()
                                        }\r
                                        else\r
                                        {\r
-                                               origmessagetrust=m_minlocalmessagetrust;\r
+                                               //origmessagetrust=m_minlocalmessagetrust;\r
+                                               origmessagetrust=50;\r
                                        }\r
                                        if(origmess.ResultNull(3)==false)\r
                                        {\r
@@ -187,7 +192,8 @@ void Message::HandleAdministrationMessage()
                                        }\r
                                        else\r
                                        {\r
-                                               origtrustlisttrust=m_minlocaltrustlisttrust;\r
+                                               //origtrustlisttrust=m_minlocaltrustlisttrust;\r
+                                               origtrustlisttrust=50;\r
                                        }\r
 \r
                                        origmessagetrust+=changemessagetrust;\r
@@ -278,7 +284,8 @@ void Message::HandleChangeTrust()
                                }\r
                                else\r
                                {\r
-                                       localmessagetrust=m_minlocalmessagetrust;\r
+                                       //localmessagetrust=m_minlocalmessagetrust;\r
+                                       localmessagetrust=50;\r
                                }\r
 \r
                                localmessagetrust+=m_changemessagetrustonreply;\r
@@ -318,6 +325,7 @@ void Message::Initialize()
        m_fromname="";\r
        m_boards.clear();\r
        m_inreplyto.clear();\r
+       m_fileattachments.clear();\r
        m_changemessagetrustonreply=0;\r
        Option::Instance()->Get("ChangeMessageTrustOnReply",tempval);\r
        StringFunctions::Convert(tempval,m_changemessagetrustonreply);\r
@@ -611,6 +619,19 @@ const bool Message::ParseNNTPMessage(const std::string &nntpmessage)
                m_subject=mime.GetFieldValue("Subject");\r
                // remove any path folding\r
                m_subject=StringFunctions::Replace(m_subject,"\r\n","");\r
+#if DO_CHARSET_CONVERSION\r
+               if(mime.GetFieldCharset("Subject"))\r
+               {\r
+                       std::string charset=mime.GetFieldCharset("Subject");\r
+                       CharsetConverter ccv;\r
+                       if(charset!="" && charset!="UTF-8" && ccv.SetConversion(charset,"UTF-8"))\r
+                       {\r
+                               std::string output="";\r
+                               ccv.Convert(m_subject,output);\r
+                               m_subject=output;\r
+                       }\r
+               }\r
+#endif\r
        }\r
        else\r
        {\r
@@ -658,7 +679,27 @@ const bool Message::ParseNNTPMessage(const std::string &nntpmessage)
        {\r
                if((*i)->IsText() && (*i)->GetContent())\r
                {\r
-                       m_body+=(char *)(*i)->GetContent();\r
+                       std::string bodypart=(char *)(*i)->GetContent();\r
+#ifdef DO_CHARSET_CONVERSION\r
+                       std::string charset=(*i)->GetCharset();\r
+                       if(charset!="" && charset!="UTF-8")\r
+                       {\r
+                               CharsetConverter ccv;\r
+                               if(ccv.SetConversion(charset,"UTF-8"))\r
+                               {\r
+                                       std::string output="";\r
+                                       ccv.Convert(bodypart,output);\r
+                                       bodypart=output;\r
+                               }\r
+                       }\r
+#endif\r
+                       m_body+=bodypart;\r
+               }\r
+               // add a binary file attachment\r
+               else if((*i)->GetName()!="" && (*i)->GetLength()>0 && (*i)->GetContent())\r
+               {\r
+                       std::vector<unsigned char> data((*i)->GetContent(),(*i)->GetContent()+(*i)->GetContentLength());\r
+                       m_fileattachments.push_back(fileattachment((*i)->GetName(),data));\r
                }\r
        }\r
 \r
@@ -689,35 +730,6 @@ const bool Message::StartFreenetInsert()
                xml.AddInReplyTo((*j).first,(*j).second);\r
        }\r
 \r
-\r
-       // find identity to insert with\r
-       /*\r
-       SQLite3DB::Statement st=m_db->Prepare("SELECT LocalIdentityID FROM tblLocalIdentity WHERE Name=?;");\r
-       st.Bind(0,m_fromname);\r
-       st.Step();\r
-\r
-       // couldn't find identity with this name - insert a new identity\r
-       if(!st.RowReturned())\r
-       {\r
-               if(m_addnewpostfromidentities==true)\r
-               {\r
-                       DateTime now;\r
-                       now.SetToGMTime();\r
-                       st=m_db->Prepare("INSERT INTO tblLocalIdentity(Name) VALUES(?);");\r
-                       st.Bind(0,m_fromname);\r
-                       st.Step(true);\r
-                       localidentityid=st.GetLastInsertRowID();\r
-               }\r
-               else\r
-               {\r
-                       return false;\r
-               }\r
-       }\r
-       else\r
-       {\r
-               st.ResultInt(0,localidentityid);\r
-       }\r
-       */\r
        localidentityid=FindLocalIdentityID(m_fromname);\r
        if(localidentityid==-1)\r
        {\r
@@ -730,6 +742,18 @@ const bool Message::StartFreenetInsert()
        st.Bind(2,xml.GetXML());\r
        st.Step();\r
 \r
+       // insert file attachments into database\r
+       st=m_db->Prepare("INSERT INTO tblFileInserts(MessageUUID,FileName,Size,Data) VALUES(?,?,?,?);");\r
+       for(std::vector<fileattachment>::iterator i=m_fileattachments.begin(); i!=m_fileattachments.end(); i++)\r
+       {\r
+               st.Bind(0,m_messageuuid);\r
+               st.Bind(1,(*i).m_filename);\r
+               st.Bind(2,(long)(*i).m_data.size());\r
+               st.Bind(3,&((*i).m_data[0]),(*i).m_data.size());\r
+               st.Step();\r
+               st.Reset();\r
+       }\r
+\r
        HandleChangeTrust();\r
 \r
        return true;\r
@@ -745,6 +769,10 @@ void Message::StripAdministrationBoards()
                st.Step();\r
                if(st.RowReturned())\r
                {\r
+                       if(m_replyboardname==(*i))\r
+                       {\r
+                               m_replyboardname="";\r
+                       }\r
                        i=m_boards.erase(i);\r
                }\r
                else\r
@@ -753,4 +781,8 @@ void Message::StripAdministrationBoards()
                }\r
                st.Reset();\r
        }\r
+       if(m_replyboardname=="" && m_boards.begin()!=m_boards.end())\r
+       {\r
+               m_replyboardname=(*m_boards.begin());\r
+       }\r
 }\r