diff -r e7aa27f58ae1 -r 578830873419 ipsservices/ipssosplugin/src/ipsplgsmtpoperation.cpp --- 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 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 ); + // } } }