diff -r 000000000000 -r 8466d47a6819 emailuis/emailui/src/FSDelayedLoader.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/emailuis/emailui/src/FSDelayedLoader.cpp Thu Dec 17 08:39:21 2009 +0200 @@ -0,0 +1,180 @@ +/* +* 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: Helper to do delayed processing after application startup +* +*/ + + +#include "emailtrace.h" +#include +#include"FSDelayedLoader.h" +#include"FreestyleEmailUiConstants.h" +#include "FreestyleEmailUiContactHandler.h" + + +// ----------------------------------------------------------------------------- +// CFsDelayedLoader::InstanceL +// +// ----------------------------------------------------------------------------- +// +CFsDelayedLoader* CFsDelayedLoader::InstanceL() + { + FUNC_LOG; + CFsDelayedLoader* instance = static_cast( CCoeEnv::Static( KDelayedLoaderUid ) ); + if ( !instance ) + { + instance = new ( ELeave ) CFsDelayedLoader; + CleanupStack::PushL( instance ); + instance->ConstructL(); + CleanupStack::Pop(); + } + return instance; + } + +// ----------------------------------------------------------------------------- +// CFsDelayedLoader::ConstructL +// +// ----------------------------------------------------------------------------- +// +void CFsDelayedLoader::ConstructL() + { + FUNC_LOG; + iIdle = CIdle::NewL( CActive::EPriorityIdle ); + iIdleCallback = new (ELeave) TCallBack( IdleCallbackFunction, this ); + } + +// ----------------------------------------------------------------------------- +// CFsDelayedLoader::~CFsDelayedLoader +// +// ----------------------------------------------------------------------------- +// +CFsDelayedLoader::~CFsDelayedLoader() + { + FUNC_LOG; + iLoaders.Reset(); + + delete iContactHandler; + + delete iIdleCallback; + if ( iIdle ) + { + iIdle->Cancel(); + delete iIdle; + } + } + +// ----------------------------------------------------------------------------- +// CFsDelayedLoader::CFsDelayedLoader +// +// ----------------------------------------------------------------------------- +// +CFsDelayedLoader::CFsDelayedLoader(): CCoeStatic( KDelayedLoaderUid ) + { + FUNC_LOG; + } + +// ----------------------------------------------------------------------------- +// CFsDelayedLoader::Start +// +// ----------------------------------------------------------------------------- +// +void CFsDelayedLoader::Start() + { + FUNC_LOG; + iLoaderIndex = 0; + iIdle->Start( *iIdleCallback ); + } + +// ----------------------------------------------------------------------------- +// CFsDelayedLoader::GetPbkContactEngineL +// +// ----------------------------------------------------------------------------- +// +CFSEmailUiContactHandler* CFsDelayedLoader::GetContactHandlerL() + { + FUNC_LOG; + + if ( !iContactHandler ) + { + iContactHandler = CFSEmailUiContactHandler::NewL( CEikonEnv::Static()->FsSession() ); + } + + return iContactHandler; + } +// ----------------------------------------------------------------------------- +// CFsDelayedLoader::IdleCallbackFunction +// +// ----------------------------------------------------------------------------- +// +TInt CFsDelayedLoader::IdleCallbackFunction( TAny* aParam ) + { + FUNC_LOG; + // load own items + CFsDelayedLoader* self = static_cast< CFsDelayedLoader* >( aParam ); + TRAPD( error, self->GetContactHandlerL() ); + if ( KErrNone != error ) + { + //Panic! + } + + // if there are no loaders we can stop the callback + if ( self->iLoaders.Count() <= 0 ) + { + return 0; + } + + // handle loaders + TInt r = self->iLoaders[self->iLoaderIndex]->DelayLoadCallback(); + + if ( r == 0 ) + { + self->iLoaderIndex++; + if ( self->iLoaderIndex >= self->iLoaders.Count() ) + { + return 0; + } + } + + return 1; + } + +// ----------------------------------------------------------------------------- +// CFsDelayedLoader::AppendLoader +// +// ----------------------------------------------------------------------------- +// +void CFsDelayedLoader::AppendLoader( MFsDelayedLoadingInterface& aLoader ) + { + FUNC_LOG; + iLoaders.Append( &aLoader ); + } + +// ----------------------------------------------------------------------------- +// CFsDelayedLoader::RemoveLoader +// +// ----------------------------------------------------------------------------- +// +void CFsDelayedLoader::RemoveLoader( MFsDelayedLoadingInterface& aLoader ) + { + FUNC_LOG; + for ( TInt i=0; i