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

Reply via email to