Update of /cvsroot/mahogany/M/src/mail
In directory usw-pr-cvs1:/tmp/cvs-serv11528/src/mail
Modified Files:
MessageCC.cpp SendMessageCC.cpp
Log Message:
implemented message editing/postponing and the drafts folder - all very rough
but seems to sort of work
Index: MessageCC.cpp
===================================================================
RCS file: /cvsroot/mahogany/M/src/mail/MessageCC.cpp,v
retrieving revision 1.125
retrieving revision 1.126
diff -b -u -2 -r1.125 -r1.126
--- MessageCC.cpp 13 Mar 2002 14:44:45 -0000 1.125
+++ MessageCC.cpp 16 Mar 2002 23:38:48 -0000 1.126
@@ -54,9 +54,13 @@
// ----------------------------------------------------------------------------
-// constants
+// private functions
// ----------------------------------------------------------------------------
-/// temporary buffer for storing message headers, be generous:
-#define HEADERBUFFERSIZE 100*1024
+/**
+ Parse (partial) message header extracting the names and values of each
+ header in it. Returns the number of (valid) headers found.
+ */
+static size_t ParseHeader(const char *hdr,
+ wxArrayString& names, wxArrayString& values);
// ----------------------------------------------------------------------------
@@ -483,4 +487,16 @@
}
+size_t
+MessageCC::GetAllHeaders(wxArrayString *names, wxArrayString *values) const
+{
+ CHECK( names && values, 0, "NULL pointer in MessageCC::GetAllHeaders" );
+
+ String hdr = GetHeader();
+ if ( hdr.empty() )
+ return 0;
+
+ return ParseHeader(hdr, *names, *values);
+}
+
wxArrayString
MessageCC::GetHeaderLines(const char **headersOrig,
@@ -524,5 +540,4 @@
mail_free_stringlist(&slist);
- // now extract the headers values
if ( rc )
{
@@ -533,7 +548,50 @@
wxArrayString valuesInDisorder;
+ // now extract the headers values
+ ParseHeader(rc, names, valuesInDisorder);
+
+ // and finally copy the headers in order into the dst array
+ wxFontEncoding encoding;
+ headers = headersOrig;
+ while ( *headers )
+ {
+ int n = names.Index(*headers, FALSE /* not case sensitive */);
+ if ( n != wxNOT_FOUND )
+ {
+ values.Add(MailFolderCC::DecodeHeader(valuesInDisorder[(size_t)n],
+ &encoding));
+ }
+ else // no such header
+ {
+ values.Add("");
+ encoding = wxFONTENCODING_SYSTEM;
+ }
+
+ if ( encodings )
+ {
+ encodings->Add(encoding);
+ }
+
+ headers++;
+ }
+ }
+ else // mail_fetchheader_full() failed
+ {
+ wxLogError(_("Failed to retrieve headers of the message from '%s'."),
+ m_folder->GetName().c_str());
+ }
+
+ return values;
+}
+
+static
+size_t ParseHeader(const char *hdr, wxArrayString& names, wxArrayString& values)
+{
String s;
s.reserve(1024);
+ // number of headers so far
+ size_t numHeaders = 0;
+
// we are first looking for the name (before ':') and the value (after)
bool inName = true;
@@ -541,5 +599,5 @@
// note that we can stop when *pc == 0 as the header must be terminated
// by "\r\n" preceding it anyhow
- for ( const char *pc = rc; *pc ; pc++ )
+ for ( const char *pc = hdr; *pc ; pc++ )
{
switch ( *pc )
@@ -585,5 +643,5 @@
if ( pc[1] != ' ' && pc[1] != '\t' )
{
- valuesInDisorder.Add(s);
+ values.Add(s);
inName = true;
@@ -614,4 +672,6 @@
}
+ numHeaders++;
+
s.clear();
@@ -627,36 +687,13 @@
}
- // and finally copy the headers in order into the dst array
- wxFontEncoding encoding;
- headers = headersOrig;
- while ( *headers )
- {
- int n = names.Index(*headers, FALSE /* not case sensitive */);
- if ( n != wxNOT_FOUND )
+ if ( !inName )
{
- values.Add(MailFolderCC::DecodeHeader(valuesInDisorder[(size_t)n],
- &encoding));
- }
- else // no such header
- {
- values.Add("");
- encoding = wxFONTENCODING_SYSTEM;
- }
-
- if ( encodings )
- {
- encodings->Add(encoding);
- }
+ // make values and names arrays always of the same size
+ wxLogDebug("Last header didn't have a valid value!");
- headers++;
- }
- }
- else // mail_fetchheader_full() failed
- {
- wxLogError(_("Failed to retrieve headers of the message from '%s'."),
- m_folder->GetName().c_str());
+ values.Add("");
}
- return values;
+ return numHeaders;
}
Index: SendMessageCC.cpp
===================================================================
RCS file: /cvsroot/mahogany/M/src/mail/SendMessageCC.cpp,v
retrieving revision 1.180
retrieving revision 1.181
diff -b -u -2 -r1.180 -r1.181
--- SendMessageCC.cpp 15 Mar 2002 22:29:37 -0000 1.180
+++ SendMessageCC.cpp 16 Mar 2002 23:38:48 -0000 1.181
@@ -808,5 +808,5 @@
for ( i = m_extraHeaders.begin(); i != m_extraHeaders.end(); ++i )
{
- if ( i->m_name == name )
+ if ( wxStricmp(i->m_name, name) == 0 )
break;
}
@@ -839,9 +839,9 @@
SendMessageCC::AddHeaderEntry(const String& nameIn, const String& value)
{
- String name = nameIn;
+ String name = nameIn.Upper();
strutil_delwhitespace(name);
- if (name == "To")
+ if (name == "TO")
; //TODO: Fix this?SetAddresses(*value);
else if(name == "CC")
@@ -849,8 +849,8 @@
else if(name == "BCC")
; //SetAddresses("","",*value);
- else if ( name == "MIME-Version" ||
- name == "Content-Type" ||
- name == "Content-Disposition" ||
- name == "Content-Transfer-Encoding" )
+ else if ( name == "MIME-VERSION" ||
+ name == "CONTENT-TYPE" ||
+ name == "CONTENT-DISPOSITION" ||
+ name == "CONTENT-TRANSFER-ENCODING" )
{
ERRORMESSAGE((_("The value of the header '%s' cannot be modified."),
@@ -859,5 +859,5 @@
return;
}
- else if ( name == "Subject" )
+ else if ( name == "SUBJECT" )
{
SetSubject(value);
@@ -873,5 +873,5 @@
else // add a new header entry
{
- m_extraHeaders.push_back(new MessageHeader(name, value));
+ m_extraHeaders.push_back(new MessageHeader(nameIn, value));
}
}
@@ -950,7 +950,7 @@
{
m_headerNames[h] = strutil_strdup(i->m_name);
- if ( strcmp(m_headerNames[h], "Reply-To") == 0 )
+ if ( wxStricmp(m_headerNames[h], "Reply-To") == 0 )
replyToSet = true;
- else if ( strcmp(m_headerNames[h], "X-Mailer") == 0 )
+ else if ( wxStricmp(m_headerNames[h], "X-Mailer") == 0 )
xmailerSet = true;
@@ -1607,5 +1607,5 @@
}
-void
+bool
SendMessageCC::WriteToString(String& output)
{
@@ -1616,5 +1616,9 @@
{
ERRORMESSAGE (("Can't write message to string."));
+
+ return false;
}
+
+ return true;
}
@@ -1622,5 +1626,5 @@
@param filename file where to write to
*/
-void
+bool
SendMessageCC::WriteToFile(const String &filename, bool append)
{
@@ -1637,7 +1641,9 @@
filename.c_str()));
}
+
+ return ok;
}
-void
+bool
SendMessageCC::WriteToFolder(String const &name)
{
@@ -1647,20 +1653,22 @@
ERRORMESSAGE((_("Can't save sent message in the folder '%s' "
"which doesn't exist."), name.c_str()));
- return;
+ return false;
}
- MailFolder *mf = MailFolder::OpenFolder(folder);
+ MailFolder_obj mf = MailFolder::OpenFolder(folder);
if ( !mf )
{
ERRORMESSAGE((_("Can't open folder '%s' to save the message to."),
name.c_str()));
- return;
+ return false;
}
String str;
- WriteToString(str);
+ if ( !WriteToString(str) )
+ return false;
mf->AppendMessage(str);
- mf->DecRef();
+
+ return true;
}
_______________________________________________
Mahogany-cvsupdates mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/mahogany-cvsupdates