diff -r d189ee25cf9d -r 3533d4323edc meetingrequest/mricalviewer/src/cesmricalvieweropenmrcmd.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/meetingrequest/mricalviewer/src/cesmricalvieweropenmrcmd.cpp Wed Sep 01 12:28:57 2010 +0100 @@ -0,0 +1,426 @@ +/* +* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Open meeting request command implementation +* +*/ + + +// INCLUDE FILES +#include "emailtrace.h" +#include "cesmricalvieweropenmrcmd.h" +#include "cesmricalviewerloadmrdatacmd.h" +#include "cesmricalvieweremailasynccmd.h" +#include "cesmricalvieweremailsynccmd.h" +#include "cesmruilauncher.h" +#include "cmrattachmentinfofetcher.h" +#include "esmricalviewerutils.h" + +// +#include "esmricalvieweropcodes.hrh" +// +#include + +// ======== MEMBER FUNCTIONS ======== +// ----------------------------------------------------------------------------- +// CESMRIcalViewerOpenMRCmd::CESMRIcalViewerOpenMRCmd +// ----------------------------------------------------------------------------- +// +CESMRIcalViewerOpenMRCmd::CESMRIcalViewerOpenMRCmd( + MESMRIcalViewerCallback& aCallback, + CFSMailClient& aMailClient, + CCalSession& aCalSession ) +: CESMRIcalViewerAsyncCommand( EESMRViewLaunch, aCalSession ), + iCallback( aCallback ), + iMailClient( aMailClient ), + iCurrentCbCommand( EESMREmailCommand ) + { + FUNC_LOG; + iResult.iResultCode = KErrNone; + iResult.iOpType = OperationType(); + } + +// ----------------------------------------------------------------------------- +// CESMRIcalViewerOpenMRCmd::CESMRIcalViewerOpenMRCmd +// ----------------------------------------------------------------------------- +// +CESMRIcalViewerOpenMRCmd::~CESMRIcalViewerOpenMRCmd() + { + FUNC_LOG; + CancelCommand(); + delete iLoadMRDataCmd; + delete iUILauncher; + delete iAttachmentInfoFetcher; + + if( iEmailCommand ) + { + delete iEmailCommand; + iEmailCommand = NULL; + } + } + +// ----------------------------------------------------------------------------- +// CESMRIcalViewerOpenMRCmd::CESMRIcalViewerOpenMRCmd +// ----------------------------------------------------------------------------- +// +CESMRIcalViewerOpenMRCmd* CESMRIcalViewerOpenMRCmd::NewL( + MESMRIcalViewerCallback& aCallback, + CFSMailClient& aMailClient, + CCalSession& aCalSession ) + { + FUNC_LOG; + CESMRIcalViewerOpenMRCmd* self = + new (ELeave) CESMRIcalViewerOpenMRCmd( + aCallback, + aMailClient, + aCalSession ); + + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CESMRIcalViewerOpenMRCmd::CESMRIcalViewerOpenMRCmd +// ----------------------------------------------------------------------------- +// +void CESMRIcalViewerOpenMRCmd::ConstructL() + { + FUNC_LOG; + BaseConstructL(); + } + +// ----------------------------------------------------------------------------- +// CESMRIcalViewerOpenMRCmd::CESMRIcalViewerOpenMRCmd +// ----------------------------------------------------------------------------- +// +void CESMRIcalViewerOpenMRCmd::ExecuteAsyncCommandL() + { + FUNC_LOG; + iResult.iOpType = OperationType(); + iResult.iMessage = Message(); + iResult.iResultCode = KErrNone; + + iLoadMRDataCmd = + CESMRIcalViewerLoadMRDataCmd::NewL( + CalSession(), + iMailClient, + iInputParameters ); + + iLoadMRDataCmd->ExecuteCommandL( *Message(), *this ); + } + +// ----------------------------------------------------------------------------- +// CESMRIcalViewerOpenMRCmd::CESMRIcalViewerOpenMRCmd +// ----------------------------------------------------------------------------- +// +void CESMRIcalViewerOpenMRCmd::CancelAsyncCommand() + { + FUNC_LOG; + if ( iLoadMRDataCmd ) + { + iLoadMRDataCmd->CancelCommand(); + } + } + +// ----------------------------------------------------------------------------- +// CESMRIcalViewerOpenMRCmd::CESMRIcalViewerOpenMRCmd +// ----------------------------------------------------------------------------- +// +void CESMRIcalViewerOpenMRCmd::OperationCompleted( + MESMRIcalViewerObserver::TIcalViewerOperationResult aResult ) + { + FUNC_LOG; + TRAPD( err, HandleOperationCompeletedL( aResult ) ); + HandleError( err ); + } + +// ----------------------------------------------------------------------------- +// CESMRIcalViewerOpenMRCmd::CESMRIcalViewerOpenMRCmd +// ----------------------------------------------------------------------------- +// +void CESMRIcalViewerOpenMRCmd::OperationError( + MESMRIcalViewerObserver::TIcalViewerOperationResult aResult ) + { + FUNC_LOG; + iResult = aResult; + iResult.iOpType = OperationType(); + + if ( EESMRLaunchUI == aResult.iOpType ) + { + delete iUILauncher; + iUILauncher = NULL; + } + if ( !iUILauncher && + EESMREmailCommand == iCurrentCbCommand && + KErrCancel == aResult.iResultCode ) + { + // We would like to launch mr again + iInputParameters.iMailClient = &iMailClient; + iInputParameters.iMailMessage = Message(); + iInputParameters.iCommand = EESMRCmdUndefined; + iInputParameters.iSpare = 0; + TRAPD( err, LaunchUIL() ); + iResult.iResultCode = err; + + if ( err != KErrNone ) + { + Observer()->OperationError( iResult ); + } + } + else + { + Observer()->OperationError( iResult ); + } + } + +// ----------------------------------------------------------------------------- +// CESMRIcalViewerOpenMRCmd::ProcessCommandL +// ----------------------------------------------------------------------------- +// +void CESMRIcalViewerOpenMRCmd::ProcessCommandL(TInt aCommandId) + { + FUNC_LOG; + ProcessCommandWithResultL( aCommandId ); + } + +// ----------------------------------------------------------------------------- +// CESMRIcalViewerOpenMRCmd::ProcessCommandWithResultL +// ----------------------------------------------------------------------------- +// +TInt CESMRIcalViewerOpenMRCmd::ProcessCommandWithResultL( TInt aCommandId ) + { + FUNC_LOG; + + TInt retValue( KErrNotSupported ); + + if ( IsCommandAvailable( aCommandId ) ) + { + iMRViewerCommand = aCommandId; + + iCurrentCbCommand = + ESMRIcalViewerUtils::EmailOperation(aCommandId); + + TBool asyncCommand( + ESMRIcalViewerUtils::IsAsyncEmailCommand( iCurrentCbCommand ) ); + + if( iEmailCommand ) + { + delete iEmailCommand; + iEmailCommand = NULL; + } + + if ( asyncCommand ) + { + iEmailCommand = CESMRIcalViewerEmailAsyncCmd::NewL( + iCurrentCbCommand, + CalSession(), + iCallback ); + } + else + { + iEmailCommand = CESMRIcalViewerEmailSyncCmd::NewL( + iCurrentCbCommand, + CalSession(), + iCallback ); + } + + iEmailCommand->ExecuteCommandL( *Message(), *this ); + + if ( !asyncCommand ) + { + // Email specific sync command has been executed. + iCurrentCbCommand = EESMREmailCommand; + } + retValue = KErrNone; + } + + + return retValue; + } + +// ----------------------------------------------------------------------------- +// CESMRIcalViewerOpenMRCmd::IsCommandAvailable +// ----------------------------------------------------------------------------- +// +TBool CESMRIcalViewerOpenMRCmd::IsCommandAvailable( TInt aCommandId ) + { + FUNC_LOG; + + TESMRIcalViewerOperationType command( + ESMRIcalViewerUtils::EmailOperation(aCommandId) ); + + TBool canProcessCommand( iCallback.CanProcessCommand( command ) ); + + return canProcessCommand; + } + +// ----------------------------------------------------------------------------- +// CESMRIcalViewerOpenMRCmd::HandleOperationCompeletedL +// ----------------------------------------------------------------------------- +// +void CESMRIcalViewerOpenMRCmd::HandleOperationCompeletedL( + MESMRIcalViewerObserver::TIcalViewerOperationResult aResult ) + { + FUNC_LOG; + + + if ( EESMRLaunchUI == aResult.iOpType ) + { + delete iUILauncher; + iUILauncher = NULL; + } + else if ( aResult.iOpType == EESMRLoadMRData ) + { + // MR data is loaded + FillAttachmentInfoL(); + } + else if( aResult.iOpType == EESMRFetchAttachmentInfo ) + { + // Attachment information is loaded + iInputParameters.iMailClient = &iMailClient; + iInputParameters.iMailMessage = Message(); + iInputParameters.iCommand = EESMRCmdUndefined; + iInputParameters.iSpare = 0; + LaunchUIL(); + } + else if ( aResult.iOpType == iCurrentCbCommand ) + { + TBool asyncCommand( ESMRIcalViewerUtils::IsAsyncEmailCommand(iCurrentCbCommand) ); + + switch ( aResult.iOpType ) + { + case EESMRCmdOpenAttachment://fallthrough + case EESMRCmdOpenAttachmentView://fallthrough + case EESMRCmdDownloadAttachment://fallthrough + case EESMRCmdDownloadAllAttachments://fallthrough + case EESMRCmdSaveAttachment://fallthrough + case EESMRCmdSaveAllAttachments://fallthrough + { + if ( ESMRIcalViewerUtils::ContainsAttachments(iInputParameters) && + iMRViewerCommand != iCurrentCbCommand ) + { + iInputParameters.iCommand = + ESMRIcalViewerUtils::MRResponseCommandWithoutAttachmentCheck( + iMRViewerCommand); + } + iCurrentCbCommand = EESMREmailCommand; + LaunchUIL(); + } + break; + + case EESMRCmdMailForwardAsMessage://fallthrough + case EESMRCmdMailCopyMessage://fallthrough + case EESMRCmdMailComposeMessage://fallthrough + case EESMRCmdMailMessageDetails://fallthrough + case EESMRCmdDownloadManager://fallthrough + case EESMRCmdMailReply://fallthrough + case EESMRCmdMailReplyAll://fallthrough + { + // Ui needs to be relaunched + iCurrentCbCommand = EESMREmailCommand; + LaunchUIL(); + } + break; + + case EESMRCmdMailMoveMessage: + { + iCurrentCbCommand = EESMREmailCommand; + if ( KErrCancel == aResult.iResultCode ) + { + LaunchUIL(); + } + } + break; + + case EESMRCmdMailPreviousMessage: + case EESMRCmdMailNextMessage: + case EESMRCmdMailMoveMessageToDrafts: + case EESMRCmdMailDelete: + { + //ui won't be relaunched + iCurrentCbCommand = EESMREmailCommand; + } + break; + default: + break; + } + } + + if ( !iUILauncher && + EESMREmailCommand == iCurrentCbCommand && + aResult.iOpType != EESMRLoadMRData) + { + iResult.iAttendeeStatus = + ESMRIcalViewerUtils::UserResponsedToMRL( + *iInputParameters.iCalEntry ); + Observer()->OperationCompleted( iResult ); + } + } + +// ----------------------------------------------------------------------------- +// CESMRIcalViewerOpenMRCmd::HandleError +// ----------------------------------------------------------------------------- +// +void CESMRIcalViewerOpenMRCmd::HandleError( TInt aError ) + { + FUNC_LOG; + if ( KErrNone != aError ) + { + iResult.iResultCode = aError; + Observer()->OperationError( iResult ); + } + } + +// --------------------------------------------------------------------------- +// CESMRIcalViewerOpenMRCmd::LaunchUIL +// --------------------------------------------------------------------------- +// +void CESMRIcalViewerOpenMRCmd::LaunchUIL() + { + FUNC_LOG; + if ( !iUILauncher ) + { + iUILauncher = CESMRUiLauncher::NewL( + CalSession(), + iInputParameters, + *this ); + } + + iUILauncher->ExecuteCommandL( *Message(), *this ); + } + +// --------------------------------------------------------------------------- +// CESMRIcalViewerOpenMRCmd::FillAttachmentInfoL +// --------------------------------------------------------------------------- +// +void CESMRIcalViewerOpenMRCmd::FillAttachmentInfoL() + { + FUNC_LOG; + + if ( !iAttachmentInfoFetcher ) + { + iAttachmentInfoFetcher = + CMRAttachmentInfoFetcher::NewL( + iMailClient, + CalSession(), + *(iInputParameters.iCalEntry) ); + } + + iAttachmentInfoFetcher->ExecuteCommandL( *Message(), *this ); + } + +// EOF + +