QContactDetail *CntTransformOrganisation::transformItemField(const CContactItemField& field, const QContact &contact) { QContactOrganization *organisation = new QContactOrganization(contact.detail<QContactOrganization>()); CContactTextField* storage = field.TextStorage(); QString orgDetail = QString::fromUtf16(storage->Text().Ptr(), storage->Text().Length()); for (int i = 0; i < field.ContentType().FieldTypeCount(); i++) { //Company if (field.ContentType().FieldType(i) == KUidContactFieldCompanyName) { organisation->setName(orgDetail); } //Department else if (field.ContentType().FieldType(i) == KUidContactFieldDepartmentName) { // Assume only a single department QStringList departments = QStringList(orgDetail); organisation->setDepartment(departments); } //Job title else if (field.ContentType().FieldType(i) == KUidContactFieldJobTitle) { organisation->setTitle(orgDetail); } //Assistant name else if (field.ContentType().FieldType(i) == KUidContactFieldAssistant) { organisation->setAssistantName(orgDetail); } } return organisation; }
QContactDetail *CntTransformOnlineAccount::transformItemField(const CContactItemField& field, const QContact &contact) { Q_UNUSED(contact); QContactOnlineAccount *onlineAccount = new QContactOnlineAccount(); CContactTextField* storage = field.TextStorage(); QString onlineAccountString = QString::fromUtf16(storage->Text().Ptr(), storage->Text().Length()); // Adding Online Account Detail. for (int i = 0; i < field.ContentType().FieldTypeCount(); i++) { if (field.ContentType().ContainsFieldType(KUidContactFieldVCardMapVOIP)) { onlineAccount->setAccountUri(onlineAccountString); onlineAccount->setSubTypes(QContactOnlineAccount::SubTypeSipVoip); } else if (field.ContentType().ContainsFieldType(KUidContactFieldVCardMapSWIS)) { onlineAccount->setAccountUri(onlineAccountString); onlineAccount->setSubTypes(QContactOnlineAccount::SubTypeVideoShare); } else if (field.ContentType().ContainsFieldType(KUidContactFieldVCardMapSIPID)) { onlineAccount->setAccountUri(onlineAccountString); onlineAccount->setSubTypes(QContactOnlineAccount::SubTypeSip); } } // set context for (int i = 0; i < field.ContentType().FieldTypeCount(); i++) { setContexts(field.ContentType().FieldType(i), *onlineAccount); } return onlineAccount; }
QContactDetail *CntTransformOnlineAccount::transformItemField(const CContactItemField& field, const QContact &contact) { QList<QContactDetail> onlineAccounts = contact.details(QContactOnlineAccount::DefinitionName); TLex label(field.Label()); int counter = -1; if (label.Val(counter) != KErrNone) { return NULL; } //check what online account detail the provided field belongs to. if there is no such detail yet, //let's create it. if (onlineAccounts.count() <= counter) { for (int i = onlineAccounts.count(); i <= counter; i++) { QContactOnlineAccount *account = new QContactOnlineAccount(); QContact& currentContact = const_cast<QContact&>(contact); currentContact.saveDetail(account); delete account; } onlineAccounts = contact.details(QContactOnlineAccount::DefinitionName); } QContactOnlineAccount *onlineAccount = new QContactOnlineAccount(onlineAccounts.at(counter)); CContactTextField* storage = field.TextStorage(); QString onlineAccountString = QString::fromUtf16(storage->Text().Ptr(), storage->Text().Length()); // Adding Online Account Detail. for (int i = 0; i < field.ContentType().FieldTypeCount(); i++) { //Account URI if (field.ContentType().ContainsFieldType(KUidContactFieldIMPP)) { onlineAccount->setAccountUri(onlineAccountString); onlineAccount->setSubTypes(QContactOnlineAccount::SubTypeImpp); } else if (field.ContentType().ContainsFieldType(KUidContactFieldVCardMapVOIP)) { onlineAccount->setAccountUri(onlineAccountString); onlineAccount->setSubTypes(QContactOnlineAccount::SubTypeSipVoip); } else if (field.ContentType().ContainsFieldType(KUidContactFieldVCardMapSWIS)) { onlineAccount->setAccountUri(onlineAccountString); onlineAccount->setSubTypes(QContactOnlineAccount::SubTypeVideoShare); } else if (field.ContentType().ContainsFieldType(KUidContactFieldVCardMapSIPID)) { onlineAccount->setAccountUri(onlineAccountString); onlineAccount->setSubTypes(QContactOnlineAccount::SubTypeSip); } //Service Provider else if (field.ContentType().FieldType(i) == KUidContactFieldServiceProvider) { onlineAccount->setServiceProvider(onlineAccountString); } } // set context for (int i = 0; i < field.ContentType().FieldTypeCount(); i++) { setContexts(field.ContentType().FieldType(i), *onlineAccount); } return onlineAccount; }
QContactDetail *CntTransformGender::transformItemField(const CContactItemField& field, const QContact &contact) { Q_UNUSED(contact); QContactGender *gender = new QContactGender(); CContactTextField* storage = field.TextStorage(); QString genderInfo = QString::fromUtf16(storage->Text().Ptr(), storage->Text().Length()); gender->setGender(genderInfo); return gender; }
QContactDetail *CntTransformNote::transformItemField(const CContactItemField& field, const QContact &contact) { Q_UNUSED(contact); QContactNote *note = new QContactNote(); CContactTextField* storage = field.TextStorage(); QString noteString = QString::fromUtf16(storage->Text().Ptr(), storage->Text().Length()); note->setNote(noteString); return note; }
QContactDetail *CntTransformAvatar::transformItemField(const CContactItemField& field, const QContact &contact) { Q_UNUSED(contact); QContactAvatar *avatar = new QContactAvatar(); if (field.ContentType().ContainsFieldType(KUidContactFieldCodImage)) { CContactTextField* storage = field.TextStorage(); QString avatarString = QString::fromUtf16(storage->Text().Ptr(), storage->Text().Length()); avatar->setImageUrl(QUrl(avatarString)); } return avatar; }
QContactDetail *CntTransformPhoneNumber::transformItemField(const CContactItemField& field, const QContact &contact) { Q_UNUSED(contact); QContactPhoneNumber *phoneNumber = new QContactPhoneNumber(); CContactTextField* storage = field.TextStorage(); QString number = QString::fromUtf16(storage->Text().Ptr(), storage->Text().Length()); phoneNumber->setNumber(number); if (field.ContentType().ContainsFieldType(KUidContactFieldPhoneNumber)) { if (field.ContentType().ContainsFieldType(KUidContactFieldVCardMapVOICE)) { phoneNumber->setSubTypes(QContactPhoneNumber::SubTypeLandline); } else if (field.ContentType().ContainsFieldType(KUidContactFieldVCardMapCELL)) { phoneNumber->setSubTypes(QContactPhoneNumber::SubTypeMobile); } else if (field.ContentType().ContainsFieldType(KUidContactFieldVCardMapPAGER)) { phoneNumber->setSubTypes(QContactPhoneNumber::SubTypePager); } else if (field.ContentType().ContainsFieldType(KUidContactFieldVCardMapBBS)) { phoneNumber->setSubTypes(QContactPhoneNumber::SubTypeBulletinBoardSystem); } else if (field.ContentType().ContainsFieldType(KUidContactFieldVCardMapCAR)) { phoneNumber->setSubTypes(QContactPhoneNumber::SubTypeCar); } else if (field.ContentType().Mapping() == KUidContactFieldVCardMapAssistantTel) { phoneNumber->setSubTypes(QContactPhoneNumber::SubTypeAssistant); } else if (field.ContentType().ContainsFieldType(KUidContactFieldVCardMapVIDEO)) { phoneNumber->setSubTypes(QContactPhoneNumber::SubTypeVideo); } } else if (field.ContentType().ContainsFieldType(KUidContactFieldFax)) { phoneNumber->setSubTypes(QContactPhoneNumber::SubTypeFax); } else if (field.ContentType().ContainsFieldType(KUidContactFieldDTMF)) { phoneNumber->setSubTypes(QContactPhoneNumber::SubTypeDtmfMenu); } // set context for (int i = 0; i < field.ContentType().FieldTypeCount(); i++) { setContexts(field.ContentType().FieldType(i), *phoneNumber); } return phoneNumber; }
HBufC* CAgentAddressbook::ReadFieldAsTextL(const CContactItemField& itemField) { if (itemField.Storage() == NULL || !itemField.Storage()->IsFull()) return HBufC::NewL(0); switch (itemField.StorageType()) { case KStorageTypeText: { CContactTextField* txtField = itemField.TextStorage(); if (txtField == NULL) return HBufC::NewL(0); return txtField->Text().AllocL(); } case KStorageTypeDateTime: { CContactDateField* dateField = itemField.DateTimeStorage(); if (dateField == NULL) return HBufC::NewL(0); TTime time = dateField->Time(); _LIT(KFORMAT_DATE, "%D%M%Y%/0%1%/1%2%/2%3%/3"); TBuf<30> strTime; time.FormatL(strTime, KFORMAT_DATE); return strTime.AllocL(); } default: return HBufC::NewL(0); } }
/** * Check that the field of type aFieldType has the same content as * aExpectedContent * @param aFieldset Contact item fieldset * @param aFieldType Field type to test * @param aExpectedContent Expected data */ void CheckFieldContentL(CContactItemFieldSet& aFieldset, TFieldType aFieldType, const TDesC& aExpectedContent) { TInt pos = aFieldset.Find(aFieldType); CContactItemField& field = aFieldset[pos]; CContactTextField* textField = field.TextStorage(); test(textField != NULL); test(textField->Text() == aExpectedContent); }
/** Try to match the phone number given with existing numbers in the database. */ void CCrudOperations::MatchContactsByPhoneNumL() { _LIT(KPass, "Pass"); _LIT(KFail, "Fail"); _LIT(KMatchOutputFormat1, "Number of phone numbers matched: %d -- %s\n"); _LIT(KMatchOutputFormat2, "Phone number lookup took: %d s %03d\n"); _LIT(KMatchOutputFormat3, "The contact's first name: %S\n"); _LIT(KPhoneNumberToFind, "241867306233253164487125"); // this number belongs to the 1000th // contact item in the database, which // has a photo. const TInt KMatchLengthFromRight(7); // match on the number without the dialling code prefix // to avoid differences like +447876... and 07876... _LIT(KPhoneNumberTestTitle, "\nBeginning Phone Number Match testing...\n"); iTest->Printf(KPhoneNumberTestTitle); TCntPerfTimer timer; timer.StartTimer(); // Search the database... CContactIdArray* idArray = iDb->MatchPhoneNumberL(KPhoneNumberToFind, KMatchLengthFromRight); CleanupStack::PushL(idArray); TInt numMatches = idArray->Count(); iTest->Printf(KMatchOutputFormat1, numMatches, numMatches ? KPass().Ptr() : KFail().Ptr()); if (numMatches) { //fetch first contact item in array CContactItem* item = iDb->ReadContactLC((*idArray)[0]); timer.StopTimer(); CContactItemFieldSet& fieldSet = item->CardFields(); TInt firstNameFieldId = fieldSet.Find(KUidContactFieldGivenName); if (firstNameFieldId == KErrNotFound) { User::Leave(KErrNotFound); } CContactItemField& firstNameField = fieldSet[firstNameFieldId]; CContactTextField* firstNameText = firstNameField.TextStorage(); TPtrC firstName(firstNameText->Text()); iTest->Printf(KMatchOutputFormat3, &firstName); CleanupStack::PopAndDestroy(item); } else { timer.StopTimer(); } CleanupStack::PopAndDestroy(idArray); TInt result = timer.Result(); TBuf<64> formattable; formattable.Format(KMatchOutputFormat2, result / 1000000, (result / 1000) % 1000); iTest->Printf(formattable); }
QContactDetail *CntTransformNickname::transformItemField(const CContactItemField& field, const QContact &contact) { QContactNickname *name = new QContactNickname(contact.detail<QContactNickname>()); CContactTextField* storage = field.TextStorage(); QString nameValue = QString::fromUtf16(storage->Text().Ptr(), storage->Text().Length()); for (int i = 0; i < field.ContentType().FieldTypeCount(); i++) { //Prefix if (field.ContentType().FieldType(i) == KUidContactFieldSecondName) { name->setNickname(nameValue); } } return name; }
QContactDetail *CntTransformPresence::transformItemField(const CContactItemField& field, const QContact &contact) { QList<QContactDetail> presenceDetails = contact.details(QContactPresence::DefinitionName); TLex label(field.Label()); int counter = -1; if (label.Val(counter) != KErrNone) { return NULL; } //check what presence detail the provided field belongs to. if there is no such detail yet, //let's create it. if (presenceDetails.count() <= counter) { for (int i = presenceDetails.count(); i <= counter; i++) { QContactPresence *presence = new QContactPresence(); QContact& currentContact = const_cast<QContact&>(contact); currentContact.saveDetail(presence); delete presence; } presenceDetails = contact.details(QContactPresence::DefinitionName); } QContactPresence *presenceDetail = new QContactPresence(presenceDetails.at(counter)); CContactTextField* storage = field.TextStorage(); QString presenceString = QString::fromUtf16(storage->Text().Ptr(), storage->Text().Length()); for (int i = 0; i < field.ContentType().FieldTypeCount(); i++) { //Presence if (field.ContentType().FieldType(i) == KUidContactFieldPresence) { QContactPresence::PresenceState presenceState = decodePresence(presenceString); presenceDetail->setPresenceState(presenceState); } //Status Message else if (field.ContentType().FieldType(i) == KUidContactFieldStatusMsg) { presenceDetail->setPresenceStateText(presenceString); } } // set context for (int i = 0; i < field.ContentType().FieldTypeCount(); i++) { setContexts(field.ContentType().FieldType(i), *presenceDetail); } return presenceDetail; }
QContactDetail *CntTransformUrl::transformItemField(const CContactItemField& field, const QContact &contact) { Q_UNUSED(contact); QContactUrl *url = new QContactUrl(); CContactTextField* storage = field.TextStorage(); QString urlString = QString::fromUtf16(storage->Text().Ptr(), storage->Text().Length()); url->setUrl(urlString); url->setSubType(QContactUrl::SubTypeHomePage); for (int i = 0; i < field.ContentType().FieldTypeCount(); i++) { setContexts(field.ContentType().FieldType(i), *url); } return url; }
void CReadContactsAO::GetTextFieldFromFieldSet(CContactItemFieldSet& aFieldSet, const TUid aField,TDesC& name) { TInt index = aFieldSet.Find(aField); if ((index >= 0) && (index < aFieldSet.Count())) { CContactItemField& textfield = aFieldSet[index]; CContactTextField* textValue = textfield.TextStorage(); ((TDes&)name).Copy(textValue->Text()); } }
QContactDetail *CntTransformFamily::transformItemField(const CContactItemField& field, const QContact &contact) { QContactFamily *family = new QContactFamily(contact.detail<QContactFamily>()); CContactTextField* storage = field.TextStorage(); QString familyString = QString::fromUtf16(storage->Text().Ptr(), storage->Text().Length()); for (int i = 0; i < field.ContentType().FieldTypeCount(); i++) { //Spouse if (field.ContentType().FieldType(i) == KUidContactFieldSpouse) { family->setSpouse(familyString); } //Children else if (field.ContentType().FieldType(i) == KUidContactFieldChildren) { QStringList childrenList = family->children(); childrenList.append(familyString); family->setChildren(childrenList); } } return family; }
QContactDetail *CntTransformName::transformItemField(const CContactItemField& field, const QContact &contact) { QContactName *name = new QContactName(contact.detail<QContactName>()); CContactTextField* storage = field.TextStorage(); QString nameValue = QString::fromUtf16(storage->Text().Ptr(), storage->Text().Length()); for (int i = 0; i < field.ContentType().FieldTypeCount(); i++) { //Prefix if (field.ContentType().FieldType(i) == KUidContactFieldPrefixName) { name->setPrefix(nameValue); } //First name else if (field.ContentType().FieldType(i) == KUidContactFieldGivenName) { name->setFirstName(nameValue); } //Middle name else if (field.ContentType().FieldType(i) == KUidContactFieldAdditionalName) { name->setMiddleName(nameValue); } //Last name else if (field.ContentType().FieldType(i) == KUidContactFieldFamilyName) { name->setLastName(nameValue); } //Suffix else if (field.ContentType().FieldType(i) == KUidContactFieldSuffixName) { name->setSuffix(nameValue); } // custom label else if (field.ContentType().FieldType(i) == KUidContactFieldTemplateLabel) { name->setCustomLabel(nameValue); } } return name; }
void CReadContactsAO::ReadContactL() { TBuf<150> fname; TBuf<150> lname; TBuf<150> mobile; TBuf<50> mobile1; TBuf<50> mobile2; TBuf<50> mobile3; TBuf<50> mobile4; TBuf<50> mobile5; TBuf<50> mobile6; CContactItem* contact; TInt cid=(*cArray)[iFlag]; contact = iPhoneContacts->ReadContactL(cid); mobile.Copy(_L("")); mobile1.Copy(_L("")); mobile2.Copy(_L("")); mobile3.Copy(_L("")); mobile4.Copy(_L("")); mobile5.Copy(_L("")); mobile6.Copy(_L("")); CContactItemFieldSet& fieldSet = contact->CardFields(); for (TInt j = 0; j < fieldSet.Count(); j++) { // Home mobile nos if (fieldSet[j].ContentType().ContainsFieldType(KUidContactFieldPhoneNumber) && fieldSet[j].TextStorage()->Text().Length() > 0 && fieldSet[j].ContentType().ContainsFieldType(KUidContactFieldVCardMapHOME) && fieldSet[j].ContentType().ContainsFieldType(KUidContactFieldVCardMapCELL)) { CContactItemField& textfield = fieldSet[j]; CContactTextField* textValue = textfield.TextStorage(); ((TDes&)mobile2).Copy(textValue->Text()); continue; } // Work mobile nos if (fieldSet[j].ContentType().ContainsFieldType(KUidContactFieldPhoneNumber) && fieldSet[j].TextStorage()->Text().Length() > 0 && fieldSet[j].ContentType().ContainsFieldType(KUidContactFieldVCardMapWORK) && fieldSet[j].ContentType().ContainsFieldType(KUidContactFieldVCardMapCELL)) { CContactItemField& textfield = fieldSet[j]; CContactTextField* textValue = textfield.TextStorage(); ((TDes&)mobile3).Copy(textValue->Text()); continue; } // Mobile nos if (fieldSet[j].ContentType().ContainsFieldType(KUidContactFieldPhoneNumber) && fieldSet[j].TextStorage()->Text().Length() > 0 && fieldSet[j].ContentType().ContainsFieldType(KUidContactFieldVCardMapCELL)) { CContactItemField& textfield = fieldSet[j]; CContactTextField* textValue = textfield.TextStorage(); ((TDes&)mobile1).Copy(textValue->Text()); continue; } // Home Telephone nos if (fieldSet[j].ContentType().ContainsFieldType(KUidContactFieldPhoneNumber) && fieldSet[j].TextStorage()->Text().Length() > 0 && fieldSet[j].ContentType().ContainsFieldType(KUidContactFieldVCardMapHOME) && fieldSet[j].ContentType().ContainsFieldType(KUidContactFieldVCardMapTEL)) { CContactItemField& textfield = fieldSet[j]; CContactTextField* textValue = textfield.TextStorage(); ((TDes&)mobile5).Copy(textValue->Text()); continue; } // Work Telephone nos if (fieldSet[j].ContentType().ContainsFieldType(KUidContactFieldPhoneNumber) && fieldSet[j].TextStorage()->Text().Length() > 0 && fieldSet[j].ContentType().ContainsFieldType(KUidContactFieldVCardMapWORK) && fieldSet[j].ContentType().ContainsFieldType(KUidContactFieldVCardMapTEL)) { CContactItemField& textfield = fieldSet[j]; CContactTextField* textValue = textfield.TextStorage(); ((TDes&)mobile6).Copy(textValue->Text()); continue; } // Telephones if (fieldSet[j].ContentType().ContainsFieldType(KUidContactFieldPhoneNumber) && fieldSet[j].TextStorage()->Text().Length() > 0 && fieldSet[j].ContentType().ContainsFieldType(KUidContactFieldVCardMapTEL)) { CContactItemField& textfield = fieldSet[j]; CContactTextField* textValue = textfield.TextStorage(); ((TDes&)mobile4).Copy(textValue->Text()); continue; } } if(mobile1.Compare(_L("")) == 0 || mobile1.Compare(_L(" ")) == 0) { if(mobile2.Compare(_L("")) == 0 || mobile2.Compare(_L(" ")) == 0) { if(mobile3.Compare(_L("")) == 0 || mobile3.Compare(_L(" ")) == 0) { if(mobile4.Compare(_L("")) == 0 || mobile4.Compare(_L(" ")) == 0) { if(mobile5.Compare(_L("")) == 0 || mobile5.Compare(_L(" ")) == 0) { if(mobile6.Compare(_L("")) == 0 || mobile6.Compare(_L(" ")) == 0) { } else mobile.Copy(mobile6); } else mobile.Copy(mobile5); } else mobile.Copy(mobile4); } else mobile.Copy(mobile3); } else mobile.Copy(mobile2); } else mobile.Copy(mobile1); if(mobile.Length() != 0) { GetTextFieldFromFieldSet(fieldSet, KUidContactFieldGivenName, fname); GetTextFieldFromFieldSet(fieldSet, KUidContactFieldFamilyName, lname); if(lname.Compare(_L("")) !=0 ) { lname.Append(_L(" ")); fname.Insert(0,lname); } iAppView.iContactsArray->AppendL(fname); iAppView.iContactsCount++; iAppView.iContactsIdArray->AppendL(iFlag); } delete contact; }
/** Try to match the phone number given with existing numbers in the database. */ void CCrudOperations::MatchContactsByEmailAndSipL() { _LIT(KPass, "Pass"); _LIT(KFail, "Fail"); _LIT(KEmailMatchOutputFormat1,"Number of email addresses matched: %d -- %s\n"); _LIT(KEmailMatchOutputFormat2,"Email address lookup took: %d s %03d\n"); _LIT(KMatchOutputFormat3, "The contact's first name: %S\n"); // Test Email address matching // this address belongs to the 1000th contact item in the database, which has a photo. _LIT(KEmailAddressToFind, "*****@*****.**"); _LIT(KEmailTestTitle, "\nBeginning Email Address Match testing...\n"); iTest->Printf(KEmailTestTitle); TCntPerfTimer timer; timer.StartTimer(); // Search the database... CContactItemFieldDef* fieldsToSearch = new (ELeave) CContactItemFieldDef(); CleanupStack::PushL(fieldsToSearch); fieldsToSearch->AppendL(KUidContactFieldEMail); CContactIdArray* idArray = iDb->FindLC(KEmailAddressToFind, fieldsToSearch); TInt numMatches = idArray->Count(); iTest->Printf(KEmailMatchOutputFormat1, numMatches, numMatches ? KPass().Ptr() : KFail().Ptr()); if (numMatches) { //fetch first contact item in array CContactItem* item = iDb->ReadContactLC((*idArray)[0]); CContactItemFieldSet& fieldSet = item->CardFields(); TInt firstNameFieldId = fieldSet.Find(KUidContactFieldGivenName); if (firstNameFieldId == KErrNotFound) { User::Leave(KErrNotFound); } CContactItemField& firstNameField = fieldSet[firstNameFieldId]; CContactTextField* firstNameText = firstNameField.TextStorage(); TPtrC firstName(firstNameText->Text()); iTest->Printf(KMatchOutputFormat3, &firstName); CleanupStack::PopAndDestroy(item); } timer.StopTimer(); CleanupStack::PopAndDestroy(2, fieldsToSearch); // and idArray TInt result = timer.Result(); TBuf<64> formattable; formattable.Format(KEmailMatchOutputFormat2, result / 1000000, (result / 1000) % 1000); iTest->Printf(formattable); // reset variables fieldsToSearch = NULL; idArray = NULL; numMatches = 0; timer.ResetTimer(); result = 0; formattable.Zero(); // Test SIP address matching // this address belongs to the 1000th contact item in the database, which has a photo. _LIT(KSipAddressToFind, "sip:[email protected]"); _LIT(KSipTestTitle, "\nBeginning SIP Address Match testing...\n"); _LIT(KSipMatchOutputFormat1,"Number of SIP addresses matched: %d -- %s\n"); _LIT(KSipMatchOutputFormat2,"SIP address lookup took: %d s %03d\n"); iTest->Printf(KSipTestTitle); timer.StartTimer(); // Search the database... fieldsToSearch = new (ELeave) CContactItemFieldDef(); CleanupStack::PushL(fieldsToSearch); fieldsToSearch->AppendL(KUidContactFieldSIPID); idArray = iDb->FindLC(KSipAddressToFind, fieldsToSearch); numMatches = idArray->Count(); iTest->Printf(KSipMatchOutputFormat1, numMatches, numMatches ? KPass().Ptr() : KFail().Ptr()); if (numMatches) { //fetch first contact item in array CContactItem* item = iDb->ReadContactLC((*idArray)[0]); CContactItemFieldSet& fieldSet = item->CardFields(); TInt firstNameFieldId = fieldSet.Find(KUidContactFieldGivenName); if (firstNameFieldId == KErrNotFound) { User::Leave(KErrNotFound); } CContactItemField& firstNameField = fieldSet[firstNameFieldId]; CContactTextField* firstNameText = firstNameField.TextStorage(); TPtrC firstName(firstNameText->Text()); iTest->Printf(KMatchOutputFormat3, &firstName); CleanupStack::PopAndDestroy(item); } timer.StopTimer(); CleanupStack::PopAndDestroy(2, fieldsToSearch); // and idArray result = timer.Result(); formattable.Format(KSipMatchOutputFormat2, result / 1000000, (result / 1000) % 1000); iTest->Printf(formattable); }