TBool CPackagerCntComparator::Compare(const CContactItemViewDef& anItem1, const CContactItemViewDef& anItem2) const /** Compares two CContactItemViewDef items. @param anItem1 The first CContactItemViewDef to be compared. @param anItem2 The second CContactItemViewDef to be compared. @return ETrue if the two items are equal, EFalse otherwise. */ { return (DoCompareTInt(anItem1.Mode(),anItem2.Mode()) & DoCompareTInt(anItem1.Use(),anItem2.Use()) & DoCompareCContactItemViewDefArray(anItem1, anItem2)); }
/** Utility method used to read text fields from blob and fill item field set,Provides a mechanism to restore a contact item field set from text blob field within contact database. Blob informations are stored based on contact item field. At restore, a reference to a contact item field set is provided. For every contact item field in the item field set, a text restore is made. @param aFieldSet Reference to CContactItemFieldSet. Item field set that has to be filled with informations from blob @param aHeaderStore Stream store containing the header informations @param aId Root id for the header stream store @param aValuesStore Read stream used to read text fields from text blob @param aViewDef View definition indicating which fields have to be read from blob @param aTemplate Template indicating if current field set should be filled based on a template */ void TCntPersistenceUtility::RestoreTextL(CContactItemFieldSet& aFieldSet, CStreamStore& aHeaderStore, TStreamId aId, HBufC* textStream, const CContactItemViewDef& aViewDef, const CContactItem* aTemplate) { const TBool KIncludeFields = ( aViewDef.Use() == CContactItemViewDef::EIncludeFields ); if (KIncludeFields && aViewDef.Count() == 0) { // If view definition does not contain any field we don't do anything (don't read from // blob). We simply return from method without doing anything. // This is not an error condition return; } RStoreReadStream stream; stream.OpenLC(aHeaderStore,aId); TCardinality fieldCount; stream>>fieldCount; TInt textFieldIndex=0; for (TInt ii = 0; ii < fieldCount; ++ii) { // Restore text for every CContactItemField in provided CContactItemFieldSet. CContactItemField* field = CContactItemField::NewLC(); if(aTemplate) { field->RestoreFieldTypesL(stream, &(aTemplate->CardFields())); } else { field->RestoreFieldTypesL(stream, NULL); } ASSERT(field->StorageType() == KStorageTypeText); TBool fieldDefined = ETrue; if(!aViewDef.MatchesAll()) { fieldDefined = (aViewDef.Find(field->ContentType()) != KErrNotFound); } if ((!((fieldDefined && KIncludeFields) || (!fieldDefined && !KIncludeFields))) || (field->IsHidden() && aViewDef.Mode() == CContactItemViewDef::EMaskHiddenFields)) { CleanupStack::PopAndDestroy(field); } else { field->RestoreTextL(textStream, textFieldIndex); aFieldSet.AddL(*field); CleanupStack::Pop(field); } ++textFieldIndex; } CleanupStack::PopAndDestroy(&stream); }