diff -r 000000000000 -r 72b543305e3a messagingappbase/mce/src/MceUtilsIdleClass.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingappbase/mce/src/MceUtilsIdleClass.cpp Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,173 @@ +/* +* Copyright (c) 2002 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: +* Active object to count messages background for mainview. +* +*/ + + + + +// INCLUDE FILES + + +#include "MceUtilsIdleClass.h" + +#include "MceLogText.h" + + +// CONSTANTS + + + + +// ================= MEMBER FUNCTIONS ======================= + + +CMceUtilsIdleClass* CMceUtilsIdleClass::NewL( + MMceUtilsIdleClassObserver& aObserver ) + { + CMceUtilsIdleClass* self = new (ELeave) CMceUtilsIdleClass( aObserver ); + return self; + } + + +CMceUtilsIdleClass::CMceUtilsIdleClass( + MMceUtilsIdleClassObserver& aObserver ) + : + CActive( CActive::EPriorityIdle ), + iObserver( aObserver ) + { + CActiveScheduler::Add(this); + } + +// destructor +CMceUtilsIdleClass::~CMceUtilsIdleClass() + { + Cancel(); + } + +// --------------------------------------------------------- +// CMceUtilsIdleClass::StartL +// --------------------------------------------------------- +// +void CMceUtilsIdleClass::StartL() + { + MCELOGGER_ENTERFN("CMceUtilsIdleClass::StartL()"); + if(!IsActive()) + { + TRequestStatus *s = &iStatus; + User::RequestComplete(s, KErrNone); + SetActive(); + MCELOGGER_WRITE_TIMESTAMP("Started at: "); + } +#ifdef _DEBUG + else + { + MCELOGGER_WRITE_TIMESTAMP("Already running, time: "); + } +#endif + MCELOGGER_LEAVEFN("CMceUtilsIdleClass::StartL()"); + } + + +// --------------------------------------------------------- +// CMceUtilsIdleClass::FinishL +// --------------------------------------------------------- +// +void CMceUtilsIdleClass::ForceFinishL() + { + MCELOGGER_ENTERFN("CMceUtilsIdleClass::ForceFinishL()"); + if(IsActive()) + { + // First consume the outstanding completion. + Cancel(); + // Now try to do remaining steps synchronously. + TBool startAgain = EFalse; + TInt i = 0; + MCELOGGER_WRITE_TIMESTAMP("start time: "); + startAgain = iObserver.MMceUtilsIdleClassStepL(); + while( startAgain && i < 100 /* safety */) + { + i++; + startAgain = iObserver.MMceUtilsIdleClassStepL(); + } + MCELOGGER_WRITE_TIMESTAMP("stop time: "); + } + MCELOGGER_LEAVEFN("CMceUtilsIdleClass::ForceFinishL()"); + } + + +// --------------------------------------------------------- +// CMceUtilsIdleClass::DoCancel +// --------------------------------------------------------- +// +void CMceUtilsIdleClass::DoCancel() + { + } + + +// --------------------------------------------------------- +// CMceUtilsIdleClass::RunL +// --------------------------------------------------------- +// +void CMceUtilsIdleClass::RunL() + { + MCELOGGER_ENTERFN("CMceUtilsIdleClass::RunL()"); + QueueNextL(); +#ifdef _DEBUG + if(!IsActive()) + { + MCELOGGER_WRITE("CMceUtilsIdleClass: finished"); + MCELOGGER_WRITE_TIMESTAMP("CMceUtilsIdleClass Time: "); + } +#endif + MCELOGGER_LEAVEFN("CMceUtilsIdleClass::RunL()"); + } + +// --------------------------------------------------------- +// CMceUtilsIdleClass::RunError +// --------------------------------------------------------- +// +TInt CMceUtilsIdleClass::RunError(TInt /*aError*/) + { + // ignore all the errors + return KErrNone; + } + +// --------------------------------------------------------- +// CMceUtilsIdleClass::QueueLoad +// --------------------------------------------------------- +// +void CMceUtilsIdleClass::QueueNextL() + { + MCELOGGER_ENTERFN("CMceUtilsIdleClass::QueueNextL()"); + TBool startAgain = EFalse; + MCELOGGER_WRITE_TIMESTAMP("About to call MMceUtilsIdleClassStepL: "); + startAgain = iObserver.MMceUtilsIdleClassStepL(); + MCELOGGER_WRITE_TIMESTAMP("<--- MMceUtilsIdleClassStepL done "); + // OPEN: should we start again in case of leave? + // OPEN: Is there need for some safety counter??? + if( startAgain ) + { + TRequestStatus *s = &iStatus; + User::RequestComplete(s, KErrNone); + SetActive(); + MCELOGGER_WRITE_TIMESTAMP("Started again at: "); + } + MCELOGGER_LEAVEFN("CMceUtilsIdleClass::QueueNextL()"); + } + + +// End of File