diff -r 5b6f26637ad3 -r f4a778e096c2 phonebookengines/VirtualPhonebook/VPbkSimStoreImpl/src/CNumberMatchOperation.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookengines/VirtualPhonebook/VPbkSimStoreImpl/src/CNumberMatchOperation.cpp Wed Sep 01 12:29:52 2010 +0100 @@ -0,0 +1,145 @@ +/* +* Copyright (c) 2002-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: A command that finds the contacts that matches to given number +* +*/ + + + +// INCLUDE FILES +#include "CNumberMatchOperation.h" + +#include +#include "CVPbkSimContact.h" +#include "CVPbkSimCntField.h" +#include "CSimPhoneNumberIndex.h" +#include "RVPbkStreamedIntArray.h" +#include "MVPbkSimFindObserver.h" +#include "MVPbkSimCommandObserver.h" + +namespace VPbkSimStoreImpl { + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CNumberMatchOperation::CNumberMatchOperation +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CNumberMatchOperation::CNumberMatchOperation( MVPbkSimFindObserver& aObserver, + CSimPhoneNumberIndex& aSimPhoneNumberIndex, TInt aNumDigits, + MVPbkSimCntStore& aStore ) + : CActive( EPriorityStandard ), + iObserver( aObserver ), + iNumberIndex( aSimPhoneNumberIndex ), + iNumDigits( aNumDigits ), + iStore( aStore ) + { + } + +// ----------------------------------------------------------------------------- +// CNumberMatchOperation::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CNumberMatchOperation::ConstructL( const TDesC& aPhoneNumber ) + { + CActiveScheduler::Add( this ); + iPhoneNumber = aPhoneNumber.Right( iNumDigits ).AllocL(); + } + +// ----------------------------------------------------------------------------- +// CNumberMatchOperation::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CNumberMatchOperation* CNumberMatchOperation::NewL( MVPbkSimFindObserver& aObserver, + CSimPhoneNumberIndex& aSimPhoneNumberIndex, + const TDesC& aPhoneNumber, TInt aNumDigits, MVPbkSimCntStore& aStore ) + { + CNumberMatchOperation* self = new( ELeave ) CNumberMatchOperation( aObserver, + aSimPhoneNumberIndex, aNumDigits, aStore ); + CleanupStack::PushL( self ); + self->ConstructL( aPhoneNumber ); + CleanupStack::Pop( self ); + return self; + } + +// Destructor +CNumberMatchOperation::~CNumberMatchOperation() + { + delete iPhoneNumber; + Cancel(); + } + +// ----------------------------------------------------------------------------- +// CNumberMatchOperation::RunL +// ----------------------------------------------------------------------------- +// +void CNumberMatchOperation::RunL() + { + VPbkEngUtils::RPhoneNumberLookuplookup = + iNumberIndex.Index().StartLookupL( *iPhoneNumber, iNumDigits ); + CleanupClosePushL( lookup ); + + RVPbkStreamedIntArray indexArray; + CleanupClosePushL( indexArray ); + + while ( !lookup.AtEnd() ) + { + MVPbkSimContact& cnt = lookup.Current(); + TInt simIndex = cnt.SimIndex(); + if ( indexArray.Find( simIndex ) == KErrNotFound ) + { + // Add sim index only if it hasn't been added + indexArray.AppendIntL( simIndex ); + } + iNumberIndex.Index().LookupNext( lookup ); + } + iObserver.FindCompleted( iStore, indexArray ); + CleanupStack::PopAndDestroy(2); // indexArray, lookup + } + +// ----------------------------------------------------------------------------- +// CNumberMatchOperation::DoCancel +// ----------------------------------------------------------------------------- +// +void CNumberMatchOperation::DoCancel() + { + // Nothing to cancel here + } + +// ----------------------------------------------------------------------------- +// CNumberMatchOperation::RunError +// ----------------------------------------------------------------------------- +// +TInt CNumberMatchOperation::RunError( TInt aError ) + { + iObserver.FindError( iStore, aError ); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CNumberMatchOperation::Execute +// ----------------------------------------------------------------------------- +// +void CNumberMatchOperation::Execute() + { + TRequestStatus* status = &iStatus; + User::RequestComplete( status, KErrNone ); + SetActive(); + } +} // namespace VPbkSimStoreImpl +// End of File