diff -r 000000000000 -r 4e91876724a2 photosgallery/collectionframework/thumbnailcreator/src/glxtnfilteravailabletask.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/photosgallery/collectionframework/thumbnailcreator/src/glxtnfilteravailabletask.cpp Thu Dec 17 08:45:44 2009 +0200 @@ -0,0 +1,189 @@ +/* +* Copyright (c) 2008-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: Task used for thumbnail availability filter. +* +*/ + + + + +/** + * @internal reviewed 31/07/2007 by Simon Brooks + */ + +#include "glxtnfilteravailabletask.h" + +#include +#include + +#include "glxtnfileinfo.h" +#include "mglxtnstorage.h" +#include "mglxtnthumbnailcreatorclient.h" + +// ----------------------------------------------------------------------------- +// NewL +// ----------------------------------------------------------------------------- +// +CGlxtnFilterAvailableTask* CGlxtnFilterAvailableTask::NewL( + const TArray& aItemArray, const TSize& aSize, + MGlxtnThumbnailCreatorClient& aClient) + { + TRACER("CGlxtnFilterAvailableTask* CGlxtnFilterAvailableTask::NewL()"); + CGlxtnFilterAvailableTask* task = new (ELeave) CGlxtnFilterAvailableTask( + aSize, aClient); + CleanupStack::PushL(task); + task->ConstructL(aItemArray); + CleanupStack::Pop(task); + return task; + } + +// ----------------------------------------------------------------------------- +// Constructor +// ----------------------------------------------------------------------------- +// +CGlxtnFilterAvailableTask::CGlxtnFilterAvailableTask(const TSize& aSize, + MGlxtnThumbnailCreatorClient& aClient) : + CGlxtnClientTask(KGlxtnTaskIdFilterAvailable, KGlxIdNone, aClient), + iSize(aSize) + { + TRACER("CGlxtnFilterAvailableTask::CGlxtnFilterAvailableTask()"); + } + +// ----------------------------------------------------------------------------- +// ConstructL +// ----------------------------------------------------------------------------- +// +void CGlxtnFilterAvailableTask::ConstructL( + const TArray& aItemArray) + { + TRACER("void CGlxtnFilterAvailableTask::ConstructL()"); + TInt count = aItemArray.Count(); + for ( TInt i = 0; i < count; i++ ) + { + iIdArray.AppendL(aItemArray[i]); + } + } + +// ----------------------------------------------------------------------------- +// Destructor +// ----------------------------------------------------------------------------- +// +CGlxtnFilterAvailableTask::~CGlxtnFilterAvailableTask() + { + TRACER("CGlxtnFilterAvailableTask::~CGlxtnFilterAvailableTask()"); + delete iFileInfo; + iIdArray.Close(); + } + +// ----------------------------------------------------------------------------- +// DoStartL +// ----------------------------------------------------------------------------- +// +TBool CGlxtnFilterAvailableTask::DoStartL(TRequestStatus& aStatus) + { + TRACER("TBool CGlxtnFilterAvailableTask::DoStartL()"); + iIndex = 0; + + GLX_ASSERT_DEBUG( !iFileInfo, Panic( EGlxPanicAlreadyInitialised ), + "iFileInfo not NULL" ); + iFileInfo = new (ELeave) CGlxtnFileInfo; + + return GetFileInfoL(aStatus); + } + +// ----------------------------------------------------------------------------- +// DoCancel +// ----------------------------------------------------------------------------- +// +void CGlxtnFilterAvailableTask::DoCancel() + { + TRACER("void CGlxtnFilterAvailableTask::DoCancel()"); + Storage()->StorageCancel(); + } + +// ----------------------------------------------------------------------------- +// DoRunL +// ----------------------------------------------------------------------------- +// +TBool CGlxtnFilterAvailableTask::DoRunL(TRequestStatus& aStatus) + { + TRACER("TBool CGlxtnFilterAvailableTask::DoRunL()"); + TInt result = aStatus.Int(); + User::LeaveIfError(result); + + TBool active = EFalse; + + switch ( iState ) + { + case EStateFetchingUri: + Storage()->IsThumbnailAvailableL(iIdArray[iIndex], *iFileInfo, + iSize, &aStatus); + iState = EStateChecking; + active = ETrue; + break; + + case EStateChecking: + if ( KGlxThumbnailNotAvailable == result ) + { + iIndex++; + } + else + { + iIdArray.Remove(iIndex); + } + + active = GetFileInfoL(aStatus); + break; + + default: + GLX_ASSERT_ALWAYS( EFalse, Panic( EGlxPanicIllegalState ), + "CGlxtnFilterAvailableTask: Illegal state" ); + break; + } + + return active; + } + +// ----------------------------------------------------------------------------- +// DoRunError +// ----------------------------------------------------------------------------- +// +TBool CGlxtnFilterAvailableTask::DoRunError(TInt aError) + { + TRACER("CGlxtnFilterAvailableTask::DoRunError()"); + Client().FilterAvailableComplete(iIdArray, aError); + + return EFalse; + } + +// ----------------------------------------------------------------------------- +// GetFileInfoL +// ----------------------------------------------------------------------------- +// +TBool CGlxtnFilterAvailableTask::GetFileInfoL(TRequestStatus& aStatus) + { + TRACER("CGlxtnFilterAvailableTask::GetFileInfoL()"); + if ( iIndex < iIdArray.Count() ) + { + Client().FetchFileInfoL(iFileInfo, iIdArray[iIndex], &aStatus); + iState = EStateFetchingUri; + + return ETrue; + } + + // Finished checking the array + Client().FilterAvailableComplete(iIdArray, KErrNone); + + return EFalse; + }