ipsservices/ipssosplugin/src/ipsplgsmtpoperation.cpp
changeset 18 578830873419
parent 4 e7aa27f58ae1
child 20 ecc8def7944a
--- a/ipsservices/ipssosplugin/src/ipsplgsmtpoperation.cpp	Tue Feb 02 00:02:40 2010 +0200
+++ b/ipsservices/ipssosplugin/src/ipsplgsmtpoperation.cpp	Fri Apr 16 14:51:52 2010 +0300
@@ -28,13 +28,18 @@
 //
 EXPORT_C CIpsPlgSmtpOperation* CIpsPlgSmtpOperation::NewL( 
     CMsvSession& aMsvSession, 
-    TInt aPriority, TRequestStatus& 
-    aObserverRequestStatus,
-    TBool /*aUsePublishSubscribe*/ )
+    TInt aPriority,
+    TRequestStatus& aObserverRequestStatus,
+    MFSMailRequestObserver* aOperationObserver,
+    TInt aRequestId )
     {
     FUNC_LOG;
     CIpsPlgSmtpOperation* self = CIpsPlgSmtpOperation::NewLC(
-        aMsvSession, aPriority, aObserverRequestStatus, ETrue );
+        aMsvSession,
+        aPriority,
+        aObserverRequestStatus,
+        aOperationObserver,
+        aRequestId );
     CleanupStack::Pop( self );
     return self;
     }
@@ -46,11 +51,16 @@
     CMsvSession& aMsvSession, 
     TInt aPriority, 
     TRequestStatus& aObserverRequestStatus,
-    TBool /*aUsePublishSubscribe*/ )
+    MFSMailRequestObserver* aOperationObserver,
+    TInt aRequestId )
     {
     FUNC_LOG;
     CIpsPlgSmtpOperation* self = new( ELeave ) CIpsPlgSmtpOperation(
-        aMsvSession, aPriority, aObserverRequestStatus );
+        aMsvSession,
+        aPriority,
+        aObserverRequestStatus,
+        aOperationObserver,
+        aRequestId );
     CleanupStack::PushL( self );
     self->ConstructL();
     return self;
@@ -62,12 +72,16 @@
 CIpsPlgSmtpOperation::CIpsPlgSmtpOperation( 
     CMsvSession& aMsvSession, 
     TInt aPriority, 
-    TRequestStatus& aObserverRequestStatus ) :
-    CMsvOperation( aMsvSession, aPriority, aObserverRequestStatus ),
+    TRequestStatus& aObserverRequestStatus,
+    MFSMailRequestObserver* aFSOperationObserver,
+    TInt aFSRequestId ) :
+    CIpsPlgBaseOperation( aMsvSession, aPriority, aObserverRequestStatus, 
+        aFSRequestId, TFSMailMsgId() ),
     iSmtpMtm( NULL ),
     iOperation( NULL ),
     iSelection( NULL ),  
-    iMtmRegistry( NULL )
+    iMtmRegistry( NULL ),
+    iFSOperationObserver( aFSOperationObserver )
     {
     FUNC_LOG;
     }
@@ -94,32 +108,7 @@
     iSelection = new (ELeave) CMsvEntrySelection();
     CActiveScheduler::Add( this );
     }
-
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-//
-void CIpsPlgSmtpOperation::CompleteObserver( TInt aStatus /*= KErrNone*/ )
-    {
-    FUNC_LOG;
-
-    TRequestStatus* status = &iObserverRequestStatus;
-    if ( status && status->Int() == KRequestPending )
-        {
-        User::RequestComplete( status, aStatus );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-//
-void CIpsPlgSmtpOperation::CompleteThis()
-    {
-    FUNC_LOG;
-
-    TRequestStatus* status = &iStatus;
-    User::RequestComplete( status, KErrNone );
-    }
-
+    
 // ---------------------------------------------------------------------------
 // ---------------------------------------------------------------------------
 //
@@ -140,11 +129,44 @@
         TImSmtpProgress prog;
         TPckg<TImSmtpProgress> param(prog);
         param.Copy( iOperation->FinalProgress() ); 
+        
+        if ( iFSOperationObserver )
+            {
+            iFSProgress.iProgressStatus =
+                TFSProgress::EFSStatus_RequestComplete;
+            iFSProgress.iError = prog.Error();
 
-        CompleteObserver( prog.Error() );
+            TRAP_IGNORE( iFSOperationObserver->RequestResponseL(
+                iFSProgress, iFSRequestId ) );
+            }
+        TRequestStatus* status = &iObserverRequestStatus;
+        User::RequestComplete( status, prog.Error() );
         }
     }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+TInt CIpsPlgSmtpOperation::RunError( TInt aError )
+    {
+    FUNC_LOG;
+
+    if ( iFSOperationObserver )
+        {
+        iFSProgress.iProgressStatus = TFSProgress::EFSStatus_RequestComplete;
+        iFSProgress.iError = aError;
+
+        TRAP_IGNORE( iFSOperationObserver->RequestResponseL(
+			iFSProgress, iFSRequestId ) );
+        }
+
+    TRequestStatus* status = &iObserverRequestStatus;
+    User::RequestComplete( status, aError );
     
+    return KErrNone;
+    }
+
+
 // ---------------------------------------------------------------------------
 // ---------------------------------------------------------------------------
 //    
@@ -157,7 +179,12 @@
         iOperation->Cancel();
         }
 
-    CompleteObserver( KErrCancel );
+    // It is not relevant to inform FS observer. Cancelling is initiated
+    // either by the observer or the engine destructor when the application
+    // exits.
+    
+    TRequestStatus* status = &iObserverRequestStatus;
+    User::RequestComplete( status, KErrCancel );
     }
 
 // ---------------------------------------------------------------------------
@@ -175,6 +202,38 @@
     }
 
 // ---------------------------------------------------------------------------
+// CIpsPlgSmtpOperation::GetErrorProgressL
+// ---------------------------------------------------------------------------
+//   
+const TDesC8& CIpsPlgSmtpOperation::GetErrorProgressL( TInt /*aError*/ )
+    {
+    FUNC_LOG;
+    
+    return KNullDesC8; // error progress info not supported
+    }
+
+// ---------------------------------------------------------------------------
+// CIpsPlgSmtpOperation::GetFSProgressL
+// ---------------------------------------------------------------------------
+//   
+TFSProgress CIpsPlgSmtpOperation::GetFSProgressL() const
+    {
+    FUNC_LOG;
+    
+    return iFSProgress;
+    }
+
+// ---------------------------------------------------------------------------
+// CIpsPlgSmtpOperation::IpsOpType
+// ---------------------------------------------------------------------------    
+//   
+TInt CIpsPlgSmtpOperation::IpsOpType() const
+    {
+    FUNC_LOG;
+    return EIpsOpTypeSmtp;
+    }
+
+// ---------------------------------------------------------------------------
 // ---------------------------------------------------------------------------
 //       
 EXPORT_C void CIpsPlgSmtpOperation::StartSendL( TMsvId aMessageId )
@@ -295,12 +354,6 @@
         {
         CallSendL();
         }
-    else
-        {
-        // nothing to do, finish operation
-        CompleteObserver( KErrNone );
-        }
-
     return retValue;
     }
 
@@ -393,10 +446,10 @@
             fullName.Set( aRecipients[i].Mid( start, ( end - start ) ) );
             }
         // make basic sanity checks for email address
-        if( !IpsSetUtils::IsValidEmailAddressL( fullName ) )
-            {
-            User::Leave( KErrBadName );
-            }
+        //if( !IpsSetUtils::IsValidEmailAddressL( fullName ) )
+        //    {
+        //    User::Leave( KErrBadName );
+        //    }
         }
     }