diff -r 2666d9724c76 -r d4f567ce2e7c phonebookui/Phonebook2/CommandsExtension/src/CPbk2SendContactCmd.cpp --- a/phonebookui/Phonebook2/CommandsExtension/src/CPbk2SendContactCmd.cpp Thu Jul 15 18:22:55 2010 +0300 +++ b/phonebookui/Phonebook2/CommandsExtension/src/CPbk2SendContactCmd.cpp Thu Aug 19 09:41:07 2010 +0300 @@ -369,6 +369,7 @@ iUiControl->RegisterCommand( NULL ); } + delete iWaiter; delete iSelectedContacts; delete iConverter; delete iVCardSender; @@ -546,6 +547,25 @@ ProcessDone( KErrCancel ); break; } + case EReleaseResource: + { + CPbk2AttachmentFileArray& fileArray = iConverter->AttachmentFileArray(); + TInt count = fileArray.Count(); + TInt deleteIndex = count -1; + CPbk2AttachmentFile * file = fileArray.At(deleteIndex); + fileArray.Delete(deleteIndex); + delete file; + + if ( count > 1) + { + IssueRequest(); + } + else + { + iWaiter->AsyncStop(); + } + break; + } } } @@ -555,6 +575,9 @@ // TInt CPbk2SendContactCmd::RunError(TInt aError) { + if( iWaiter && iWaiter->IsStarted() ) + iWaiter->AsyncStop(); + return FilterErrors(aError); } @@ -564,6 +587,9 @@ // void CPbk2SendContactCmd::DoCancel() { + if( iWaiter && iWaiter->IsStarted() ) + iWaiter->AsyncStop(); + delete iRetrieveOperation; iRetrieveOperation = NULL; } @@ -1259,4 +1285,51 @@ return result; } +// -------------------------------------------------------------------------- +// CPbk2SendContactCmd::CommandExtension +// -------------------------------------------------------------------------- +// +TAny* CPbk2SendContactCmd::CommandExtension(TUid aExtensionUid ) + { + if( aExtensionUid == TUid::Uid(MPbk2ResourceReleaseUID) ) + { + return static_cast(this); + } + else + { + return NULL; + } + } + +// -------------------------------------------------------------------------- +// CPbk2SendContactCmd::ReleaseResource +// -------------------------------------------------------------------------- +// +void CPbk2SendContactCmd::ReleaseResource() + { + Cancel(); + if (iConverter) + { + iConverter->Cancel(); + CPbk2AttachmentFileArray& fileArray = iConverter->AttachmentFileArray(); + if (fileArray.Count() > 0) + { + if ( !iWaiter ) + { + TInt err( KErrNone ); + TRAP( err,iWaiter = new (ELeave) CActiveSchedulerWait()); + if ( err != KErrNone ) + { + fileArray.ResetAndDestroy(); + return; + } + } + + iState = EReleaseResource; + IssueRequest(); + iWaiter->Start(); + } + } + } + // End of File