diff -r 000000000000 -r e686773b3f54 phonebookengines/contactsmodel/tsrc/NbCntTestLib/ContactPrinter.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookengines/contactsmodel/tsrc/NbCntTestLib/ContactPrinter.cpp Tue Feb 02 10:12:17 2010 +0200 @@ -0,0 +1,476 @@ +// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + + +#include +#include +#include //to enable casting from ccontactfieldstorage* to ccontacttextfield* + + + +struct SFlagsDict + { + TInt iFlag; + const TText* iDescript; + }; + +#define FF(x) {x, _S(#x)} +#define NbTestLast 0x00000000 + + //Contact field flag struct + enum // er5 hard coded enum most of which have been used but not documented ;o( + { + EHidden =0x00000001, + EReadOnly =0x00000002, + ESynchronize =0x00000004, + EDisabled =0x00000008, + /* 0x00000010,-> 0x00000080 are used for + the user defined attribs / categories like work / + Personal / Other / None - used in er5 UI */ + EUserMask =0x000000F0, + ETemplateMask =EUserMask|ESynchronize|EReadOnly|EHidden, + EOverRidesLabel =0x00000100, + EUsesTemplateData =0x00000200, + EUserAddedField =0x00000400, + ETemplate =0x00000800, + /* 0x00001000,-> 0x0000F000 are used for + the storage type of the contact field */ + ELabelUnspecified =0x40000000, + EDeleted =0x80000000 + }; + enum + // new extended enum to allow cntmodel to have + // more attributes per field + { + EPrivate =0x00000001, + ESpeedDial =0x00000002, + EUserDefinedFilter =0x00000004, + EUserDefinedFilter1 =0x00000008, + EUserDefinedFilter2 =0x00000010, + EUserDefinedFilter3 =0x00000020, + EUserDefinedFilter4 =0x00000040 + }; + + +struct SDescArr + { + operator const TText*() const + { + return iDesc; + } + + const TText* iDesc; + }; + + + +#define VM(x) case x: return _S(#x); + +extern const TText* VCardMaping(const TFieldType& type) + { + switch (type.iUid) + { + //case KUidContactFieldAddressValue: return _S("KUidContactFieldAddressValue"); + VM(KUidContactFieldAddressValue ); + VM(KUidContactFieldPostOfficeValue ); + VM(KUidContactFieldExtendedAddressValue ); + VM(KUidContactFieldLocalityValue ); + VM(KUidContactFieldRegionValue ); + VM(KUidContactFieldPostCodeValue ); + VM(KUidContactFieldCountryValue ); + + VM(KUidContactFieldCompanyNameValue ); + VM(KUidContactFieldCompanyNamePronunciationValue ); + VM(KUidContactFieldPhoneNumberValue ); + VM(KUidContactFieldGivenNameValue ); + VM(KUidContactFieldFamilyNameValue ); + VM(KUidContactFieldGivenNamePronunciationValue ); + VM(KUidContactFieldFamilyNamePronunciationValue ); + + VM(KUidContactFieldAdditionalNameValue); + VM(KUidContactFieldSuffixNameValue ); + VM(KUidContactFieldPrefixNameValue ); + VM(KUidContactFieldHiddenValue ); + VM(KUidContactFieldEMailValue ); + VM(KUidContactFieldMsgValue ); + VM(KUidContactFieldSmsValue ); + VM(KUidContactFieldFaxValue ); + + VM(KUidContactFieldDefinedTextValue ); + VM(KUidContactFieldNoteValue ); + VM(KUidContactFieldBirthdayValue ); + VM(KUidContactFieldUrlValue ); + VM(KUidContactFieldStorageInlineValue); + VM(KUidContactFieldTemplateLabelValue); + VM(KUidContactFieldPictureValue ); + VM(KUidContactFieldRingToneValue ); + VM(KUidContactFieldDTMFValue ); + VM(KUidContactsVoiceDialFieldValue ); + VM(KUidContactFieldNoneValue ); + VM(KUidContactFieldJobTitleValue ); + VM(KUidContactFieldICCSlotValue ); + VM(KUidContactFieldICCPhonebookValue); + VM(KUidContactFieldICCGroupValue ); + VM(KUidContactFieldIMAddressValue ); + VM(KUidContactFieldSecondNameValue ); + VM(KUidContactFieldSIPIDValue ); + + VM(KIntContactFieldVCardMapWORK ); + VM(KIntContactFieldVCardMapHOME ); + VM(KIntContactFieldVCardMapMSG ); + VM(KIntContactFieldVCardMapVOICE); + VM(KIntContactFieldVCardMapFAX ); + VM(KIntContactFieldVCardMapPREF ); + VM(KIntContactFieldVCardMapCELL ); + VM(KIntContactFieldVCardMapPAGER); + VM(KIntContactFieldVCardMapBBS ); + VM(KIntContactFieldVCardMapMODEM); + VM(KIntContactFieldVCardMapCAR ); + VM(KIntContactFieldVCardMapISDN ); + VM(KIntContactFieldVCardMapVIDEO); + VM(KIntContactFieldVCardMapDOM ); + + VM(KIntContactFieldVCardMapADR ); + VM(KIntContactFieldVCardMapPOSTOFFICE ); + VM(KIntContactFieldVCardMapEXTENDEDADR ); + VM(KIntContactFieldVCardMapLOCALITY ); + VM(KIntContactFieldVCardMapREGION ); + VM(KIntContactFieldVCardMapPOSTCODE ); + VM(KIntContactFieldVCardMapCOUNTRY ); + VM(KIntContactFieldVCardMapAGENT ); + VM(KIntContactFieldVCardMapBDAY ); + VM(KIntContactFieldVCardMapEMAILINTERNET); + VM(KIntContactFieldVCardMapGEO ); + VM(KIntContactFieldVCardMapLABEL ); + VM(KIntContactFieldVCardMapLOGO ); + VM(KIntContactFieldVCardMapMAILER ); + VM(KIntContactFieldVCardMapNOTE ); + VM(KIntContactFieldVCardMapORG ); + VM(KIntContactFieldVCardMapORGPronunciation ); + VM(KIntContactFieldVCardMapPHOTO ); + VM(KIntContactFieldVCardMapROLE ); + VM(KIntContactFieldVCardMapSOUND ); + VM(KIntContactFieldVCardMapTEL ); + VM(KIntContactFieldVCardMapTELFAX ); + VM(KIntContactFieldVCardMapTITLE ); + VM(KIntContactFieldVCardMapURL ); + VM(KIntContactFieldVCardMapUnusedN ); + VM(KIntContactFieldVCardMapUnusedFN ); + VM(KIntContactFieldVCardMapNotRequired ); + VM(KIntContactFieldVCardMapUnknownXDash ); + VM(KIntContactFieldVCardMapUnknown ); + VM(KIntContactFieldVCardMapUID ); + VM(KIntContactFieldVCardMapINTL ); + VM(KIntContactFieldVCardMapPOSTAL ); + VM(KIntContactFieldVCardMapPARCEL ); + VM(KIntContactFieldVCardMapGIF ); + VM(KIntContactFieldVCardMapCGM ); + VM(KIntContactFieldVCardMapWMF ); + VM(KIntContactFieldVCardMapBMP ); + VM(KIntContactFieldVCardMapMET ); + VM(KIntContactFieldVCardMapPMB ); + VM(KIntContactFieldVCardMapDIB ); + VM(KIntContactFieldVCardMapPICT ); + VM(KIntContactFieldVCardMapTIFF ); + VM(KIntContactFieldVCardMapPDF ); + VM(KIntContactFieldVCardMapPS ); + VM(KIntContactFieldVCardMapJPEG ); + VM(KIntContactFieldVCardMapMPEG ); + VM(KIntContactFieldVCardMapMPEG2 ); + VM(KIntContactFieldVCardMapAVI ); + VM(KIntContactFieldVCardMapQTIME ); + VM(KIntContactFieldVCardMapTZ ); + VM(KIntContactFieldVCardMapKEY ); + + VM(KIntContactFieldVCardMapX509 ); + VM(KIntContactFieldVCardMapPGP ); + VM(KIntContactFieldVCardMapSMIME ); + VM(KIntContactFieldVCardMapWV ); + VM(KIntContactFieldVCardMapSECONDNAME ); + VM(KIntContactFieldVCardMapSIPID ); + VM(KIntContactFieldVCardMapPOC ); + VM(KIntContactFieldVCardMapSWIS ); + VM(KIntContactFieldVCardMapVOIP ); + default: return _S("Unknown"); + }; + }; + + + +class CMyField : public CBase + { +public: + CContentType *iContentType; + TStorageType iStorageType; + HBufC* iLabel; + TInt iId; + TUint32 iAttributes; + TUint32 iExtendedAttributes; + CContactFieldStorage* iStorage; + TInt iTemplateFieldId; + }; + + +void PrintFieldsTableL(RFile& outFile, const CContactItemFieldSet& fldSet, TBuf8<255>& buf) + { + SDescArr sTStorageType[] = { + _S("KStorageTypeText"), + _S("KStorageTypeStore"), + _S("KStorageTypeContactIt"), + _S("KStorageTypeDateTime") + }; + + SFlagsDict sFieldFlag[]= { + FF(EHidden), + FF(EReadOnly), + FF(ESynchronize), + FF(EDisabled), + FF(EUserMask), + FF(EOverRidesLabel), + FF(EUsesTemplateData), + FF(EUserAddedField), + FF(ETemplate), + FF(ELabelUnspecified), + FF(EDeleted), + FF(NbTestLast) + }; + + outFile.Write(_L8("")); + outFile.Write(_L8("" \ + "\r\n")); + + const TInt numOfFields = fldSet.Count(); + for (TInt i=0; i < numOfFields; ++i) + { + const CContactItemField& field = fldSet[i]; + const CMyField& myField = reinterpret_cast(field); + const CContentType& conType = *myField.iContentType; + + buf.Format(_L8(""), myField.iId); + outFile.Write(buf); + + outFile.Write(_L8("\r\n")); + + //test.Printf(_L("Field types are:")); + outFile.Write(_L8("\r\n\r\n\r\n")); + + //test.Printf(_L("Attributes: 0x%08x"), myField.iAttributes); + buf.Format(_L8("\r\n")); + + //test.Printf(_L("Ext Attrib: 0x%08x"), myField.iExtendedAttributes); + buf.Format(_L8("\r\n"), myField.iExtendedAttributes); + outFile.Write(buf); + + //test.Printf(_L("Temp fldId: 0x%08x"), myField.iTemplateFieldId); + buf.Format(_L8("\r\n"), myField.iTemplateFieldId); + outFile.Write(buf); + + + outFile.Write(_L8("\r\n\r\n")); + } + + outFile.Write(_L8("
FldLabelField types:Storg typeFieldAttrExt.AttTempl
%d")); + if (myField.iLabel) + { + buf.Copy(*myField.iLabel); + outFile.Write(buf); + } + outFile.Write(_L8("")); + + for(TInt j=0; j < conType.FieldTypeCount(); ++j) + { + const TFieldType& fldType = conType.FieldType(j); + //test.Printf(_L(" %s"), VCardMaping(fldType)); + const TPtrC str = VCardMaping(fldType); + buf.Copy(str); + outFile.Write(buf); + outFile.Write(_L8(",
")); + } + + //Print Mapping of the field + outFile.Write(_L8("MP>: ")); + const TPtrC mapp = VCardMaping(conType.Mapping()); + buf.Copy(mapp); + outFile.Write(buf); + + outFile.Write(_L8("
")); + + //test.Printf(_L("Storg type: %s"), sTStorageType[myField.iStorageType]); + const TPtrC str (sTStorageType[myField.iStorageType]); + buf.Copy(str); + outFile.Write(buf); + + outFile.Write(_L8("")); + switch(myField.iStorageType) + { + case KStorageTypeText: + { + const TPtrC& textFld = static_cast(field.Storage())->Text(); + //test.Printf(_L("Text : %S"), textFld); + buf.Copy(textFld); + outFile.Write(buf); + } + break; + default: + break; + } + + outFile.Write(_L8("0x%08x"), myField.iAttributes); + outFile.Write(buf); + + for (TInt i = 0;; ++i) + { + const SFlagsDict& aFlag = sFieldFlag[i]; + + if (aFlag.iFlag & myField.iAttributes) + { + TPtrC str(aFlag.iDescript); + buf.Copy(str); + + outFile.Write(_L8(",
")); + outFile.Write(buf); + } + + + if (aFlag.iFlag == NbTestLast) + { + break; + } + } + + outFile.Write(_L8("
0x%08x%d
\r\n")); + } + + + +void PrintIdArrayL(RFile& outFile, const CContactIdArray* aArray, const TDesC8& aLabel, TBuf8<255>& buf) + { + outFile.Write(_L8("")); + outFile.Write(aLabel); + outFile.Write(_L8("")); + if (aArray) //If array exists + { + for (TInt i = 0; i < aArray->Count(); ++i) + { + const TContactItemId id = (*aArray)[i]; + if (i) + { + outFile.Write(_L8("
")); + } + + buf.Format(_L8("%d (%x)"), id, id); + outFile.Write(buf); + } + } + else + { + outFile.Write(_L8("Not Initialised")); + } + outFile.Write(_L8("\r\n")); + } + + +class CMyContact : public CBase + { +public: + CContactItemFieldSet* iFieldSet; + TUint32 iAttributes; + TContactItemId iId; + TContactItemId iTemplateRefId; + TTime iLastModified; + TTime iCreationDate; + TUint32 iAccessCount; + HBufC* iGuid; + }; + +class CMyContactPlusGroup : public CMyContact + { +public: + CContactIdArray* iGroups; + }; + +class CMyContactGroup : public CMyContactPlusGroup + { +public: + CContactIdArray* iItems; + }; + +EXPORT_C void PrintContactL(const TDesC& aFilename, const CContactItem& aContact) + { + TBuf8<255> buf; + TBuf16<100> buf16; + + RFs fs; + User::LeaveIfError(fs.Connect()); + CleanupClosePushL(fs); + + fs.MkDirAll(aFilename); + + RFile outFile; + User::LeaveIfError(outFile.Replace(fs, aFilename, EFileWrite | EFileStreamText)); + CleanupClosePushL(outFile); + + const CMyContact& myContact = reinterpret_cast(aContact); + + buf.Format(_L8("\r\n"), myContact.iAttributes); + outFile.Write(buf); + + buf.Format(_L8("\r\n"), myContact.iId, myContact.iId); + outFile.Write(buf); + + buf.Format(_L8("\r\n"), myContact.iTemplateRefId, myContact.iTemplateRefId); + outFile.Write(buf); + + +/* outFile.Write(_L8("\r\n")); + + outFile.Write(_L8("\r\n"));*/ + + buf.Format(_L8("\r\n"), myContact.iTemplateRefId, myContact.iAccessCount); + outFile.Write(buf); + + + if (aContact.Type() == KUidContactCard || + aContact.Type() == KUidContactGroup || + aContact.Type() == KUidContactOwnCard) + { + const CMyContactPlusGroup& myContactPlusGroup = reinterpret_cast(aContact); + PrintIdArrayL(outFile, myContactPlusGroup.iGroups, _L8("Belongs to"), buf); + + if (aContact.Type() == KUidContactGroup) + { + const CMyContactGroup& myContactGrp = reinterpret_cast(aContact); + PrintIdArrayL(outFile, myContactGrp.iItems, _L8("Contains"), buf); + } + } + + outFile.Write(_L8("
Attributes:0x%08x
Contact ID:%d (%x)
Template Ref ID: %d (%x)
Last Modified:")); + myContact.iLastModified.FormatL(buf16,KDateTimeFormat); + buf.Copy(buf16); + outFile.Write(buf); + outFile.Write(_L8("
Creation Date:")); + myContact.iCreationDate.FormatL(buf16,KDateTimeFormat); + buf.Copy(buf16); + outFile.Write(buf); + outFile.Write(_L8("
Access count: %d

\r\n")); + + PrintFieldsTableL(outFile, aContact.CardFields(), buf); + + CleanupStack::PopAndDestroy(&outFile); + CleanupStack::PopAndDestroy(&fs); + } + + +