emailservices/emailstore/base_plugin/src/baseplugindelayedops.cpp
changeset 54 997a02608b3a
parent 30 759dc5235cdb
child 59 16ed8d08d0b1
--- a/emailservices/emailstore/base_plugin/src/baseplugindelayedops.cpp	Wed Jun 23 18:00:21 2010 +0300
+++ b/emailservices/emailstore/base_plugin/src/baseplugindelayedops.cpp	Tue Jul 06 14:04:34 2010 +0300
@@ -72,6 +72,16 @@
     
     //self-destroy.
     iManager->DequeueOp( *this );
+    
+    //Remove this from iDelayedOpReqs as well.
+    for ( TInt i = 0; i < iPlugin->iDelayedOpReqs.Count(); i++ )
+        {
+        if ( iPlugin->iDelayedOpReqs[i] == this )
+            {
+            iPlugin->iDelayedOpReqs.Remove( i );
+            break;
+            }
+        }
     delete this;
     }
     
@@ -613,10 +623,12 @@
     MFSMailRequestObserver& aOperationObserver,
     const TInt aRequestId)
     : iMailBox( aMailBox ), 
-      iOperationObserver( aOperationObserver ),
-      iRequestId( aRequestId ),
       iType(EHeaders)
     {
+    
+    CDelayedOp::iOperationObserver = &aOperationObserver ;
+    CDelayedOp::iRequestId =  aRequestId ;
+       
     for(TInt i=0; i < messages.Count(); i++)
         {
         iMessages.Append(messages[i]);
@@ -630,10 +642,12 @@
     RPointerArray<CFSMailMessagePart>& aMessageParts,
     MFSMailRequestObserver& aOperationObserver,
     const TInt aRequestId)
-    :iOperationObserver( aOperationObserver ),
-    iRequestId( aRequestId ),
-    iType(EParts)
+    :iType(EParts)
     {
+    
+    CDelayedOp::iOperationObserver = &aOperationObserver ;
+    CDelayedOp::iRequestId =  aRequestId ;
+    
     for(TInt i=0; i < aMessageParts.Count(); i++)
         {
         iMessageParts.Append(aMessageParts[i]);
@@ -704,8 +718,12 @@
         progress.iError = KErrNone;
         progress.iProgressStatus = TFSProgress::EFSStatus_RequestComplete;
         }
-
-    iOperationObserver.RequestResponseL( progress, iRequestId );
+		
+		if(iOperationObserver)
+			{
+				iOperationObserver->RequestResponseL( progress, iRequestId );
+			}
+    
     
     __LOG_EXIT;
     }
@@ -714,35 +732,39 @@
 /**
  * 
  */
-void CDelayedMessageStorerOp::StorePartL(
-        CFSMailMessagePart* aPart)
+void CDelayedMessageStorerOp::StorePartL(CFSMailMessagePart* aPart)
     {
     User::LeaveIfNull(aPart);
-    
+
     // Text buffer for html text content
     HBufC* data16 = aPart->GetLocalTextContentLC();
 
-    TPtrC8 ptr8(reinterpret_cast<const TUint8*>( data16->Ptr() ),
-            data16->Size() );
-    
+    // Convert from 16 to 8 bit data -
+    HBufC8* dataBuffer = HBufC8::NewLC((data16->Length() * 2) + 1);
+    TPtr8 ptr8(dataBuffer->Des());
+    CnvUtfConverter::ConvertFromUnicodeToUtf8(ptr8, *data16);
+
     //get msgstore part
-    CMailboxInfo& mailBox = GetPlugin().GetMailboxInfoL( aPart->GetMailBoxId().Id() );
-    
+    CMailboxInfo& mailBox = GetPlugin().GetMailboxInfoL(
+            aPart->GetMailBoxId().Id());
+
     CMsgStoreMessage* msg = mailBox().FetchMessageL(
-            aPart->GetMessageId().Id(), KMsgStoreInvalidId );
-    CleanupStack::PushL( msg );
-    
-    CMsgStoreMessagePart* part= msg->ChildPartL( aPart->GetPartId().Id(), ETrue );
-    
-    CleanupStack::PopAndDestroy( msg );
-    CleanupStack::PushL( part );
+            aPart->GetMessageId().Id(), KMsgStoreInvalidId);
+    CleanupStack::PushL(msg);
+
+    CMsgStoreMessagePart* part = msg->ChildPartL(aPart->GetPartId().Id(),
+            ETrue);
+
+    CleanupStack::PopAndDestroy(msg);
+    CleanupStack::PushL(part);
 
     //replace content
     part->ReplaceContentL(ptr8);
-    
-    CleanupStack::PopAndDestroy( part );
-    CleanupStack::PopAndDestroy( data16 );
-       
+
+    CleanupStack::PopAndDestroy(part);
+    CleanupStack::PopAndDestroy(dataBuffer);
+    CleanupStack::PopAndDestroy(data16);
+
     }
 
 
@@ -794,10 +816,11 @@
     MFSMailRequestObserver& aOperationObserver,
     const TInt aRequestId)
     : iBasePlugin(aPlugin), 
-      iMailBox( aMailBox ), 
-      iOperationObserver( aOperationObserver ),
-      iRequestId( aRequestId )
+      iMailBox( aMailBox )
     {
+    
+    CDelayedOp::iOperationObserver = &aOperationObserver ;
+    CDelayedOp::iRequestId =  aRequestId ;
 
     }
 
@@ -821,7 +844,10 @@
         progress.iProgressStatus = TFSProgress::EFSStatus_RequestComplete;
         }
 
-    iOperationObserver.RequestResponseL( progress, iRequestId );
+		if(iOperationObserver)
+			{
+				iOperationObserver->RequestResponseL( progress, iRequestId );
+			}
     
     __LOG_EXIT;
     }
@@ -885,10 +911,10 @@
     iParentFolderId( aParentFolderId ),
     iMessageId( aMessageId ),
     iParentPartId( aParentPartId ),
-    iOperationObserver( aOperationObserver ),
-    iRequestId( aRequestId ),
     iActionType( AddNewChild)
     {
+    CDelayedOp::iOperationObserver = &aOperationObserver ;
+    CDelayedOp::iRequestId =  aRequestId ;
     }
 
 /**
@@ -907,10 +933,10 @@
     iMessageId( aMessageId ),
     iParentPartId( aParentPartId ),
     iPartId( aPartId ),
-    iOperationObserver( aOperationObserver ),
-    iRequestId( aRequestId ),
     iActionType( RemoveChild)
     {
+    CDelayedOp::iOperationObserver = &aOperationObserver ;
+    CDelayedOp::iRequestId =  aRequestId ;
     }
 
 /**
@@ -978,7 +1004,10 @@
         progress.iProgressStatus = TFSProgress::EFSStatus_RequestComplete;
         }
 		
-    iOperationObserver.RequestResponseL( progress, iRequestId );
+		if(iOperationObserver)
+			{
+				iOperationObserver->RequestResponseL( progress, iRequestId );
+			}
     
     __LOG_EXIT;
     }