diff -r 000000000000 -r e686773b3f54 phonebookengines/contactsmodel/cntmatchlog/src/CntMatchLog.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookengines/contactsmodel/cntmatchlog/src/CntMatchLog.cpp Tue Feb 02 10:12:17 2010 +0200 @@ -0,0 +1,134 @@ +// Copyright (c) 2006-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: +// + +#include "CntMatchLog.h" +#include +#include + +CCntMatchLog* CCntMatchLog::NewL() + /** Creates a CCntMatchLog object for accessing the contacts model. + @capability None */ + { + CCntMatchLog* self = new (ELeave) CCntMatchLog; + return self; + } + +void CCntMatchLog::OpenContactsL() + /** Opens the contacts DB and stores a pointer to the DB in iContactDb. + @capability ReadUserData WriteUserData*/ + { + if( iContactDb) + { + return; + } + + TRAPD(err, iContactDb = CContactDatabase::OpenL()); + if(err == KErrNotFound) + { + iContactDb = CContactDatabase::CreateL(); + } + else + { + User::LeaveIfError(err); + } + } + +void CCntMatchLog::CloseContacts() + /** Closes the contacts DB and deletes the pointer to the DB. + @capability None */ + { + if( iContactDb) + { + delete iContactDb; + iContactDb = NULL; + } + } + +CCntMatchLog::~CCntMatchLog() + /** Closes the contacts DB */ + { + this->CloseContacts(); + } + +TLogContactItemId CCntMatchLog::MatchPhoneNumberL(const TDesC& aNumber, TInt aMatchLengthFromRight) + /** Attempts to find a contact item ID for the contact items which contains + the specified telephone number in a telephone, fax or SMS type field. + If more than one contact item contains the telephone number this should be + treated the same as no contact found. + + @capability ReadUserData + @param aNumber Phone number string + @param aMatchLengthFromRight Number of digits from the right of the phone number to use + @return The contact Id found that contains the phone number. KLogNullContactId if none or more than one is found. */ + { + CContactIdArray* array = NULL; + TLogContactItemId contactId=KLogNullContactId; + + array = iContactDb->MatchPhoneNumberL(aNumber, aMatchLengthFromRight); + + // Only set contactId if we have exactly one match + if (array->Count() == 1) + { + // we have only one match so set the contact id + contactId = static_cast((*array)[0]); + } + delete array; + return contactId; + } + +void CCntMatchLog::ReadContactNameL(TLogContactItemId aContactId, TDes &aName, TLogContactNameFormat aNameFormat) + /** Gets the text data for the family and given name fields of a given contact Id. + + @capability ReadUserData + @param aContactId Contact Id to find data for + @param aName On return contains the family and given name in the desired format if found, a 0 length string otherwise. + @param aNameFormat Desired format of returned string - Chinese or Western format */ + { + + // Specify what fields to fetch and concatenate + CContactTextDef* textDef = CContactTextDef::NewLC(); + _LIT(KRemotePartyNameSeparator, " "); + + if(ELogChineseFormat == aNameFormat) + { + textDef->AppendL(TContactTextDefItem(KUidContactFieldFamilyName, KRemotePartyNameSeparator)); + textDef->AppendL(TContactTextDefItem(KUidContactFieldGivenName)); + } + else //ELogWesternFormat == iContactNameFormat + { + textDef->AppendL(TContactTextDefItem(KUidContactFieldGivenName, KRemotePartyNameSeparator)); + textDef->AppendL(TContactTextDefItem(KUidContactFieldFamilyName)); + } + textDef->SetExactMatchOnly(ETrue); + iContactDb->ReadContactTextDefL(aContactId, aName, textDef); + CleanupStack::PopAndDestroy(textDef); + } + + +CCntMatchLog::CCntMatchLog() + { + } + +const TImplementationProxy ImplementationTable[] = + { + IMPLEMENTATION_PROXY_ENTRY(0x2000862C, CCntMatchLog::NewL) + }; + +EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount) + { + aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy); + return ImplementationTable; + } +