phonebookengines/contactsmodel/cntvcard/CNTVCARD.H
changeset 0 e686773b3f54
equal deleted inserted replaced
-1:000000000000 0:e686773b3f54
       
     1 // Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // under the terms of "Eclipse Public License v1.0"
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 //
       
    15 
       
    16 #ifndef __CNTVCARD_H__
       
    17 #define __CNTVCARD_H__
       
    18 
       
    19 // System includes
       
    20 #include <cntdb.h>
       
    21 #include <vcard.h>
       
    22 
       
    23 // Classes referenced
       
    24 class CVCardAddress;
       
    25 class CVCardItemAndLabel;
       
    26 class CVCardToContactsAppConverter;
       
    27 
       
    28 // Enumerations
       
    29 /**
       
    30 @publishedAll
       
    31 @released
       
    32 */
       
    33 enum TCntVCardImportType
       
    34 	{
       
    35 	ECntVCardImportTypeFirstSync,
       
    36 	ECntVCardImportTypeMerge
       
    37 	};
       
    38 		
       
    39 class CContactVCardConverter : public CContactEcomConverter
       
    40 /**
       
    41 Plug-in vCard to CContactItem converter.
       
    42 @publishedAll
       
    43 @released
       
    44 */
       
    45 	{
       
    46 public:
       
    47 	// Ideally each converter should be able to define its own flags relevant 
       
    48 	// to its own mode of operation. Due to the legacy design (defining flags 
       
    49 	// in CContactDatabase) they have to be redeclared here. Long term we hope 
       
    50 	// to deprecate the CContactDatabase flags and rely on those declared in 
       
    51 	// the converter implementation.
       
    52 	/** Import and export format flags. Contacts can be imported into
       
    53 	or exported from the contact database as vCards.
       
    54 
       
    55 	The following options are available during import and export.
       
    56                
       
    57 	@publishedAll
       
    58 	@released
       
    59 	*/
       
    60 	enum TOptions 
       
    61 	   	{
       
    62   		EDefault = CContactDatabase::EDefault,
       
    63         /** Handle Symbian's extended vCard format options. */
       
    64 		EIncludeX = CContactDatabase::EIncludeX,
       
    65 		/** Support non-standard extensions requried by Symbian PC connectivity software
       
    66 		and Microsoft, amongst others. */
       
    67   		ETTFormat = CContactDatabase::ETTFormat ,
       
    68 		/** Don't export the contact ID (for exporting only). */
       
    69 		EExcludeUid = CContactDatabase::EExcludeUid,
       
    70 		/** Decrease the contact's access count when importing and exporting. */
       
    71 		EDecreaseAccessCount = CContactDatabase::EDecreaseAccessCount,
       
    72 		/** Only import the first contact in the read stream (for importing only). */
       
    73 		EImportSingleContact = CContactDatabase::EImportSingleContact,
       
    74 		/** Increase the contact's access count when importing and exporting. */
       
    75 		EIncreaseAccessCount = CContactDatabase::EIncreaseAccessCount,
       
    76 		/** Sets a contact item to the local time when importing. */
       
    77 		ELocalTime = CContactDatabase::ELocalTime,
       
    78 		/** Allows to set a template to a contact item that does not exist. */
       
    79 		ENullTemplateId = CContactDatabase::ENullTemplateId,
       
    80 		/** Allows to set white spaces as value for an empty field.  */
       
    81 		EConnectWhitespace=0x0100,		// Used to correctly manage the TimeIS protocol for syncing.
       
    82 		/**
       
    83 		During import ignore the UID property value of the vCard.  By ignoring
       
    84 		the UID the client is indicating that it knows that the contact does not
       
    85 		already exist in the database (i.e. the contact is being added rather
       
    86 		than being updated).  Within the CContactVCardConverter::ImportL()
       
    87 		method no attempt to search for the UID in the database will be made.
       
    88 		For a series of addition of vCards with UIDs use of this option will
       
    89 		give a performance improvement since the search for the UID in the
       
    90 		Contacts database can become very costly as the number of contacts
       
    91 		grows.
       
    92 		*/
       
    93 		EIgnoreUid = CContactDatabase::EConverterReserved1,		
       
    94 		/**
       
    95 		During import, if it is determined that the contact item being imported 
       
    96 		already exists in the database then the contact item in the database will 
       
    97 		be deleted before being replaced by the vCard being imported. This option
       
    98 		should be used when the client does not want a merge type behaviour for
       
    99 		existing contact items. This option will typically be used in a sync use case
       
   100 		where the vCard data that the client is provided with has already been through a process 
       
   101 		of conflict resolution and so the existing contact item should be replaced not merged.
       
   102 		*/		
       
   103 		EReplaceIfExists = CContactDatabase::EConverterReserved2,
       
   104   		};
       
   105   		
       
   106 	/**
       
   107 	@publishedAll
       
   108 	@released
       
   109 	*/
       
   110 	enum TVersitPropertyType
       
   111 		{
       
   112 		EPropertyValueSingle,
       
   113 		EPropertyValueComposite,
       
   114 		EPropertyValueHandlingNotImplemented
       
   115 		};
       
   116 public: // from CContactConverter
       
   117 	static CContactVCardConverter* NewL();
       
   118 	CArrayPtr<CContactItem>* ImportL(CContactDatabase& aDb,RReadStream& aReadStream,TBool& aImportSuccessful,TInt aOptions,TBool aImportSingle);
       
   119 	void ExportL(CContactDatabase& aDb,const CContactIdArray& aSelectedContactIds,RWriteStream& aWriteStream,TInt aOptions,const Versit::TVersitCharSet aCharSet, TBool aExportPrivateFields, TInt aCommitNumber);
       
   120 public: // Utility
       
   121 	static TBool ContainsExportableData(const TDesC& aText);
       
   122 	static TBool ContainsImportableData(const TDesC& aText, TVersitPropertyType aType, TCntVCardImportType aImportType);
       
   123 private:
       
   124 	static TBool ContainsData(const TDesC& aText);
       
   125 	void doImportL(CVCardToContactsAppConverter& aConverter, CParserVCard& aVCard, CContactDatabase& aDb, TInt aOption, TBool aIncAccessCount, TBool aDecAccessCount, TBool& aImportSuccessful, CArrayPtr<CContactItem>* aContactItems, TBool aIsInTransaction, TContactItemId aIdForUpdate);
       
   126 	TContactItemId IsVCardMergeNeededL(CVCardToContactsAppConverter& aConverter, CParserVCard& aVCard, CContactDatabase& aDb, TInt aOption);
       
   127 	void ModifyAccessCountL(CContactItem& aContact,  TBool aIncAccessCount, TBool aDecAccessCount);
       
   128 	void HandleAgentsInVCardL(CVCardToContactsAppConverter& aConverter, CArrayPtr<CParserProperty>* aAgentProperties, CContactItem& aContact, CContactDatabase& aDb, TInt aOption, TBool aIncAccessCount, TBool aDecAccessCount, CArrayPtr<CContactItem>* aContactItemArray, TBool aMerge);
       
   129  	};
       
   130 
       
   131 #endif
       
   132