[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    branches/KDE/3.5/kdepim/kmail
From:       David Faure <faure () kde ! org>
Date:       2007-02-23 9:03:19
Message-ID: 1172221399.338217.24956.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 636466 by dfaure:

Less parsing when copying a message (-> faster). As discussed with Ingo.
This is part 3/3 of the fixes for kolab issue1222.


 M  +2 -4      kmcommands.cpp  
 M  +2 -2      kmfilteraction.cpp  
 M  +15 -29    kmmessage.cpp  
 M  +2 -2      kmmessage.h  


--- branches/KDE/3.5/kdepim/kmail/kmcommands.cpp #636465:636466
@@ -690,9 +690,8 @@
     return Failed;
 
   // Take a copy of the original message, which remains unchanged.
-  KMMessage *newMsg = new KMMessage;
+  KMMessage *newMsg = new KMMessage( new DwMessage( *msg->asDwMessage() ) );
   newMsg->setComplete( msg->isComplete() );
-  newMsg->fromDwString( msg->asDwString() );
 
   KMail::Composer *win = KMail::makeComposer();
   newMsg->setTransferInProgress( false ); // From here on on, the composer owns the message.
@@ -1914,12 +1913,11 @@
       // imap => imap with same account
       list.append(msg);
     } else {
-      newMsg = new KMMessage;
+      newMsg = new KMMessage( new DwMessage( *msg->asDwMessage() ) );
       newMsg->setComplete(msg->isComplete());
       // make sure the attachment state is only calculated when it's complete
       if (!newMsg->isComplete())
         newMsg->setReadyToShow(false);
-      newMsg->fromDwString(msg->asDwString());
       newMsg->setStatus(msg->status());
 
       if (srcFolder && !newMsg->isComplete())
--- branches/KDE/3.5/kdepim/kmail/kmfilteraction.cpp #636465:636466
@@ -22,6 +22,7 @@
 #include <libkdepim/kfileio.h>
 #include <libkdepim/collectingprocess.h>
 using KPIM::CollectingProcess;
+#include <mimelib/message.h>
 #include "kmfawidgets.h"
 #include "folderrequester.h"
 using KMail::FolderRequester;
@@ -1381,8 +1382,7 @@
     return ErrorButGoOn;
 
   // copy the message 1:1
-  KMMessage* msgCopy = new KMMessage;
-  msgCopy->fromDwString(msg->asDwString());
+  KMMessage* msgCopy = new KMMessage( new DwMessage( *msg->asDwMessage() ) );
 
   int index;
   int rc = mFolder->addMsg(msgCopy, &index);
--- branches/KDE/3.5/kdepim/kmail/kmmessage.cpp #636465:636466
@@ -88,21 +88,11 @@
 
 //-----------------------------------------------------------------------------
 KMMessage::KMMessage(DwMessage* aMsg)
-  : KMMsgBase(),
-    mMsg(aMsg),
-    mNeedsAssembly(true),
-    mDecodeHTML(false),
-    mOverrideCodec(0),
-    mFolderOffset( 0 ),
-    mMsgSize(0),
-    mMsgLength( 0 ),
-    mDate( 0 ),
-    mEncryptionState( KMMsgEncryptionStateUnknown ),
-    mSignatureState( KMMsgSignatureStateUnknown ),
-    mMDNSentState( KMMsgMDNStateUnknown ),
-    mUnencryptedMsg(0),
-    mLastUpdated( 0 )
+  : KMMsgBase()
 {
+  init( aMsg );
+  // aMsg might need assembly
+  mNeedsAssembly = true;
 }
 
 //-----------------------------------------------------------------------------
@@ -139,10 +129,14 @@
   assign( other );
 }
 
-void KMMessage::init()
+void KMMessage::init( DwMessage* aMsg )
 {
   mNeedsAssembly = false;
+  if ( aMsg ) {
+    mMsg = aMsg;
+  } else {
   mMsg = new DwMessage;
+  }
   mOverrideCodec = 0;
   mDecodeHTML = false;
   mComplete = true;
@@ -295,7 +289,7 @@
 }
 
 //-----------------------------------------------------------------------------
-const DwMessage *KMMessage::asDwMessage()
+const DwMessage* KMMessage::asDwMessage()
 {
   if (mNeedsAssembly)
   {
@@ -313,11 +307,7 @@
 
 QByteArray KMMessage::asSendableString() const
 {
-  KMMessage msg;
-  // Much faster than msg.fromDwString(asDwString()):
-  delete msg.mMsg;
-  msg.mMsg = new DwMessage( *mMsg );
-
+  KMMessage msg( new DwMessage( *this->mMsg ) );
   msg.removePrivateHeaderFields();
   msg.removeHeaderField("Bcc");
   return KMail::Util::ByteArray( msg.asDwString() ); // and another copy again!
@@ -325,10 +315,7 @@
 
 QCString KMMessage::headerAsSendableString() const
 {
-  KMMessage msg;
-  // Much faster than msg.fromDwString(asDwString()):
-  delete msg.mMsg;
-  msg.mMsg = new DwMessage( *mMsg );
+  KMMessage msg( new DwMessage( *this->mMsg ) );
   msg.removePrivateHeaderFields();
   msg.removeHeaderField("Bcc");
   return msg.headerAsString().latin1();
@@ -1111,12 +1098,10 @@
 
 KMMessage* KMMessage::createRedirect( const QString &toStr )
 {
-  KMMessage* msg = new KMMessage;
+  // copy the message 1:1
+  KMMessage* msg = new KMMessage( new DwMessage( *this->mMsg ) );
   KMMessagePart msgPart;
 
-  // copy the message 1:1
-  msg->fromDwString(this->asDwString());
-
   uint id = 0;
   QString strId = msg->headerField( "X-KMail-Identity" ).stripWhiteSpace();
   if ( !strId.isEmpty())
@@ -1201,6 +1186,7 @@
   // preserved
   if ( type() == DwMime::kTypeMultipart ||
      ( type() == DwMime::kTypeText && subtype() == DwMime::kSubtypePlain ) ) {
+    // ## slow, we could probably use: delete msg->mMsg; msg->mMsg = new DwMessage( this->mMsg );
     msg->fromDwString( this->asDwString() );
     // remember the type and subtype, initFromMessage sets the contents type to
     // text/plain, via initHeader, for unclear reasons
--- branches/KDE/3.5/kdepim/kmail/kmmessage.h #636465:636466
@@ -208,7 +208,7 @@
   /** Parse the string and create this message from it. */
   void fromDwString(const DwString& str, bool setStatus=FALSE);
   void fromString(const QCString& str, bool setStatus=FALSE);
-  void fromByteArray( const QByteArray & ba, bool setStatus=false );
+  void fromByteArray(const QByteArray & ba, bool setStatus=false);
 
   /** Return the entire message contents in the DwString. This function
       is *fast* even for large message since it does *not* involve a
@@ -858,7 +858,7 @@
 private:
 
   /** Initialization shared by the ctors. */
-  void init();
+  void init( DwMessage* aMsg = 0 );
   /** Assign the values of @param other to this message. Used in the copy c'tor. */
   void assign( const KMMessage& other );
 
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic