// ----------------------------------------------------------------------------- // TSnapshotItem::CreateHashL // Create hash value from group content // ----------------------------------------------------------------------------- void TSnapshotItem::CreateHashL( CContactGroup& aGroup ) { CMessageDigest* hash = CMessageDigestFactory::NewDigestLC( CMessageDigest::EMD5 ); if ( aGroup.HasItemLabelField() ) { TPtrC label = aGroup.GetGroupLabelL(); HBufC8* tempBuf = CnvUtfConverter::ConvertFromUnicodeToUtf8L( label ); CleanupStack::PushL( tempBuf ); hash->Update( tempBuf->Des() ); CleanupStack::PopAndDestroy( tempBuf ); } // Create text field from items on group CContactIdArray* contactsIdArray = aGroup.ItemsContainedLC(); const TInt idBufferMaxSize( 400 ); HBufC8* tempIdBuf = HBufC8::NewLC( idBufferMaxSize ); TPtr8 tempId = tempIdBuf->Des(); const TInt KMaxNumLength(5); if ( contactsIdArray ) // this is NULL if there are no objects { tempId.AppendNum( contactsIdArray->Count(), EHex ); for (TInt i=0; i< contactsIdArray->Count(); i++ ) { if ( tempId.Length()+KMaxNumLength > tempId.MaxLength() ) { // buffer is almost full, don't add any new items LOGGER_WRITE("buffer full"); break; } // add item id tempId.AppendNum( (*contactsIdArray)[i] , EHex ); } } else { tempId.AppendNum( 0 ); } // update hash hash->Update( tempId ); iHash.Copy( hash->Final() ); CleanupStack::PopAndDestroy( tempIdBuf ); CleanupStack::PopAndDestroy( contactsIdArray ); CleanupStack::PopAndDestroy( hash ); }
/* In this section, we edit the desired number of groups in the database * Set label for them and associate them with contacts @ param aGroupSection - Desired Group Name @ param aContact - Contact to be updated */ void CTestContactViewCRUDOperationsStep::UpdateContactsInGroupL(const TInt aNumberOfContactsToBeUpdated, const TPtrC& aGroupSection) { RArray<TPtrC> listOfGroupsSections; CleanupClosePushL(listOfGroupsSections); ViewUtilityReference().TokenizeStringL(aGroupSection, listOfGroupsSections); for ( TInt i = 0; i < listOfGroupsSections.Count(); ++i ) { CCntFilter* filter = CCntFilter::NewL(); CleanupStack::PushL(filter); filter->SetContactFilterTypeGroup(ETrue); DatabaseReference().FilterDatabaseL(*filter); for ( TInt i = 0; i < filter->iIds->Count(); ++i ) { TContactItemId groupId = (*filter->iIds)[i]; CContactItem* group = DatabaseReference().OpenContactL(groupId); CContactGroup* newGroup = static_cast<CContactGroup*>(group); if(aGroupSection.Compare(newGroup->GetGroupLabelL()) == 0) { const CContactIdArray* listOfContacts = newGroup->ItemsContained(); for(TInt i(0); i < aNumberOfContactsToBeUpdated; i++) { TContactItemId contactItemId = (*listOfContacts)[i]; CContactItem* contactItem = DatabaseReference().ReadContactL(contactItemId); CleanupStack::PushL(contactItem); UpdateFieldsL(*contactItem); CContactItem* updatedContactItem = DatabaseReference().UpdateContactLC(contactItemId, contactItem); CleanupStack::PopAndDestroy(updatedContactItem); CleanupStack::PopAndDestroy(contactItem); } delete listOfContacts; DatabaseReference().CloseContactL(groupId); break; } DatabaseReference().CloseContactL(groupId); } CleanupStack::PopAndDestroy(filter); } CleanupStack::PopAndDestroy(&listOfGroupsSections); }
/* In this section, we edit the desired number of groups in the database * Set label for them and associate them with contacts @ param aGroupSection - Desired Group Name @ param aContact - Contact to be updated */ void CTestContactViewCRUDOperationsStep::IterateThroAllGroupSectionsAndUpdateContactL(const TPtrC& aGroupSection, CContactCard& aContact) { RArray<TPtrC> listOfGroupsSections; CleanupClosePushL(listOfGroupsSections); ViewUtilityReference().TokenizeStringL(aGroupSection, listOfGroupsSections); for ( TInt i = 0; i < listOfGroupsSections.Count(); ++i ) { CCntFilter* filter = CCntFilter::NewL(); CleanupStack::PushL(filter); filter->SetContactFilterTypeGroup(ETrue); DatabaseReference().FilterDatabaseL(*filter); for ( TInt i = 0; i < filter->iIds->Count(); ++i ) { TContactItemId groupId = (*filter->iIds)[i]; CContactItem* group = DatabaseReference().OpenContactL(groupId); CContactGroup* newGroup = static_cast<CContactGroup*>(group); if(aGroupSection.Compare(newGroup->GetGroupLabelL()) == 0) { TRAP_IGNORE(DatabaseReference().RemoveContactFromGroupL(aContact, *newGroup)); TRAP_IGNORE(DatabaseReference().AddContactToGroupL(aContact, *newGroup)); DatabaseReference().CommitContactL(*group); const CContactIdArray* listOfContacts = newGroup->ItemsContained(); const TInt count = listOfContacts->Count(); delete listOfContacts; DatabaseReference().CloseContactL(groupId); break; } DatabaseReference().CloseContactL(groupId); } CleanupStack::PopAndDestroy(filter); } CleanupStack::PopAndDestroy(&listOfGroupsSections); }