diff -r 000000000000 -r 72b543305e3a messagingappbase/msgerrorwatcher/src/MsgGarbageCollection.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingappbase/msgerrorwatcher/src/MsgGarbageCollection.cpp Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,183 @@ +/* +* Copyright (c) 2007 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: +* CMsgGarbageCollection implementation file +* +*/ + + + +// INCLUDE FILES +#include +#include +#include +#include +#include +#include // EPushMtmCmdCollectGarbage + +#include "MsgGarbageCollection.h" + +#ifdef USE_LOGGER +#include "MsgErrorWatcherLogging.h" +#endif + +// CONSTANTS +const TUint KGarbageCollectionInterval = 1; // In hours + +// ================= MEMBER FUNCTIONS ======================= + +// --------------------------------------------------------- +// CMsgGarbageCollection::NewL +// --------------------------------------------------------- +// +CMsgGarbageCollection* CMsgGarbageCollection::NewL( + CClientMtmRegistry& aMtmRegistry ) + { + CMsgGarbageCollection* self = new ( ELeave ) CMsgGarbageCollection( aMtmRegistry ); + + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------- +// CMsgGarbageCollection::CMsgGarbageCollection +// --------------------------------------------------------- +// +CMsgGarbageCollection::CMsgGarbageCollection( CClientMtmRegistry& aMtmRegistry ) + : CActive( EPriorityStandard ), + iMtmRegistry( aMtmRegistry ) + { + CActiveScheduler::Add( this ); + } + +// --------------------------------------------------------- +// CMsgGarbageCollection::~CMsgGarbageCollection +// --------------------------------------------------------- +// +CMsgGarbageCollection::~CMsgGarbageCollection() + { + Cancel(); + iTimer.Close(); + delete iOp; + delete iWapMtm; + } + +// --------------------------------------------------------- +// CMsgGarbageCollection::ConstructL +// --------------------------------------------------------- +// +void CMsgGarbageCollection::ConstructL() + { +#ifdef USE_LOGGER + MEWLOGGER_ENTERFN( "GarbageCollection: ConstructL" ); +#endif + User::LeaveIfError( iTimer.CreateLocal() ); + iWapMtm = iMtmRegistry.NewMtmL( KSenduiMtmPushMtmUid ); + + StartWaiting(); + +#ifdef USE_LOGGER + MEWLOGGER_LEAVEFN( "GarbageCollection: ConstructL" ); +#endif + } + +// --------------------------------------------------------- +// CMsgGarbageCollection::RunL +// --------------------------------------------------------- +// +void CMsgGarbageCollection::RunL() + { +#ifdef USE_LOGGER + MEWLOGGER_ENTERFN( "GarbageCollection: RunL" ); +#endif + if ( iState == EGarbageCollectionWaiting ) + { + WapPushGarbageCollectionL(); + } + else + { + StartWaiting(); + } +#ifdef USE_LOGGER + MEWLOGGER_LEAVEFN( "GarbageCollection: RunL" ); +#endif + } + +// --------------------------------------------------------- +// CMsgGarbageCollection::DoCancel +// --------------------------------------------------------- +// +void CMsgGarbageCollection::DoCancel() + { + iTimer.Cancel(); + if ( iOp ) + { + iOp->Cancel(); + } + } + +// --------------------------------------------------------- +// CMsgGarbageCollection::StartWaiting +// --------------------------------------------------------- +// +void CMsgGarbageCollection::StartWaiting() + { +#ifdef USE_LOGGER + MEWLOGGER_ENTERFN( "GarbageCollection: StartWaiting" ); +#endif + iState = EGarbageCollectionWaiting; + iStatus = KRequestPending; + TTime time; + time.UniversalTime(); + time += TTimeIntervalHours( KGarbageCollectionInterval ); + iTimer.AtUTC( iStatus, time ); + SetActive(); +#ifdef USE_LOGGER + MEWLOGGER_LEAVEFN( "GarbageCollection: StartWaiting" ); +#endif + } + +// --------------------------------------------------------- +// CMsgGarbageCollection::WapPushGarbageCollectionL +// --------------------------------------------------------- +// +void CMsgGarbageCollection::WapPushGarbageCollectionL() + { +#ifdef USE_LOGGER + MEWLOGGER_ENTERFN( "GarbageCollection: WapPushGarbageCollectionL" ); +#endif + // Delete just in case... + iState = EGarbageCollectionWapPush; + CMsvEntrySelection* selection = new( ELeave ) CMsvEntrySelection(); + CleanupStack::PushL( selection ); + TBuf8<1> blankParams; + iStatus = KRequestPending; + delete iOp; + iOp = NULL; + iOp = iWapMtm->InvokeAsyncFunctionL( + EPushMtmCmdCollectGarbage, + *selection, + blankParams, + iStatus ); + CleanupStack::PopAndDestroy( selection ); + SetActive(); +#ifdef USE_LOGGER + MEWLOGGER_LEAVEFN( "GarbageCollection: WapPushGarbageCollectionL" ); +#endif + } + +// End of File +