diff -r 9f5ae1728557 -r db3f5fa34ec7 messagingfw/msgsrvnstore/server/src/MSVCMBSE.CPP --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingfw/msgsrvnstore/server/src/MSVCMBSE.CPP Wed Nov 03 22:41:46 2010 +0530 @@ -0,0 +1,129 @@ +// Copyright (c) 1998-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: +// + +#include + +#include "MSVCMBSE.H" +#include "MSVPANIC.H" + +//********************************** +// CMsvCopyMoveEntriesBase +//********************************** + + +CMsvCopyMoveEntriesBase::CMsvCopyMoveEntriesBase() +: CActive(EPriorityStandard) +// +// +// + {} + + +CMsvCopyMoveEntriesBase::~CMsvCopyMoveEntriesBase() +// +// +// + { + Cancel(); + + delete iFailedIds; + delete iCompletedIds; + } + + +void CMsvCopyMoveEntriesBase::ConstructL() +// +// +// + { + iFailedIds = new(ELeave) CMsvEntrySelection; + iCompletedIds = new(ELeave) CMsvEntrySelection; + + CActiveScheduler::Add(this); + } + +void CMsvCopyMoveEntriesBase::StartL(const CMsvEntrySelection& aSelection, TMsvId aTargetId, TRequestStatus& aObserverStatus) +// +// +// + { + __ASSERT_DEBUG(aSelection.Count() > 0, PanicServer(EMsvEmptySelection)); + + iCompletedIds->Reset(); + iCompletedIds->SetReserveL(aSelection.Count()); + + iFailedIds->Reset(); + iFailedIds->AppendL(aSelection.Back(0), aSelection.Count()); + + iCurrentIndex = iFailedIds->Count(); + iError = KErrNone; + + iTargetId = aTargetId; + + if (!StartNext()) + { + __ASSERT_DEBUG(iError, PanicServer(EMsvNoErrorSet)); + User::Leave(iError); + } + + iObserverStatus = &aObserverStatus; + *iObserverStatus = KRequestPending; + } + +void CMsvCopyMoveEntriesBase::RunL() +// +// +// + { + if (iStatus != KErrNone) + { + if (iError == KErrNone) + iError = iStatus.Int(); + } + else + { + iCompletedIds->AppendL(iFailedIds->At(iCurrentIndex)); + iFailedIds->Delete(iCurrentIndex); + } + + if (!StartNext()) + User::RequestComplete(iObserverStatus, iError); + } + +TBool CMsvCopyMoveEntriesBase::StartNext() + { + while(iCurrentIndex > 0) + { + TRAPD(error, DoStartNextL()); + if (error) + { + if (iError == KErrNone) + iError = error; + } + else + return ETrue; + } + + return EFalse; + } + +void CMsvCopyMoveEntriesBase::DoStartNextL() + { + __ASSERT_DEBUG(iCurrentIndex > 0, PanicServer(EMsvInvalidCurrentIndex)); + + iCurrentIndex--; + DoStartL(iFailedIds->At(iCurrentIndex), iTargetId, iStatus); + SetActive(); + }