phonebookengines/contactsmodel/cntmatchlog/src/CntMatchLog.cpp
changeset 0 e686773b3f54
child 24 0ba2181d7c28
--- /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 <e32def.h>
+#include <ecom/implementationproxy.h>
+
+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<TLogContactItemId>((*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;
+    }
+