diff -r 000000000000 -r 72b543305e3a email/imum/Mtms/Src/ImumFetchAndEditOperation.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/email/imum/Mtms/Src/ImumFetchAndEditOperation.cpp Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,208 @@ +/* +* Copyright (c) 2006 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: +* Common email MTM wrapper operation +* +*/ + + +#include +#include +#include +#include +#include +#include +#include // KUidMsvLocalServiceMtm +#include // CImEmailOperation +#include + +#include "ImumFetchAndEditOperation.h" +#include "ImumEditOperation.h" +#include "EmailUtils.H" +#include "ImumPanic.h" +#include "ImumMtmLogging.h" + +const TInt KEmailFetchAndEditOpPriority = CActive::EPriorityStandard; + +// ================= MEMBER FUNCTIONS ======================= + +// ---------------------------------------------------------------------------- +// CImumFetchAndEditOperation +// ---------------------------------------------------------------------------- +CImumFetchAndEditOperation::CImumFetchAndEditOperation( + CImumInternalApi& aMailboxApi, + TRequestStatus& aObserverRequestStatus, + MMsvProgressReporter& aReporter, + const TEmailEditParams& aParams, + TBool aAckReceipts) + : + CImumDiskSpaceObserverOperation( + aMailboxApi, + KEmailFetchAndEditOpPriority, + aObserverRequestStatus, + aReporter), + iState(EStateIdle), + iEditParams(aParams), + iAckReceipts(aAckReceipts) + { + IMUM_CONTEXT( CImumFetchAndEditOperation::CImumFetchAndEditOperation, 0, KImumMtmLog ); + IMUM_IN(); + IMUM_OUT(); + + } + +// ---------------------------------------------------------------------------- +// NewL +// ---------------------------------------------------------------------------- +CImumFetchAndEditOperation* CImumFetchAndEditOperation::NewL( + CImumInternalApi& aMailboxApi, + TRequestStatus& aObserverRequestStatus, + MMsvProgressReporter& aReporter, + const TEmailEditParams& aParams, + TBool aAckReceipts ) + { + IMUM_STATIC_CONTEXT( CImumFetchAndEditOperation::NewL, 0, mtm, KImumMtmLog ); + IMUM_IN(); + IMUM_OUT(); + + return new ( ELeave ) CImumFetchAndEditOperation( + aMailboxApi, aObserverRequestStatus, + aReporter, aParams, aAckReceipts ); + } + +// ---------------------------------------------------------------------------- +// ~CImumFetchAndEditOperation +// ---------------------------------------------------------------------------- +CImumFetchAndEditOperation::~CImumFetchAndEditOperation() + { + IMUM_CONTEXT( CImumFetchAndEditOperation::~CImumFetchAndEditOperation, 0, KImumMtmLog ); + IMUM_IN(); + IMUM_OUT(); + + } + +// ---------------------------------------------------------------------------- +// GetErrorProgressL +// ---------------------------------------------------------------------------- +const TDesC8& CImumFetchAndEditOperation::GetErrorProgressL( TInt aError ) + { + IMUM_CONTEXT( CImumFetchAndEditOperation::GetErrorProgressL, 0, KImumMtmLog ); + IMUM_IN(); + + // DoRunL() left, failed to switch to launch editor state. + iLocalProgress().iType = TMsvLocalOperationProgress::ELocalNone; + iLocalProgress().iTotalNumberOfEntries = 0; + iLocalProgress().iNumberCompleted = 0; + iLocalProgress().iNumberFailed = 0; + iLocalProgress().iNumberRemaining = 0; + iLocalProgress().iError = aError; + iLocalProgress().iId = iEditParams.iEditorParams.iId; + IMUM_OUT(); + return iLocalProgress; + } + +// ---------------------------------------------------------------------------- +// SetFetchOpL +// ---------------------------------------------------------------------------- +void CImumFetchAndEditOperation::SetFetchOpL( CMsvOperation* aFetchOp ) + { + IMUM_CONTEXT( CImumFetchAndEditOperation::SetFetchOpL, 0, KImumMtmLog ); + IMUM_IN(); + + __ASSERT_ALWAYS( aFetchOp, User::Panic( KImumMtmUiPanic, EPanicOpBadFetchOp ) ); + __ASSERT_ALWAYS( !iOperation, User::Panic( KImumMtmUiPanic, EPanicAlreadySetFetchOp ) ); + iOperation = aFetchOp; + iService = iOperation->Service(); + BaseConstructL( iOperation->Mtm() ); + iState = EStateFetching; + iStatus = KRequestPending; + SetActive(); + IMUM_OUT(); + } + +// ---------------------------------------------------------------------------- +// RequestStatus +// ---------------------------------------------------------------------------- +TRequestStatus& CImumFetchAndEditOperation::RequestStatus() + { + IMUM_CONTEXT( CImumFetchAndEditOperation::RequestStatus, 0, KImumMtmLog ); + IMUM_IN(); + IMUM_OUT(); + + return iStatus; + } + +// ---------------------------------------------------------------------------- +// DoRunL +// ---------------------------------------------------------------------------- +void CImumFetchAndEditOperation::DoRunL() + { + IMUM_CONTEXT( CImumFetchAndEditOperation::DoRunL, 0, KImumMtmLog ); + IMUM_IN(); + + iActualMtm = iMtm; + iMtm = KUidMsvLocalServiceMtm; // Error progress is local MTM. + switch(iState) + { + case EStateFetching: + // The fetch has completed. + { + if(KErrNone == GetOperationCompletionCodeL()) + { + DoEditL(); + } + else + { + CompleteObserver(); + } + } + break; + case EStateEditing: + // Edit has completed. + CompleteObserver( iOperation->iStatus.Int() ); + iState = EStateComplete; + break; + + case EStateIdle: + case EStateComplete: + default: + break; + } + iMtm = iOperation->Mtm(); // Completed without error, reset MTM. + IMUM_OUT(); + } + +// ---------------------------------------------------------------------------- +// DoEditL +// ---------------------------------------------------------------------------- +void CImumFetchAndEditOperation::DoEditL() + { + IMUM_CONTEXT( CImumFetchAndEditOperation::DoEditL, 0, KImumMtmLog ); + IMUM_IN(); + + iReporter.MakeProgressVisibleL( EFalse ); // Get rid of the dialog. + iMtmUi->BaseMtm().SwitchCurrentEntryL( iEditParams.iEditorParams.iId ); + delete iOperation; + iOperation = NULL; + iStatus = KRequestPending; + + iOperation = CImumEditOperation::NewL( + iMailboxApi, iStatus, iActualMtm, iEditParams, iAckReceipts ); + + iState = EStateEditing; + SetActive(); + IMUM_OUT(); + } + +// End of File