sl@0: // Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
sl@0: // All rights reserved.
sl@0: // This component and the accompanying materials are made available
sl@0: // under the terms of "Eclipse Public License v1.0"
sl@0: // which accompanies this distribution, and is available
sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html".
sl@0: //
sl@0: // Initial Contributors:
sl@0: // Nokia Corporation - initial contribution.
sl@0: //
sl@0: // Contributors:
sl@0: //
sl@0: // Description:
sl@0: //
sl@0: 
sl@0: #include "LOGREC.H"
sl@0: 
sl@0: // User includes
sl@0: #include "logservpanic.h"
sl@0: #include "LogServDatabaseTransactionInterface.h"
sl@0: 
sl@0: 
sl@0: CLogRecover::CLogRecover(MLogServDatabaseTransactionInterface& aDatabase, TInt aPriority)
sl@0: : CLogActive(aPriority), iDatabase(aDatabase)
sl@0: 	{
sl@0: 	}
sl@0: 
sl@0: TBool CLogRecover::Start(TRequestStatus& aStatus)
sl@0: 	{
sl@0: 	if (!iDatabase.DTIDatabaseIsDamaged())
sl@0: 		return EFalse;
sl@0: 
sl@0: 	TInt error = iOperation.Recover(iDatabase.DTIDatabase(), iStep());
sl@0: 	if (error != KErrNone)
sl@0: 		{
sl@0: 		__ASSERT_DEBUG(ETrue, Panic(ELogRecoverError));
sl@0: 		return EFalse;
sl@0: 		}
sl@0: 
sl@0: 	if (iStep() > 0)
sl@0: 		{
sl@0: 		Queue(aStatus);
sl@0: 		TRequestStatus* st = &iStatus;
sl@0: 		User::RequestComplete(st, KErrNone);
sl@0: 		SetActive();
sl@0: 
sl@0: 		return ETrue;
sl@0: 		}
sl@0: 
sl@0: 	return EFalse;
sl@0: 	}
sl@0: 
sl@0: void CLogRecover::DoRunL()
sl@0: 	{
sl@0: 	if (iStep() > 0)
sl@0: 		{
sl@0: 		iOperation.Next(iStep, iStatus);
sl@0: 		SetActive();
sl@0: 		}
sl@0: 	else
sl@0: 		__ASSERT_DEBUG(!iDatabase.DTIInTransaction(), Panic(ELogDatabaseDamaged3));
sl@0: 	}
sl@0: 
sl@0: void CLogRecover::DoComplete(TInt& /*aCompletionCode*/)
sl@0: 	{
sl@0: 	iOperation.Close();
sl@0: 	}