ipsservices/ipssosplugin/src/ipsplgdeleteoperation.cpp
changeset 43 99bcbff212ad
parent 23 2dc6caa42ec3
--- a/ipsservices/ipssosplugin/src/ipsplgdeleteoperation.cpp	Mon May 24 21:02:02 2010 +0300
+++ b/ipsservices/ipssosplugin/src/ipsplgdeleteoperation.cpp	Fri May 28 13:56:43 2010 +0300
@@ -41,6 +41,8 @@
         aMsvSession, 
         CActive::EPriorityStandard, 
         aObserverRequestStatus),
+    iOperationObserver(NULL),
+    iFSRequestId(KErrNotFound),
     iState( ESetFlags ) // <qmail>
     //</qmail> iBlank removed    
     {
@@ -49,6 +51,30 @@
     }
 //</qmail>
 
+// ----------------------------------------------------------------------------
+// CIpsPlgDeleteOperation::CIpsPlgDeleteOperation
+// ----------------------------------------------------------------------------
+//
+//<qmail>
+CIpsPlgDeleteOperation::CIpsPlgDeleteOperation(
+    CMsvSession& aMsvSession,
+    TRequestStatus& aObserverRequestStatus,
+    MFSMailRequestObserver& aOperationObserver,
+    const TInt aRequestId)
+    :
+    CMsvOperation( 
+        aMsvSession, 
+        CActive::EPriorityStandard, 
+        aObserverRequestStatus),
+    iOperationObserver(&aOperationObserver),
+    iFSRequestId(aRequestId),
+    iState( ESetFlags )
+    {
+    FUNC_LOG;
+    CActiveScheduler::Add(this);
+    }
+//</qmail>
+
 
 // ----------------------------------------------------------------------------
 // CIpsPlgDeleteOperation::ConstructL
@@ -115,6 +141,28 @@
     return self;
     }
 
+// <qmail>
+// ----------------------------------------------------------------------------
+// CIpsPlgDeleteOperation::NewL
+// ----------------------------------------------------------------------------
+//
+CIpsPlgDeleteOperation* CIpsPlgDeleteOperation::NewL(
+    CMsvSession& aMsvSession,
+    TRequestStatus& aObserverRequestStatus,
+    CMsvEntrySelection* aEntriesToDelete,
+    MFSMailRequestObserver& aOperationObserver,
+    const TInt aRequestId)
+    {
+    FUNC_LOG;
+    CIpsPlgDeleteOperation* self=new (ELeave) CIpsPlgDeleteOperation(
+        aMsvSession, aObserverRequestStatus, aOperationObserver, aRequestId );
+    CleanupStack::PushL(self);
+    self->ConstructL( aEntriesToDelete );
+    CleanupStack::Pop( self ); 
+    return self;
+    }
+// </qmail>
+
 // ----------------------------------------------------------------------------
 // CIpsPlgDeleteOperation::~CIpsPlgDeleteOperation
 // ----------------------------------------------------------------------------
@@ -161,6 +209,7 @@
     if ( iStatus.Int() != KErrNone )
         {
         // something failed, just complete
+        SignalFSObserver(iStatus.Int());
         TRequestStatus* status = &iObserverRequestStatus;
         User::RequestComplete(status, iStatus.Int());
         return;
@@ -177,6 +226,7 @@
         
         if ( err != KErrNone )
             {
+            SignalFSObserver(err);
             TRequestStatus* status = &iObserverRequestStatus;
             User::RequestComplete(status, iStatus.Int());
             }
@@ -198,6 +248,8 @@
         }
     else
         {
+        // Inform observer
+        SignalFSObserver(iStatus.Int());
         // nothing left to process, so complete the observer
         TRequestStatus* status = &iObserverRequestStatus;
         User::RequestComplete(status, iStatus.Int());
@@ -244,6 +296,7 @@
     // if error then complete this pass with the error code
     if ( err )
         {
+        SignalFSObserver(err);
         TRequestStatus* status = &iStatus;
         User::RequestComplete(status, err);
         }
@@ -279,6 +332,7 @@
     // if error then complete this pass with the error code
     if ( err )
         {
+        SignalFSObserver(err);
         TRequestStatus* status = &iStatus;
         User::RequestComplete( status, err );
         }
@@ -335,7 +389,25 @@
     
     return ret;
     }
-// </qmail>    
+// </qmail>
+
+//<qmail> 
+// ----------------------------------------------------------------------------
+// CIpsPlgDeleteOperation::SignalFSObserver
+// ----------------------------------------------------------------------------
+//
+void CIpsPlgDeleteOperation::SignalFSObserver(TInt aStatus)
+    {
+    if (iOperationObserver)
+        {
+        iFSProgress.iProgressStatus = TFSProgress::EFSStatus_RequestComplete;
+        iFSProgress.iError = aStatus;
+        iFSProgress.iParam = NULL;
+    
+        TRAP_IGNORE( iOperationObserver->RequestResponseL( iFSProgress, iFSRequestId ) );
+        }
+    }
+// </qmail>
 
 //  End of File