diff -r bf7eb7911fc5 -r 997a02608b3a emailservices/emailstore/base_plugin/src/baseplugindelayedops.cpp --- 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& 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( 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; }