pimprotocols/pbap/server/pbapvcardexporterutil.cpp
changeset 65 ae724a111993
parent 27 de1630741fbe
child 63 f4a778e096c2
--- a/pimprotocols/pbap/server/pbapvcardexporterutil.cpp	Wed Aug 18 09:39:00 2010 +0300
+++ b/pimprotocols/pbap/server/pbapvcardexporterutil.cpp	Thu Sep 02 20:16:15 2010 +0300
@@ -21,6 +21,8 @@
 #include <s32strm.h>
 #include <vprop.h>
 #include <vcard.h>
+#include <centralrepository.h>
+
 #ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
 #include "vcard3.h"
 #include "cntdb_internal.h"
@@ -29,6 +31,13 @@
 #include "pbaplogeng.h"
 #include "btaccesshostlog.h"
 
+/* These constants are properly defined in telconfigcrkeys.h, however we 
+are not allowed to include that from here.  As a temporary fix the constants 
+from that file are re-defined here. */
+const TUid KCRUidTelConfiguration = {0x102828B8};
+const TUint32 KTelMatchDigits = 0x00000001;
+/* And similarly this constant is defined in ccsdefs.h */
+const TInt KDefaultGsmNumberMatchLength = 7;
 
 //constants
 _LIT8(KVersitTokenCALLDATETIME,"X-IRMC-CALL-DATETIME");
@@ -59,6 +68,23 @@
 	LOG_FUNC
 	CVersitTlsData::VersitTlsDataL();		
 	User::LeaveIfError(iTzClient.Connect());
+	
+	// Read the amount of digits to be used in contact matching
+	// The key is properly owned by PhoneApp, however we cannot include
+	// that header file from here, so a temporary fix has been done to 
+	// use locally defined versions.  If there is a problem here it is 
+	// likely because these values have gone out of sync.
+	CRepository* repository = CRepository::NewLC(KCRUidTelConfiguration);
+    if ( repository->Get(KTelMatchDigits, iMatchDigitCount) == KErrNone )
+        {
+        // Min is 7
+        iMatchDigitCount = Max(iMatchDigitCount, KDefaultGsmNumberMatchLength);
+        }
+    else
+        {
+        iMatchDigitCount = KDefaultGsmNumberMatchLength;
+        }
+	CleanupStack::PopAndDestroy(repository);
 	}
 
 CPbapVCardExporterUtil::~CPbapVCardExporterUtil()
@@ -161,16 +187,12 @@
 TContactItemId CPbapVCardExporterUtil::FindContactIdFromNumberL(const TDesC& aNumber)
 	{
 	TContactItemId ret = KNullContactId;
-	CContactItemFieldDef* fieldDef;
-	fieldDef = new(ELeave) CContactItemFieldDef;
-	CleanupStack::PushL(fieldDef);
-	fieldDef->AppendL(KUidContactFieldPhoneNumber);
-	CContactIdArray* contactIdArray = iDatabase.FindLC(aNumber, fieldDef);
+	CContactIdArray* contactIdArray = iDatabase.MatchPhoneNumberL(aNumber, iMatchDigitCount);
 	if (contactIdArray->Count() > 0)
 		{
 		ret = (*contactIdArray)[0];
 		}
-	CleanupStack::PopAndDestroy(2); // contactIdArray, fieldDef
+	delete contactIdArray;
 	return ret;
 	}