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); }
void TestFindingL(CContactDatabase& aDb) { test.Next(_L("Test FindLC")); syncChecker->SetValidateResponseL(MContactSynchroniser::ERead,KErrLocked); syncChecker->SetValidateResponseL(MContactSynchroniser::ESearch,KErrLocked); CContactItemFieldDef* fieldDef=new(ELeave) CContactItemFieldDef; CleanupStack::PushL(fieldDef); fieldDef->AppendL(KUidContactFieldFamilyName); TRAPD(err,TestFindL(aDb, KGivenEditName, fieldDef, test) ); test(err==KErrLocked); CleanupStack::PopAndDestroy(fieldDef); CContactItemFieldDef* fieldDef2=new(ELeave) CContactItemFieldDef; CleanupStack::PushL(fieldDef2); fieldDef2->AppendL(KUidContactFieldPhoneNumber); TRAP(err, TestFindL(aDb, KTelephoneNum, fieldDef2, test) ); test(err==KErrLocked); CleanupStack::PopAndDestroy(fieldDef2); test.Next(_L("Test FindInTextDefL")); TCallBack callBack(findWordSplitterL); CContactTextDef* textDef=CContactTextDef::NewLC(); textDef->AppendL(TContactTextDefItem(KUidContactFieldFamilyName)); CDesCArray* desArray = new(ELeave) CDesCArrayFlat(5); desArray->AppendL(_L("e")); CContactIdArray* arr = NULL; TRAP(err,arr = TestFindInTextDefL(aDb,*desArray,textDef, callBack, test) ); // test(err==KErrLocked); desArray->Delete(0); delete desArray; //FIX delete arr; CleanupStack::PopAndDestroy(textDef); test.Next(_L("Test FindInTextDefL2")); TCallBack callBack2(findWordSplitterL); CContactTextDef* textDef2=CContactTextDef::NewLC(); textDef2->AppendL(TContactTextDefItem(KUidContactFieldFamilyName)); textDef2->AppendL(TContactTextDefItem(KUidContactFieldUrl)); CDesCArray* desArray2 = new(ELeave) CDesCArrayFlat(5); desArray2->AppendL(_L("e")); TRAP(err,arr = TestFindInTextDefL(aDb,*desArray2,textDef2, callBack2, test) ); // test(err==KErrLocked); desArray2->Delete(0); delete desArray2; //FIX delete arr; CleanupStack::PopAndDestroy(textDef2); }
void CGroupViewTester::ConstructL() { iSortOrder_1.AppendL(KUidContactFieldGivenName); iSortOrder_1.AppendL(KUidContactFieldFamilyName); iSortOrder_1.AppendL(KUidContactFieldCompanyName); iTextDef=CContactTextDef::NewL(); iTextDef->AppendL(TContactTextDefItem(KUidContactFieldGivenName,KTextDefSeparator)); iTextDef->AppendL(TContactTextDefItem(KUidContactFieldFamilyName,KTextDefSeparator)); iTextDef->AppendL(TContactTextDefItem(KUidContactFieldCompanyName,KTextDefSeparator)); NextTest(); }
GLDEF_C void DoSortL(CContactDatabase& aDb) { CContactTextDef* textDef=CContactTextDef::NewLC(); textDef->AppendL(TContactTextDefItem(KUidContactFieldGivenName)); textDef->AppendL(TContactTextDefItem(KUidContactFieldFamilyName)); textDef->AppendL(TContactTextDefItem(KUidContactFieldCompanyName)); aDb.SetTextDefinitionL(textDef); // Takes ownership. CleanupStack::Pop(); // textDef. CArrayFix<CContactDatabase::TSortPref>* sortOrder=new(ELeave)CArrayFixFlat<CContactDatabase::TSortPref>(2); CleanupStack::PushL(sortOrder); sortOrder->AppendL(CContactDatabase::TSortPref(KUidContactFieldDefinedText)); aDb.SortL(sortOrder); // Takes ownership. CleanupStack::Pop(); // sortOrder }
void CBenchMarker::DoSortL() { CContactTextDef* textDef=CContactTextDef::NewLC(); textDef->AppendL(TContactTextDefItem(KUidContactFieldGivenName)); textDef->AppendL(TContactTextDefItem(KUidContactFieldFamilyName)); textDef->AppendL(TContactTextDefItem(KUidContactFieldCompanyName)); iDb->SetTextDefinitionL(textDef); // Takes ownership. CleanupStack::Pop(); // textDef. CArrayFix<CContactDatabase::TSortPref>* sortOrder=new(ELeave)CArrayFixFlat<CContactDatabase::TSortPref>(2); CleanupStack::PushL(sortOrder); sortOrder->AppendL(CContactDatabase::TSortPref(KUidContactFieldDefinedText)); iDb->SortL(sortOrder); // Takes ownership. CleanupStack::Pop(); // sortOrder iSortedItems=iDb->SortedItemsL(); }
void TestReadTextDefinitionL(CContactDatabase& aDb, TContactItemId aIccId, TContactItemId aNonIccId) { test.Next(_L("Test ReadTextDefinitionL")); // Successful read of icc entry CContactTextDef* textDef=CContactTextDef::NewLC(); textDef->AppendL(TContactTextDefItem(KUidContactFieldFamilyName)); TBuf<64> result; syncChecker->SetValidateResponseL(MContactSynchroniser::ERead,KErrNone); syncChecker->ResetMethodCallCountsL(); aDb.ReadContactTextDefL(aIccId,result,textDef); test(syncChecker->ValidateMethodCallCountL() == 1); test(result==KIccName); result.Zero(); // Unsuccessful read of icc entry because icc locked syncChecker->SetValidateResponseL(MContactSynchroniser::ERead,KErrAccessDenied); syncChecker->ResetMethodCallCountsL(); TRAPD(err, aDb.ReadContactTextDefL(aIccId,result,textDef)); test(err==KErrAccessDenied); test(result.Length() == 0); test(syncChecker->ValidateMethodCallCountL() == 1); // successful read of non-icc entry, even though icc locked syncChecker->ResetMethodCallCountsL(); TRAP(err, aDb.ReadContactTextDefL(aNonIccId,result,textDef)); test(err==KErrNone); test(result==KNonIccName); test(syncChecker->ValidateMethodCallCountL() == 0); CleanupStack::PopAndDestroy(textDef); }
/** Set sort order used to sorting the view contacts. */ void CContactLocalView::SetSortOrderL(const RContactViewSortOrder& aSortOrder) { // copy new sort order iSortOrder.CopyL(aSortOrder); // New sort order for Sort Plugin CViewContactSortPlugin* sortPluginImpl = SortPluginImpl(); if (sortPluginImpl) { sortPluginImpl->SetSortOrderL(aSortOrder); } // Initialisation for each explicitly requested sort or initialise sort // Construct a text def to read out the required fields from the db. CContactTextDef* textDef=CContactTextDef::NewLC(); TInt sortOrderCount=iSortOrder.Count(); for (TInt sortIndex=0;sortIndex<sortOrderCount;sortIndex++) { textDef->AppendL(TContactTextDefItem(iSortOrder[sortIndex])); } CleanupStack::Pop(); // textDef. delete iTextDef; iTextDef=textDef; }
void TestFindInTextDefLC(CContactDatabase& aDb, TContactItemId aIccId, TContactItemId aNonIccId) { test.Next(_L("Test FindInTextDefLC")); // Successful find of icc entry syncChecker->SetValidateResponseL(MContactSynchroniser::ESearch,KErrNone); syncChecker->SetValidateResponseL(MContactSynchroniser::ERead,KErrNone); TCallBack callBack(findWordSplitterL); CContactTextDef* textDef=CContactTextDef::NewLC(); textDef->AppendL(TContactTextDefItem(KUidContactFieldFamilyName)); CDesCArray* desArray = new(ELeave) CDesCArrayFlat(5); desArray->AppendL(_L("icc")); syncChecker->ResetMethodCallCountsL(); CContactIdArray* array = aDb.FindInTextDefLC(*desArray,textDef,callBack); //test(syncChecker->ValidateMethodCallCountL() == 3); test(array!=NULL); test(array->Count() == 1); test((*array)[0]==aIccId); CleanupStack::PopAndDestroy(array); array=NULL; test.Next(_L("Test searching when ICC locked")); // Unsuccessful find of icc entry because icc locked syncChecker->SetValidateResponseL(MContactSynchroniser::ESearch,KErrLocked); syncChecker->ResetMethodCallCountsL(); TRAPD(err,array = aDb.FindInTextDefLC(*desArray,textDef,callBack)); test(syncChecker->ValidateMethodCallCountL() == 1); test(err==KErrLocked); test(array==NULL); desArray->Delete(0); delete desArray; // successful find of non-icc entry, even though icc locked CDesCArray* desArray2 = new(ELeave) CDesCArrayFlat(5); desArray2->AppendL(_L("non-icc")); syncChecker->ResetMethodCallCountsL(); array = aDb.FindInTextDefLC(*desArray2,textDef,callBack); test(syncChecker->ValidateMethodCallCountL() == 0); test(array!=NULL); test(array->Count() == 1); test((*array)[0]==aNonIccId); // both the icc and non-icc entry should match the search criteria, but only the // non-icc entry should be returned since icc is locked SetNameField(aDb,aIccId,KNonIccName); syncChecker->ResetMethodCallCountsL(); TRAP(err,array = aDb.FindInTextDefLC(*desArray2,textDef,callBack)); test(syncChecker->ValidateMethodCallCountL() == 1); test(err==KErrLocked); test(array!=NULL); test(array->Count() == 1); test((*array)[0]==aNonIccId); desArray2->Delete(0); delete desArray2; SetNameField(aDb,aIccId,KIccName); CleanupStack::PopAndDestroy(2,textDef); // array, textDef }
/** Change the sorting order/text definition. It should be always called when there is not an iteration started in persistence layer. @param aTextDef the new text definition to be used in the view session. */ void CCntPplViewSession::ChangeSortOrderL(const CContactTextDef& aTextDef) { //Cleanup the cached Prepare statement as the sort order will be changed Cancel(); CleanupCachedPrepareStatement(); //Copy the text definition CContactTextDef* textDef = CContactTextDef::NewLC(); const TInt KTextDefCount = aTextDef.Count(); for (TInt index = 0; index < KTextDefCount; ++index) { textDef->AppendL(TContactTextDefItem(aTextDef.At(index).iFieldType)); } // Create select statement on contact table TCntSqlStatementType statementType(ESelect, KSqlContactTableName()); CCntSqlStatement* sqlSmt = TSqlProvider::GetSqlStatementL(statementType); CleanupStack::PushL(sqlSmt); // Always select id, type flags. sqlSmt->SetParamL(KContactId(), KSpace()); sqlSmt->SetParamL(KContactTypeFlags(), KSpace()); //Go through text definition to construct select statement. TBool isFastAccessOnly = ETrue; for(TInt ii = 0; ii < KTextDefCount; ++ii) { const TDesC& KColunmName = TCntPersistenceUtility::GetFastAccessColumnNameById(aTextDef.At(ii).iFieldType.iUid); if(KColunmName.Length() > 0) { sqlSmt->SetParamL(KColunmName, KSpace()); } else { isFastAccessOnly = EFalse; } } if(!isFastAccessOnly) { //Fields in text blob are needed, add text fields header and //text blob columns in the select statement. sqlSmt->SetParamL(KContactTextFieldHeader(), KSpace()); sqlSmt->SetParamL(KContactTextFields(), KSpace()); } CleanupStack::Pop(2, textDef); // sqlSmt, textDef. delete iCntSqlStatement; iCntSqlStatement = sqlSmt; delete iTextDef; iTextDef = textDef; iIsFastAccessFieldsOnly = isFastAccessOnly; }
void CBenchMarker::LogContactSummaryL(TBool aFaster,TContactItemId aContactItemId) { if (aFaster) { if (iTextDef==NULL) { iTextDef=CContactTextDef::NewL(); iTextDef->AppendL(TContactTextDefItem(KUidContactFieldGivenName,KTextDefSeparator)); iTextDef->AppendL(TContactTextDefItem(KUidContactFieldFamilyName,KTextDefSeparator)); iTextDef->AppendL(TContactTextDefItem(KUidContactFieldCompanyName,KTextDefSeparator)); } TBuf<128> buf; iDb->ReadContactTextDefL(aContactItemId,buf,iTextDef); #ifdef __VERBOSE iLog->LogLineNoEcho(buf); #endif } else { CContactItem* thisContactItem=iDb->ReadContactLC(aContactItemId); CTestContact* thisContact=CTestContact::NewLC(*thisContactItem); #ifdef __VERBOSE const TPtrC firstName(thisContact->FirstNameL()); const TPtrC lastName(thisContact->LastNameL()); const TPtrC companyName(thisContact->CompanyNameL()); iLog->LogLineNoEcho(KContactSummaryFormat,thisContactItem->Id(),&firstName,&lastName,&companyName); #else thisContact->FirstNameL(); thisContact->LastNameL(); thisContact->CompanyNameL(); #endif CleanupStack::PopAndDestroy(2); // thisContact, thisContactItem. } }
CContactTextDef* CPackagerCntFactory::doCreateDefaultCContactTextDefL() const /** Implementation method for constructing a new default CContactTextDef object. @return a Pointer to the CContactTextDef object. */ { CContactTextDef* theTextDef = CContactTextDef::NewLC(); theTextDef->AppendL(TContactTextDefItem(KUidContactFieldFamilyName)); theTextDef->AppendL(TContactTextDefItem(KUidContactFieldGivenName)); theTextDef->AppendL(TContactTextDefItem(KUidContactFieldCompanyName)); theTextDef->AppendL(TContactTextDefItem(KUidContactFieldAddress)); theTextDef->AppendL(TContactTextDefItem(KUidContactFieldEMail)); theTextDef->AppendL(TContactTextDefItem(KUidContactFieldAdditionalName)); CleanupStack::Pop(theTextDef); return theTextDef; }
GLDEF_C void FindAsyncInTextDefL() { CContactTextDef* textDef1=CContactTextDef::NewLC(); textDef1->AppendL(TContactTextDefItem(KUidContactFieldGivenName)); textDef1->AppendL(TContactTextDefItem(KUidContactFieldFamilyName)); textDef1->SetFallbackField(KUidContactFieldCompanyName); CContactTextDef* textDef2=CContactTextDef::NewLC(); textDef2->AppendL(TContactTextDefItem(KUidContactFieldGivenName)); textDef2->AppendL(TContactTextDefItem(KUidContactFieldFamilyName)); textDef2->AppendL(TContactTextDefItem(KUidContactFieldCompanyName)); textDef2->SetFallbackField(KUidContactFieldAddress); // TContactItemId wally=AddFindRecordL(_L("Wally"),_L("Wombat"),_L("Wombat Soup Inc"),_L("")); TContactItemId vincent=AddFindRecordL(_L("Vincent"),_L("Jones"),_L(""),_L("")); TContactItemId wilbert=AddFindRecordL(_L("Wilbert"),_L("Wombat"),_L("Great Ape Software"),_L("")); TContactItemId vincent2=AddFindRecordL(_L("Vincent"),_L("Vincent"),_L(""),_L("")); TContactItemId death=AddFindRecordL(_L("Black"),_L("De'ath"),_L("Hell"),_L("South of Heaven")); // CContactIdArray* wallyResults=CreateIdArrayLC(&wally); CContactIdArray* wombatResults=CreateIdArrayLC(&wally,&wilbert); CContactIdArray* vjResults=CreateIdArrayLC(&vincent); CContactIdArray* v2Results=CreateIdArrayLC(&vincent2); CContactIdArray* vjv2Results=CreateIdArrayLC(&vincent,&vincent2); CContactIdArray* deathResults=CreateIdArrayLC(&death); // CDesCArray *findWords=CreateFindWordsL(_L("Wally"),_L(""),_L("")); //chrisd: the behaviour of the new code has changed because if you pass a null //chrisd: textdef to ER5/ER6 or 6.1 it doesn't find anything DoFindInTextDefTestL(findWords, NULL, NULL); // No text def defined // DoFindInTextDefTestLD(findWords, textDef1, wallyResults); findWords=CreateFindWordsL(_L("Wally"),_L("NotFound"),_L("")); DoFindInTextDefTestLD(findWords, textDef1, NULL); findWords=CreateFindWordsL(_L("Wally"),_L("Wombat"),_L("")); DoFindInTextDefTestLD(findWords, textDef1, wallyResults); findWords=CreateFindWordsL(_L("Wally"),_L("Wombat"),_L("xxx")); DoFindInTextDefTestLD(findWords, textDef1, NULL); findWords=CreateFindWordsL(_L("W"),_L("Wombat"),_L("")); DoFindInTextDefTestLD(findWords, textDef1, wombatResults); findWords=CreateFindWordsL(_L("Wally"),_L("Wally"),_L("")); DoFindInTextDefTestLD(findWords, textDef1, NULL); findWords=CreateFindWordsL(_L("Wombat"),_L("Wombat"),_L("")); DoFindInTextDefTestLD(findWords, textDef1, wallyResults); findWords=CreateFindWordsL(_L("Wombat"),_L("Wombat"),_L("Wombat")); DoFindInTextDefTestLD(findWords, textDef1, NULL); findWords=CreateFindWordsL(_L("Wombat"),_L("Soup"),_L("Inc")); //chrisd: new code doesn't find anything here and should have - this is //chrisd: all words are contained in the company field DoFindInTextDefTestLD(findWords, textDef1, wallyResults); // findWords=CreateFindWordsL(_L("ombat"),_L("oup"),_L("lly")); DoFindInTextDefTestLD(findWords, textDef1, NULL); findWords=CreateFindWordsL(_L("Wombat"),_L("Soup"),_L("Inc")); //chrisd: new code doesn't find anything here and should have - this is //chrisd: all words are contained in the company field DoFindInTextDefTestLD(findWords, textDef1, wallyResults); // findWords=CreateFindWordsL(_L("Vincent"),_L("J"),_L("")); DoFindInTextDefTestLD(findWords, textDef1, vjResults); findWords=CreateFindWordsL(_L("Vincent"),_L("V"),_L("")); DoFindInTextDefTestLD(findWords, textDef1, v2Results); findWords=CreateFindWordsL(_L("Vincent"),_L(""),_L("")); DoFindInTextDefTestLD(findWords, textDef1, vjv2Results); findWords=CreateFindWordsL(_L("De"),_L("Ath"),_L("")); //chrisd: new code fails here //chrisd: last name contains both first & last names (PC PIM syncs both to one field) DoFindInTextDefTestLD(findWords, textDef1, deathResults); findWords=CreateFindWordsL(_L("De"),_L("Ath"),_L("Heaven")); DoFindInTextDefTestLD(findWords, textDef1, NULL); //chrisd: new code fails here //chrisd: last name contains first and last findWords=CreateFindWordsL(_L("De"),_L("Ath"),_L("Heaven")); DoFindInTextDefTestLD(findWords, textDef2, deathResults); findWords=CreateFindWordsL(_L("Heaven"),_L(""),_L("")); //chrisd:one word at the end - partial match - so doesn't need to match DoFindInTextDefTestLD(findWords, textDef1, NULL); findWords=CreateFindWordsL(_L("Heaven"),_L(""),_L("")); //chrisd:one word at the end - partial match - so doesn't need to match DoFindInTextDefTestLD(findWords, textDef2, deathResults); findWords=CreateFindWordsL(_L("of"),_L("South"),_L("Heaven")); //chrisd:all words are in one field - this doesn't need to match DoFindInTextDefTestLD(findWords, textDef2, deathResults); // CntTest->DeleteContact(wally); CntTest->DeleteContact(vincent); CntTest->DeleteContact(wilbert); CntTest->DeleteContact(vincent2); CntTest->DeleteContact(death); CleanupStack::PopAndDestroy(6); // wallyResults,wombatResults,vjResults,v2Results,deathResults CleanupStack::PopAndDestroy(2); // textDef1,textDef2 }