diff -r 000000000000 -r 72b543305e3a email/imum/Mtms/Src/SmtpResetPreCreationOp.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/email/imum/Mtms/Src/SmtpResetPreCreationOp.cpp Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,204 @@ +/* +* 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: +* Used to reset a service's pre-created messages when the service changes +* +*/ + +#include +#include + +#include "SmtpResetPreCreationOp.h" +#include "EmailPreCreation.h" +#include "ImumMtmLogging.h" + +const TInt KResetCreateMsgPriority = CActive::EPriorityIdle - 10; + + +CSmtpResetPreCreationOp* CSmtpResetPreCreationOp::NewL(CMsvSession& aMsvSession, + TRequestStatus& aObserverRequestStatus, TMsvId aServiceId) + { + IMUM_STATIC_CONTEXT( CSmtpResetPreCreationOp::NewL, 0, mtm, KImumMtmLog ); + IMUM_IN(); + // static + CSmtpResetPreCreationOp* op = new(ELeave) CSmtpResetPreCreationOp(aMsvSession, aObserverRequestStatus, aServiceId); + CleanupStack::PushL(op); + op->ConstructL(); + CleanupStack::Pop(op); + IMUM_OUT(); + return op; + } + + +void CSmtpResetPreCreationOp::RunL() + { + IMUM_CONTEXT( CSmtpResetPreCreationOp::RunL, 0, KImumMtmLog ); + IMUM_IN(); + + DoRunL(); + + IMUM_OUT(); + } + + +TInt CSmtpResetPreCreationOp::RunError(TInt __DEBUG_ONLY( aError ) ) + { + IMUM_CONTEXT( CSmtpResetPreCreationOp::RunError, 0, KImumMtmLog ); + IMUM_IN(); + + IMUM1( 0, "RunL leaved with error code %d", aError ); + + iMtm = KUidMsvLocalServiceMtm; + CompleteObserver(); + + IMUM_OUT(); + + return KErrNone; + } + +void CSmtpResetPreCreationOp::DoRunL() + { + IMUM_CONTEXT( CSmtpResetPreCreationOp::DoRunL, 0, KImumMtmLog ); + IMUM_IN(); + + TInt err = KErrNone; + TPckgBuf idbuf; + if(iStatus.Int() != KErrNone) + { + err = iStatus.Int(); + } + else if(iOperation) + { + const TDesC8& prog = iOperation->ProgressL(); + if(prog.Length()) + { + if(iState == EStateCreate) + { + idbuf.Copy(prog.Left(sizeof(TMsvId))); + if(idbuf() == KMsvNullIndexEntryId) + { + err = KErrGeneral; + } + } + else + { + const TUid uid(iOperation->Mtm()); + if(uid == KUidMsvLocalServiceMtm) + { + err = McliUtils::GetLocalProgressL(*iOperation).iError; + } + else + { + TBuf retString; + TInt totalEntryCount = 0; + TInt entriesDone = 0; + TInt currentEntrySize = 0; + TInt currentBytesTrans = 0; + err = iMtmStore->ClaimMtmUiL(uid).GetProgress(prog, retString, totalEntryCount, entriesDone, currentEntrySize, currentBytesTrans); + iMtmStore->ReleaseMtmUi(uid); + } + } + } + } + if(iOperation) + { + delete iOperation; + iOperation = NULL; + } + User::LeaveIfError(err); // Caught in RunL() + + switch(iState) + { + case EStateIdle: // should never occur... + DeleteMessageL(); + break; + case EStateDelete: + CreateMessageL(); + break; + case EStateCreate: + CompleteObserver(); + break; + default: + break; + } + iMtm = (iOperation) ? (iOperation->Mtm()) : (KUidMsvLocalServiceMtm); + IMUM_OUT(); + } + + +CSmtpResetPreCreationOp::CSmtpResetPreCreationOp(CMsvSession& aMsvSession, TRequestStatus& aObserverRequestStatus, + TMsvId aServiceId) + : CSmtpPreCreationOpBase(aMsvSession, KResetCreateMsgPriority, aObserverRequestStatus) + { + IMUM_CONTEXT( CSmtpResetPreCreationOp::CSmtpResetPreCreationOp, 0, KImumMtmLog ); + IMUM_IN(); + + iService = aServiceId; + IMUM_OUT(); + } + + +CSmtpResetPreCreationOp::~CSmtpResetPreCreationOp() + { + IMUM_CONTEXT( CSmtpResetPreCreationOp::~CSmtpResetPreCreationOp, 0, KImumMtmLog ); + IMUM_IN(); + IMUM_OUT(); + + } + + +void CSmtpResetPreCreationOp::ConstructL() + { + IMUM_CONTEXT( CSmtpResetPreCreationOp::ConstructL, 0, KImumMtmLog ); + IMUM_IN(); + + CSmtpPreCreationOpBase::ConstructL(); + + // DeleteMessage operation must be run synchronously before Control is returned to the Active Scheduler + // to ensure that an Email editor is not launched with a message which will be deleted by this operation. + DeleteMessageL(); + IMUM_OUT(); + } + + +void CSmtpResetPreCreationOp::DeleteMessageL() + { + IMUM_CONTEXT( CSmtpResetPreCreationOp::DeleteMessageL, 0, KImumMtmLog ); + IMUM_IN(); + + iStatus = KRequestPending; + iOperation = iPreCreate->DeleteAllPreCreatedEmailsL(iService, iStatus); + SetActive(); + iState = EStateDelete; + if(!iOperation) // DeleteAllPreCreatedEmailsL() returns NULL if no messages to delete. + { + CompleteThis(); + } + IMUM_OUT(); + } + + +void CSmtpResetPreCreationOp::CreateMessageL() + { + IMUM_CONTEXT( CSmtpResetPreCreationOp::CreateMessageL, 0, KImumMtmLog ); + IMUM_IN(); + + iStatus = KRequestPending; + iOperation = iPreCreate->PreCreateBlankEmailL(iService, iStatus); + SetActive(); + iState = EStateCreate; + IMUM_OUT(); + } + +