\r
const std::string Message::GetNNTPArticleID() const\r
{\r
- return "<"+m_messageuuid+">";\r
+ return "<"+m_messageuuid+"@freenetproject.org>";\r
}\r
\r
const std::string Message::GetNNTPBody() const\r
{\r
rval+=" ";\r
}\r
- rval+="<"+(*j).second+">";\r
+ rval+="<"+(*j).second+"@freenetproject.org>";\r
}\r
rval+="\r\n";\r
}\r
st.ResultText(7,m_fromname);\r
st.Finalize();\r
\r
+ // strip off any \r\n in subject\r
+ m_subject=StringFunctions::Replace(m_subject,"\r\n","");\r
+\r
// get board list\r
st=m_db->Prepare("SELECT tblBoard.BoardName FROM tblBoard INNER JOIN tblMessageBoard ON tblBoard.BoardID=tblMessageBoard.BoardID WHERE tblMessageBoard.MessageID=?;");\r
st.Bind(0,messageid);\r
\r
const bool Message::LoadNext(const long messageid, const long boardid)\r
{\r
- std::string sql="SELECT MessageID FROM tblMessage WHERE MessageID>?";\r
+ std::string sql="SELECT tblMessage.MessageID FROM tblMessage INNER JOIN tblMessageBoard ON tblMessage.MessageID=tblMessageBoard.MessageID WHERE tblMessage.MessageID>?";\r
if(boardid!=-1)\r
{\r
- sql+=" AND BoardID=?";\r
+ sql+=" AND tblMessageBoard.BoardID=?";\r
}\r
sql+=";";\r
\r
\r
const bool Message::LoadPrevious(const long messageid, const long boardid)\r
{\r
- std::string sql="SELECT MessageID FROM tblMessage WHERE MessageID<?";\r
+ std::string sql="SELECT tblMessage.MessageID FROM tblMessage INNER JOIN tblMessageBoard ON tblMessage.MessageID=tblMessageBoard.MessageID WHERE tblMessage.MessageID<?";\r
if(boardid!=-1)\r
{\r
- sql+=" AND BoardID=?";\r
+ sql+=" AND tblMessageBoard.BoardID=?";\r
}\r
- sql+=";";\r
+ sql+=" ORDER BY tblMessage.MessageID DESC;";\r
\r
SQLite3DB::Statement st=m_db->Prepare(sql);\r
\r
if(mime.GetFieldValue("From"))\r
{\r
m_fromname=mime.GetFieldValue("From");\r
+ // remove any path folding\r
+ m_fromname=StringFunctions::Replace(m_fromname,"\r\n","");\r
// strip off everything between () and <> and any whitespace\r
std::string::size_type startpos=m_fromname.find("(");\r
std::string::size_type endpos;\r
}\r
}\r
m_fromname=StringFunctions::TrimWhitespace(m_fromname);\r
+\r
+ // trim off " from beginning and end\r
+ if(m_fromname.size()>0 && m_fromname[0]=='\"')\r
+ {\r
+ m_fromname.erase(0,1);\r
+ }\r
+ if(m_fromname.size()>0 && m_fromname[m_fromname.size()-1]=='\"')\r
+ {\r
+ m_fromname.erase(m_fromname.size()-1,1);\r
+ }\r
+\r
+ m_fromname=StringFunctions::TrimWhitespace(m_fromname);\r
}\r
else\r
{\r
if(mime.GetFieldValue("Newsgroups"))\r
{\r
std::string temp=mime.GetFieldValue("Newsgroups");\r
+ // remove any path folding\r
+ temp=StringFunctions::Replace(temp,"\r\n","");\r
std::vector<std::string> parts;\r
StringFunctions::SplitMultiple(temp,", \t",parts);\r
for(std::vector<std::string>::iterator i=parts.begin(); i!=parts.end(); i++)\r
if(mime.GetFieldValue("Followup-To"))\r
{\r
m_replyboardname=mime.GetFieldValue("Followup-To");\r
+ // remove any path folding\r
+ m_replyboardname=StringFunctions::Replace(m_replyboardname,"\r\n","");\r
}\r
else\r
{\r
if(mime.GetFieldValue("Subject"))\r
{\r
m_subject=mime.GetFieldValue("Subject");\r
+ // remove any path folding\r
+ m_subject=StringFunctions::Replace(m_subject,"\r\n","");\r
}\r
else\r
{\r
if(mime.GetFieldValue("References"))\r
{\r
std::string temp=mime.GetFieldValue("References");\r
+ // remove any path folding\r
+ temp=StringFunctions::Replace(temp,"\r\n","");\r
std::vector<std::string> parts;\r
int count=0;\r
StringFunctions::SplitMultiple(temp,", \t",parts);\r
for(std::vector<std::string>::reverse_iterator i=parts.rbegin(); i!=parts.rend(); i++)\r
{\r
+ // get rid of < and > and any whitespace\r
(*i)=StringFunctions::Replace((*i),"<","");\r
(*i)=StringFunctions::Replace((*i),">","");\r
(*i)=StringFunctions::TrimWhitespace((*i));\r
+ // erase @ and everything after\r
+ if((*i).find("@")!=std::string::npos)\r
+ {\r
+ (*i).erase((*i).find("@"));\r
+ }\r
if((*i)!="")\r
{\r
m_inreplyto[count++]=(*i);\r