phonebookui/Phonebook2/CommandsExtension/src/CPbk2SendContactCmd.cpp
branchRCL_3
changeset 58 d4f567ce2e7c
parent 0 e686773b3f54
child 64 c1e8ba0c2b16
--- 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<MPbk2ResourceRelease *>(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