/** * Set the phone number field of the contact with id aId to contain the number aNumber * @param aDb Contact database * @param aId Contact item id * @param aNumber A telephone number */ void SetPhoneNumberField(CContactDatabase& aDb,TContactItemId aId,const TDesC& aNumber) { syncChecker->ResetMethodCallCountsL(); CContactItem* item = aDb.OpenContactLX(aId); CleanupStack::PushL(item); if (item->Type() == KUidContactICCEntry) { test(syncChecker->ValidateMethodCallCountL() == 2); } else { test(syncChecker->ValidateMethodCallCountL() == 0); } CContactItemFieldSet& fieldset = item->CardFields(); TInt pos = fieldset.Find(KUidContactFieldPhoneNumber); test(pos!=KErrNotFound); CContactItemField& field = fieldset[pos]; CContactTextField* textfield = field.TextStorage(); textfield->SetTextL(aNumber); syncChecker->ResetMethodCallCountsL(); aDb.CommitContactL(*item); if (item->Type() == KUidContactICCEntry) { test(syncChecker->ValidateMethodCallCountL() == 2); } else { test(syncChecker->ValidateMethodCallCountL() == 0); } CleanupStack::PopAndDestroy(2); // item, lock record }
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); } }
void TestPhoneMatchingL(CContactDatabase& aDb) { test.Next(_L("Test phone match")); CContactIdArray* array = aDb.MatchPhoneNumberL(KTelephoneNum,KMaxPhoneMatchLength); test(array->Count() == 4); delete array; syncChecker->SetValidateResponseL(MContactSynchroniser::ERead,KErrNone); syncChecker->SetValidateResponseL(MContactSynchroniser::EEdit, KErrNone); syncChecker->SetValidateWriteResponseL(KErrNone); aDb.SetDbViewContactType(KUidContactICCEntry); TContactItemId id = (*aDb.SortedItemsL())[0]; CContactItem* item = aDb.OpenContactLX(id); CleanupStack::PushL(item); CContactItemFieldSet& fieldset = item->CardFields(); const TInt pos = fieldset.Find(KUidContactFieldPhoneNumber); CContactItemField& field = fieldset[pos]; CContactTextField* textfield = field.TextStorage(); textfield->SetTextL(KTelephoneNumModified); aDb.CommitContactL(*item); CleanupStack::PopAndDestroy(2); //item, lock record CContactIdArray* array2 = aDb.MatchPhoneNumberL(KTelephoneNumModified,KMaxPhoneMatchLength); test(array2->Count() == 1); delete array2; }
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 *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; }
TBool CPredictiveSearchSynchronizer::ReadMailAddressesL(CContactItem& aContact) { PRINT(_L("CPredictiveSearchSynchronizer::ReadMailAddressesL")); // SELECT value FROM comm_addr // WHERE contact_id = [contact id value] AND type = [type value]; _LIT(KSelectMailAddrFormat, "SELECT %S FROM %S WHERE %S = %d AND %S = %d;"); const TInt KContactIdLength = 10; const TInt KCommAddrTypeLength = 2; // CPplCommAddrTable::EEmailAddress is enum TInt bufSize = KSelectMailAddrFormat().Length() + KCommAddrValue().Length() + KSqlContactCommAddrTableName().Length() + KCommAddrContactId().Length() + KContactIdLength + KCommAddrType().Length() + KCommAddrTypeLength; HBufC* sqlStatement = HBufC::NewLC(bufSize); sqlStatement->Des().AppendFormat(KSelectMailAddrFormat, &KCommAddrValue, &KSqlContactCommAddrTableName, &KCommAddrContactId, aContact.Id(), &KCommAddrType, CPplCommAddrTable::EEmailAddress); RSqlStatement stmnt; CleanupClosePushL(stmnt); PRINT1(_L("prepare SQL statement:%S"), sqlStatement); stmnt.PrepareL(iDatabase, *sqlStatement); const TInt KValueIndex = 0; TBool foundMailAddress(EFalse); TInt err(KErrNone); while ((err = stmnt.Next()) == KSqlAtRow) { TPtrC value; if (stmnt.ColumnText(KValueIndex, value) == KErrNone) { PRINT2(_L(" id=%d, found mail address=%S"), aContact.Id(), &value); CContactItemField* field = CContactItemField::NewLC(KStorageTypeText, KUidContactFieldEMail); CContactTextField* textfield = field->TextStorage(); textfield->SetTextL(value); aContact.AddFieldL(*field); // Takes ownership CleanupStack::Pop(field); foundMailAddress = ETrue; } } if (err != KSqlAtEnd) { PRINT1(_L("CPredictiveSearchSynchronizer::ReadMailAddressesL SQL err=%d"), err); User::Leave(err); } CleanupStack::PopAndDestroy(&stmnt); CleanupStack::PopAndDestroy(sqlStatement); PRINT1(_L("CPredictiveSearchSynchronizer::ReadMailAddressesL return %d"), foundMailAddress); return foundMailAddress; }
/** * 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); }
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; }
/** 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 *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; }
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 *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; }
//------------------------------------------------------------------------------------------------------------ void CPerfTestContact::InsertTextFieldL(TFieldType aID, const TDesC& aStringOfStuff ) { CContactItemField* itemFieldPtr = NULL; CContactTextField* textStoragePtr = NULL; itemFieldPtr = CContactItemField::NewLC( KStorageTypeText, aID ); textStoragePtr = itemFieldPtr->TextStorage(); // we don't have ownership here, hence no stack. textStoragePtr->SetTextL( aStringOfStuff ); textStoragePtr = NULL; // we've finished with this ptr now. iContactItem->AddFieldL( *itemFieldPtr ); // hand ownership over here CleanupStack::Pop( itemFieldPtr ); // and pop, }
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; }
TInt CContactTestSynchroniser::ValidateWriteContact(CContactICCEntry& aContactItem) { TRAPD(err, iContactSyncChecker->ValidateMethodCalledL() ); __ASSERT_ALWAYS(err == KErrNone, User::Invariant() ); TBool verboseLoggingEnabled(EFalse); TRAP(err, verboseLoggingEnabled = iContactSyncChecker->VerboseLoggingEnabledL() ); __ASSERT_ALWAYS(err == KErrNone, User::Invariant() ); if (verboseLoggingEnabled) { User::InfoPrint(_L("ValidateWriteContact")); } // Set the phonebook field, if the field doesn't exist, it should be added CContactItemFieldSet& fieldset = aContactItem.CardFields(); TInt n = fieldset.Find(KUidContactFieldICCPhonebook); if(n == KErrNotFound) { CContactItemField* field(NULL); TRAP_IGNORE(field = CContactItemField::NewL(KStorageTypeText, KUidContactFieldICCPhonebook) ); TRAP(err, aContactItem.AddFieldL(*field) ); CContactItemFieldSet& fieldset = aContactItem.CardFields(); n = fieldset.Find(KUidContactFieldICCPhonebook); __ASSERT_ALWAYS(err == KErrNone && n != KErrNotFound, User::Invariant() ); } CContactItemField& field = fieldset[n]; CContactTextField* textField = field.TextStorage(); TUid phonebookUid(TUid::Null() ); TRAP(err, phonebookUid = iContactSyncChecker->PhonebookUidL(aContactItem.TemplateRefId() ) ); __ASSERT_ALWAYS(err == KErrNone, User::Invariant() ); TBuf<128> buf; if(phonebookUid != KUidIccPhonebookNotFound) { TInt phonebookUidNum = phonebookUid.iUid; buf.AppendNum(phonebookUidNum); TRAP(err, textField->SetTextL(buf)); __ASSERT_ALWAYS(err == KErrNone, User::Invariant() ); } TBool validateWriteResponse(EFalse); TRAP(err, validateWriteResponse = iContactSyncChecker->ValidateWriteResponseL() ); __ASSERT_ALWAYS(err == KErrNone, User::Invariant() ); return validateWriteResponse; }
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; }
/** * Unsuccessful edit. Fail the write validation request * @param aDb Contact database * @param aId Item Id to edit */ void FailWriteValidationL(CContactDatabase& aDb, TContactItemId aId) { syncChecker->SetValidateResponseL(MContactSynchroniser::ERead,KErrNone); syncChecker->SetValidateResponseL(MContactSynchroniser::EEdit, KErrNone); syncChecker->SetValidateWriteResponseL(KErrAccessDenied); syncChecker->ResetMethodCallCountsL(); CContactItem* item = aDb.OpenContactLX(aId); CleanupStack::PushL(item); CContactItemFieldSet& fieldset = item->CardFields(); const TInt pos = fieldset.Find(KUidContactFieldFamilyName); CContactItemField& field = fieldset[pos]; CContactTextField* textfield = field.TextStorage(); textfield->SetTextL(KGivenEditName); TRAPD(err, aDb.CommitContactL(*item)); test(syncChecker->ValidateMethodCallCountL() == 4); test(err==KErrAccessDenied); CleanupStack::PopAndDestroy(2); //item, lock record }
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); }
void CPredictiveSearchSynchronizer::CreatePredSearchTablesL(TBool aAllTables) { PRINT1(_L("CPredictiveSearchSynchronizer::CreatePredSearchTablesL all=%d"), aAllTables); if (aAllTables) { i12keyTable.CreateTableL(); iSettingsTable.CreateTableL(); iSettingsTable.StoreCurrentLanguageL(); } iQwertyTable.CreateTableL(); _LIT(KSelectAllContactsFormat, "SELECT %S,%S,%S FROM %S;"); TInt bufSize = KSelectAllContactsFormat().Length() + KContactId().Length() + KContactFirstName().Length() + KContactLastName().Length() + KSqlContactTableName().Length(); HBufC* sqlStatement = HBufC::NewLC(bufSize); sqlStatement->Des().AppendFormat(KSelectAllContactsFormat, &KContactId, &KContactFirstName, &KContactLastName, &KSqlContactTableName); RSqlStatement stmnt; CleanupClosePushL(stmnt); PRINT1(_L("CreatePredSearchTablesL prepare SQL statement:%S"), sqlStatement); stmnt.PrepareL(iDatabase, *sqlStatement); const TInt KContactIdIndex = 0; const TInt KFirstNameIndex = 1; const TInt KLastNameIndex = 2; TInt err(KErrNone); while ((err = stmnt.Next()) == KSqlAtRow) { PRINT(_L("CreatePredSearchTablesL create CContactItem")); TInt id = KUidContactCardValue; TUid uid; uid.iUid = id; CContactItem* contact = CContactItem::NewLC(uid); contact->SetId(stmnt.ColumnInt(KContactIdIndex)); // If first name exists, write it to contact item TPtrC firstName; if (stmnt.ColumnText(KFirstNameIndex, firstName) == KErrNone) { CContactItemField* field = CContactItemField::NewLC(KStorageTypeText, KUidContactFieldGivenName); CContactTextField* textfield = field->TextStorage(); textfield->SetTextL(firstName); contact->AddFieldL(*field); // Takes ownership CleanupStack::Pop(field); } TPtrC lastName; if (stmnt.ColumnText(KLastNameIndex, lastName) == KErrNone) { CContactItemField* field = CContactItemField::NewLC(KStorageTypeText, KUidContactFieldFamilyName); CContactTextField* textfield = field->TextStorage(); textfield->SetTextL(lastName); contact->AddFieldL(*field); // Takes ownership CleanupStack::Pop(field); } PRINT(_L("CreatePredSearchTablesL create entry to tables")); if (aAllTables) { i12keyTable.CreateInDbL(*contact); } if (ReadMailAddressesL(*contact)) { iQwertyTable.CreateInDbL(*contact); } CleanupStack::PopAndDestroy(contact); } // Leave if we didn't complete going through the results properly if (err != KSqlAtEnd) { PRINT1(_L("CreatePredSearchTablesL SQL err=%d"), err); User::Leave(err); } CleanupStack::PopAndDestroy(&stmnt); CleanupStack::PopAndDestroy(sqlStatement); PRINT(_L("CPredictiveSearchSynchronizer::CreatePredSearchTablesL ends")); }
void CGroupViewTester::RunL() { switch (iCurrentTest) { case ECreateLocalView: iLog.LogLine(_L("=== Create local view")); iLocalView=CContactLocalView::NewL(*this,iDb,iSortOrder_1,EContactAndGroups/*EContactsOnly*/); break; case ECreateGroupOne: iLog.LogLine(_L("==== Create Group \n")); iGroupOne = STATIC_CAST(CContactGroup*,iDb.CreateContactGroupL(KGroupOneName)); iGroupOneId = iGroupOne->Id(); delete iGroupOne; iGroupOne = NULL; iGroupOne = STATIC_CAST(CContactGroup*,iDb.ReadContactL(iGroupOneId)); break; case ECreateGroupOneView: { iLog.LogLine(_L("=== GroupOneView")); iGroupViewOne=CContactGroupView::NewL(iDb,*iLocalView,*this,iGroupOne->Id(),CContactGroupView::EShowContactsInGroup); } break; case EAddContact: { iLog.LogLine(_L("==== Add Contact \n")); CContactTemplate* templateContact=STATIC_CAST(CContactTemplate*,iDb.ReadContactL(iDb.TemplateId())); CleanupStack::PushL(templateContact); CTestContact* contact=CTestContact::NewLC(*templateContact); contact->SetFirstNameL(_L("FirstName")); contact->SetLastNameL(_L("LastName")); contact->SetCompanyNameL(_L("CompanyName")); contact->SetWorkPhoneL(_L("0123456789")); contact->SetWorkMobileL(_L("0223456789")); contact->SetHomePhoneL(_L("0323456789")); contact->SetWorkEmailAddressL(_L("*****@*****.**")); iSingleContactId = iDb.AddNewContactL(contact->ContactItem()); CleanupStack::PopAndDestroy(contact); CleanupStack::PopAndDestroy(templateContact); iNumNotificationExpected = 2; // Once for the total view, one for the group view. } break; case EAddContactToGroupOne: // since we've only one contact anyway - we can be sure it's id will be 1. iLog.LogLine(_L("==== Assign contact to Group \n")); iDb.AddContactToGroupL(iSingleContactId,iGroupOne->Id()); iNumNotificationExpected = 6; break; case EModifyContactInGroupOne: { iLog.LogLine(_L("==== Modify Contact \n")); CContactItem* contactToModify = iDb.OpenContactL(iSingleContactId); CleanupStack::PushL(contactToModify); CTestContact* testContactToModify = CTestContact::NewLC(*contactToModify); CContactItemFieldSet& fields = contactToModify->CardFields(); CContactItemField& lastNameField = fields[fields.Find(KUidContactFieldFamilyName)]; CContactTextField* lastNameTextField = static_cast<CContactTextField*>(lastNameField.Storage()); lastNameTextField->SetText(_L("modified_lastname").AllocL()); iDb.CommitContactL(*contactToModify); iDb.CloseContactL(1); CleanupStack::PopAndDestroy(testContactToModify); CleanupStack::PopAndDestroy(contactToModify); iNumNotificationExpected = 4; } break; case ENumTests: iLog.LogLine(_L("==== Group View Modified Contact Tests Finished, All Passed...\n")); CActiveScheduler::Stop(); delete this; break; default: ASSERT(EFalse); break; } }