diff -r 41a7f70b3818 -r 5266b1f337bd phoneengine/PhoneCntFinder/ContactService/src/cphcntcontactmatchstrategy.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneengine/PhoneCntFinder/ContactService/src/cphcntcontactmatchstrategy.cpp Wed Sep 01 12:30:10 2010 +0100 @@ -0,0 +1,187 @@ +/* +* Copyright (c) 2006-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: Contact matching strategy +* +*/ + + +#include +#include +#include // KBestMatchingPhoneNumbers + +#include "cphcntcontactmatchstrategy.h" +#include "cphcntcontactstoreuris.h" +#include "CPhoneRawMatchNumberExtractor.h" + + + + +// ======== MEMBER FUNCTIONS ======== + + +CPhCntContactMatchStrategy::CPhCntContactMatchStrategy( + CVPbkContactManager& aContactManager, + CPhCntContactStoreUris& aContactStoreUris, + MVPbkContactFindObserver& aObserver, + TUint32 aMatchFlags ) : + iContactManager( aContactManager ), + iContactStoreUris( aContactStoreUris ), + iObserver( aObserver ), + iMatchFlags( aMatchFlags ) + { + iContactStoreUris.SetObserver( *this ); + } + + +// --------------------------------------------------------------------------- +// Second phase constructor +// --------------------------------------------------------------------------- +// +void CPhCntContactMatchStrategy::ConstructL() + { + User::LeaveIfError( CreateContactMatchStrategy() ); + + iNumberExtractor = new( ELeave )CCntRawPhoneNumberExtractor(); + iNumberExtractor->ConstructL(); + } + + +// --------------------------------------------------------------------------- +// Static constructor. +// --------------------------------------------------------------------------- +// +CPhCntContactMatchStrategy* CPhCntContactMatchStrategy::NewL( + CVPbkContactManager& aContactManager, + CPhCntContactStoreUris& aContactStoreUris, + MVPbkContactFindObserver& aObserver, + TUint32 aMatchFlags ) + { + CPhCntContactMatchStrategy* self = + new( ELeave ) CPhCntContactMatchStrategy( + aContactManager, + aContactStoreUris, + aObserver, + aMatchFlags ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// Destructor. +// --------------------------------------------------------------------------- +// +CPhCntContactMatchStrategy::~CPhCntContactMatchStrategy() + { + if( iNumberExtractor ) + { + iNumberExtractor->Release(); + } + delete iMatchStrategy; + delete iUriArray; + } + +// --------------------------------------------------------------------------- +// From MPhCntContactMatchStrategy +// Starts to find contacts which has aPhoneNumber. +// --------------------------------------------------------------------------- +// +void CPhCntContactMatchStrategy::FindMatchesL( const TDesC& aPhoneNumber ) + { + if( iMatchStrategy ) + { + DoMatchL( aPhoneNumber ); + } + else + { + const TInt err( CreateContactMatchStrategy() ); + if( !err ) + { + DoMatchL( aPhoneNumber ); + } + else + { + User::Leave( KErrNotFound ); + } + } + } + +// --------------------------------------------------------------------------- +// Creates contact match strategy and destroys the old one. +// --------------------------------------------------------------------------- +// +TInt CPhCntContactMatchStrategy::CreateContactMatchStrategy() + { + TInt err = KErrNone; + if( !iUriArray ) + { + TRAP( err, iUriArray = iContactStoreUris.ActiveContactStoresL() ); + } + + if( iUriArray ) + { + delete iMatchStrategy; + iMatchStrategy = NULL; + err = DoCreateMatchStrategy(); + + } + else + { + err = KErrGeneral; + } + + return err; + } + +// --------------------------------------------------------------------------- +// From base class MPhCntContactStoreEventObserver +// Updates match strategy. +// --------------------------------------------------------------------------- +// +void CPhCntContactMatchStrategy::ContactStoreAvailabilityChanged() + { + delete iUriArray; + iUriArray = NULL; + CreateContactMatchStrategy(); + } + +// --------------------------------------------------------------------------- +// Creates contact match strategy +// --------------------------------------------------------------------------- +// +TInt CPhCntContactMatchStrategy::DoCreateMatchStrategy() + { + CVPbkPhoneNumberMatchStrategy::TConfig config( + KBestMatchingPhoneNumbers, + *iUriArray, + CVPbkPhoneNumberMatchStrategy::EVPbkSequentialMatch, + iMatchFlags + ); + TRAPD( err, iMatchStrategy = CVPbkPhoneNumberMatchStrategy::NewL( + config, + iContactManager, + iObserver ) ); + return err; + } + +// --------------------------------------------------------------------------- +// Makes the actual matching request. +// --------------------------------------------------------------------------- +// +void CPhCntContactMatchStrategy::DoMatchL( + const TDesC& aNumber ) + { + iMatchStrategy->MatchL( aNumber ); + }