diff -r d189ee25cf9d -r 3533d4323edc meetingrequest/mricalviewer/src/cesmricalviewercmdhandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/meetingrequest/mricalviewer/src/cesmricalviewercmdhandler.cpp Wed Sep 01 12:28:57 2010 +0100 @@ -0,0 +1,319 @@ +/* +* 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: ESMR esmricalviewer implementation +* +*/ + + +// INCLUDE FILES + +#include "emailtrace.h" +#include "cesmricalviewercmdhandler.h" +#include "cesmricalvieweropenmrcmd.h" +#include "cesmricalviewercanviewmr.h" +#include "cesmricalviewerresolvemrmethodsync.h" +#include "cesmricalviewerresolvemrmethodasync.h" +#include "cesmricalviewerresponsetomrcmd.h" +#include "cesmricalviewerremovemrfromcalcmd.h" + +#include +// +#include "cfsmailclient.h" +#include "esmricalvieweropcodes.hrh" +#include "esmricalviewerdefs.hrh" +// +#include + +/// Unnamed namespace for local definitions +namespace { + +// Panic literal +_LIT( KESMRIcalViewerCmdHandler, "ESMRIcalViewerCmdHandler" ); + +enum TESMRIcalViewerCmdHandlerPanic + { + EInvalidCommand = 0, // Trying to execute invalid command + EInvalidObserverCall + }; + +void Panic( TESMRIcalViewerCmdHandlerPanic aPanic ) + { + User::Panic( KESMRIcalViewerCmdHandler, aPanic ); + } + +} // namespace + +// ======== MEMBER FUNCTIONS ======== + +// ----------------------------------------------------------------------------- +// CESMRIcalViewerCmdHandler::CESMRIcalViewerCmdHandler +// ----------------------------------------------------------------------------- +// +CESMRIcalViewerCmdHandler::CESMRIcalViewerCmdHandler( + MESMRIcalViewerCallback& aCallback ) +: iCallback( aCallback ) + { + FUNC_LOG; + //do nothing + } + +// ----------------------------------------------------------------------------- +// CESMRIcalViewerCmdHandler::~CESMRIcalViewerCmdHandler +// ----------------------------------------------------------------------------- +// +CESMRIcalViewerCmdHandler::~CESMRIcalViewerCmdHandler() + { + FUNC_LOG; + CancelOperation(); + + delete iCommand; + delete iMessage; + if ( iMailClient ) + { + iMailClient->Close(); + } + delete iCalSession; + } + +// ----------------------------------------------------------------------------- +// CESMRIcalViewerCmdHandler::NewL +// ----------------------------------------------------------------------------- +// +CESMRIcalViewerCmdHandler* CESMRIcalViewerCmdHandler::NewL( + MESMRIcalViewerCallback& aCallback ) + { + FUNC_LOG; + CESMRIcalViewerCmdHandler* self = + new (ELeave) CESMRIcalViewerCmdHandler( aCallback ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CESMRIcalViewerCmdHandler::ConstructL +// ----------------------------------------------------------------------------- +// +void CESMRIcalViewerCmdHandler::ConstructL() + { + FUNC_LOG; + iCalSession = CCalSession::NewL(); + iCalSession->OpenL( KNullDesC ); + iMailClient = CFSMailClient::NewL(); + } + +// ----------------------------------------------------------------------------- +// CESMRIcalViewerCmdHandler::ExecuteCommandL +// ----------------------------------------------------------------------------- +// +void CESMRIcalViewerCmdHandler::ExecuteCommandL( + TESMRIcalViewerOperationType aOpType, + MESMRIcalViewerObserver* aObserver, + CFSMailMessage& aMessage ) + { + FUNC_LOG; + ExecuteCommandL( aOpType, aObserver, aMessage, NULL ); + } + +// ----------------------------------------------------------------------------- +// CESMRIcalViewerCmdHandler::ExecuteCommandL +// ----------------------------------------------------------------------------- +// +void CESMRIcalViewerCmdHandler::ExecuteCommandL( + TESMRIcalViewerOperationType aOpType, + MESMRIcalViewerObserver* aObserver, + CFSMailMessage& aMessage, + TAny* aParam ) + { + FUNC_LOG; + TRAPD( err, ExecuteCommandInternalL( aOpType, + aObserver, + aMessage, + aParam ) ); + + if ( KErrNone != err && EIdle != iState ) + { + // Make sure that error is notified to caller in all cases + if ( iObserver) + { + iResult.iMessage = &aMessage; + iResult.iResultCode = err; + iResult.iOpType = aOpType; + iObserver->OperationError( iResult ); + } + iState = EIdle; + } + } + +// ----------------------------------------------------------------------------- +// CESMRIcalViewerCmdHandler::CancelOperation +// ----------------------------------------------------------------------------- +// +void CESMRIcalViewerCmdHandler::CancelOperation() + { + FUNC_LOG; + if ( iCommand ) + { + iCommand->CancelCommand(); + } + + iState = EIdle; + } + +// ----------------------------------------------------------------------------- +// CESMRIcalViewerCmdHandler::OperationCompleted +// ----------------------------------------------------------------------------- +// +void CESMRIcalViewerCmdHandler::OperationCompleted( + TIcalViewerOperationResult aResult ) + { + FUNC_LOG; + __ASSERT_DEBUG( iCommand, Panic(EInvalidObserverCall) ); + __ASSERT_DEBUG( + iCommand->OperationType() == aResult.iOpType, + Panic(EInvalidObserverCall) ); + + if ( iObserver ) + { + aResult.iOpType = iCommand->OperationType(); + iObserver->OperationCompleted( aResult ); + } + + iState = EIdle; + } + +// ----------------------------------------------------------------------------- +// CESMRIcalViewerCmdHandler::OperationError +// ----------------------------------------------------------------------------- +// +void CESMRIcalViewerCmdHandler::OperationError( + TIcalViewerOperationResult aResult ) + { + FUNC_LOG; + __ASSERT_DEBUG( iCommand, Panic(EInvalidObserverCall) ); + __ASSERT_DEBUG( + iCommand->OperationType() == aResult.iOpType, + Panic(EInvalidObserverCall) ); + + if ( iObserver ) + { + aResult.iOpType = iCommand->OperationType(); + iObserver->OperationError( aResult ); + } + + iState = EIdle; + } + +// ----------------------------------------------------------------------------- +// CESMRIcalViewerCmdHandler::ExecuteCommandInternalL +// ----------------------------------------------------------------------------- +// +void CESMRIcalViewerCmdHandler::ExecuteCommandInternalL( + TESMRIcalViewerOperationType aOpType, + MESMRIcalViewerObserver* aObserver, + CFSMailMessage& aMessage, + TAny* aParam ) + { + FUNC_LOG; + if ( EExecuting == iState ) + { + User::Leave( KErrInUse ); + } + + delete iCommand; iCommand = NULL; + + iState = EExecuting; + iObserver = aObserver; + + // Get own copy of the message before executing commands + delete iMessage; iMessage = NULL; + iMessage = iMailClient->GetMessageByUidL( + aMessage.GetMailBoxId(), + aMessage.GetFolderId(), + aMessage.GetMessageId(), + EFSMsgDataStructure ); + + switch ( aOpType ) + { + case EESMRViewLaunch: + { + iCommand = CESMRIcalViewerOpenMRCmd:: NewL( + iCallback, + *iMailClient, + *iCalSession ); + } + break; + + case EESMRCanViewMR: + { + TBool* flag = static_cast( aParam ); + iCommand = CESMRIcalViewerCanViewMsgCmd:: NewL( + *iCalSession, + *flag ); + } + break; + + case EESMRResolveMRMethod: + { + iCommand = CESMRIcalViewerResolveMRMethodASyncCmd::NewL( + *iCalSession, + *iMailClient ); + } + break; + + case EESMRResolveMRMethodSync: + { + TESMRMeetingRequestMethod* mrMethod = + static_cast( aParam ); + + iCommand = CESMRIcalViewerResolveMRMethodSyncCmd::NewL( + *iCalSession, + *iMailClient, + *mrMethod ); + } + break; + + case EESMRResponseToMR: + { + TESMRAttendeeStatus* attendeeStatus = + static_cast( aParam ); + + iCommand = CESMRIcalViewerResponseToMRCmd::NewL( + iCallback, + *iCalSession, + *iMailClient, + *attendeeStatus); + + } + break; + + case EESMRRemoveMR: + { + iCommand = CESMRIcalViewerRemoveMRFromCalCmd::NewL( + *iCalSession, + *iMailClient ); + } + break; + + default: + break; + } + + __ASSERT_ALWAYS( iCommand, Panic( EInvalidCommand) ); + iCommand->ExecuteCommandL( *iMessage, *this ); + } + +// EOF +