williamr@2: // Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@2: // All rights reserved. williamr@2: // This component and the accompanying materials are made available williamr@4: // under the terms of "Eclipse Public License v1.0" williamr@2: // which accompanies this distribution, and is available williamr@4: // at the URL "http://www.eclipse.org/legal/epl-v10.html". williamr@2: // williamr@2: // Initial Contributors: williamr@2: // Nokia Corporation - initial contribution. williamr@2: // williamr@2: // Contributors: williamr@2: // williamr@2: // Description: williamr@2: // williamr@2: williamr@2: #ifndef __VPROP_H__ williamr@2: #define __VPROP_H__ williamr@2: williamr@2: #ifndef __E32BASE_H__ williamr@2: #include williamr@2: #endif williamr@2: williamr@2: #ifndef __BADESCA_H__ williamr@2: #include williamr@2: #endif williamr@2: williamr@2: #ifndef __S32STRM_H__ williamr@2: #include williamr@2: #endif williamr@2: williamr@2: #ifndef __E32MATH_H__ williamr@2: #include williamr@2: #endif williamr@2: williamr@2: williamr@2: #ifndef __VUID_H__ williamr@2: #include williamr@2: #endif williamr@2: williamr@2: #ifndef __VTOKEN_H__ williamr@2: #include williamr@2: #endif williamr@2: williamr@2: #ifndef __VUTIL_H__ williamr@2: #include williamr@2: #endif williamr@2: williamr@2: #ifndef __S32FILE_H__ williamr@2: #include williamr@2: #endif williamr@2: // williamr@2: williamr@2: class CParserProperty; williamr@2: class CVersitParser; williamr@2: class MVersitPlugIn; williamr@2: class CParserPropertyValueCDesCArray; williamr@2: williamr@4: #ifndef SYMBIAN_ENABLE_SPLIT_HEADERS williamr@2: const TInt KRandomnumberlen = 5; williamr@4: const TInt KMaxGeneratedfilenamelen =16; williamr@4: #endif williamr@2: // williamr@2: // CParserParam williamr@2: // williamr@2: williamr@2: class CParserParam : public CBase williamr@2: /** A Versit property parameter. williamr@2: williamr@2: A property parameter consists of a name and optionally a value, both in descriptor williamr@2: form. Parser properties (class CParserProperty) may own one or more property williamr@2: parameters. williamr@2: williamr@2: Note: williamr@2: williamr@2: The private parameter name and value members are stored as narrow (8-bit) williamr@2: rather than 16-bit Unicode descriptors. williamr@2: williamr@2: However, certain member functions take or return a Unicode value, williamr@2: for the purpose of backwards compatibility. In this case a simple conversion williamr@2: takes place: this ignores the top 8 bits (for Unicode -> Narrow) or adds zero williamr@2: for the top 8-bits (for Narrow->Unicode). williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C static CParserParam* NewL(const TDesC8& aName, const TDesC8& aValue); williamr@2: IMPORT_C static CParserParam* NewL(const TDesC8& aName, const TDesC& aValue); williamr@2: IMPORT_C ~CParserParam(); williamr@2: IMPORT_C void SetValueL(const TDesC8& aValue); williamr@2: IMPORT_C void SetValueL(HBufC8* aValue); williamr@2: IMPORT_C TInt ExternalizeL(RWriteStream& aStream) const; williamr@2: IMPORT_C TPtrC8 Name() const; williamr@2: IMPORT_C TPtrC8 Value() const; williamr@2: IMPORT_C HBufC* ValueL() const; williamr@2: IMPORT_C TInt ExternalizeL(RWriteStream& aStream, TInt& aLengthOutput, CVersitParser* aVersitParser) const; williamr@2: private: williamr@2: CParserParam(HBufC8* aName, HBufC8* aValue); williamr@2: private: williamr@2: HBufC8* iParamName; williamr@2: HBufC8* iValue; williamr@2: }; williamr@2: williamr@2: // williamr@2: // TVersitDateTime williamr@2: // williamr@2: williamr@2: class TVersitDateTime williamr@2: /** Defines a Versit date and time. williamr@2: williamr@2: This class is used throughout Versit to represent the date and time. It uses williamr@2: a TDateTime object to store the date/time value and records whether this value williamr@2: is local to the machine which originated the vCard, local to the machine on williamr@2: which the code is running, or universal time (UTC). williamr@2: williamr@2: The Year(), Month() and Day() member functions of class TDateTime may be used williamr@2: to extract the date and time components from the TVersitDateTime::iDateTime. williamr@2: @publishedAll williamr@2: @released */ williamr@2: { williamr@2: public: williamr@2: /** Relative time flags. */ williamr@2: enum TRelativeTime williamr@2: { williamr@2: /** Time is stored in UTC. */ williamr@2: EIsUTC, williamr@2: /** Time is local to the machine which originated the vCard. */ williamr@2: EIsVCardLocal, williamr@2: /** Time is local to the machine on which the code is running. */ williamr@2: EIsMachineLocal, williamr@2: /** Unused. */ williamr@2: EIsCorrect williamr@2: }; williamr@2: IMPORT_C TVersitDateTime(const TDateTime& aDateTime,TRelativeTime aRelativeTime); williamr@2: williamr@2: /** Date/time flags. williamr@2: @publishedAll williamr@2: @deprecated since 9.1*/ williamr@2: enum TVersitDateTimeFlags williamr@2: { williamr@2: EExportNullFlag=0, williamr@2: /** Indicates whether the relative time is to be externalized along with the date/time williamr@2: value. williamr@2: williamr@2: The flag is set to 'EExportNullFlag' by default. williamr@2: williamr@2: This is only implemented (by CParserTimePropertyValue::EncodeVersitDateTimeL()) williamr@2: if the date/time is universal. When the flag is set, the externalised value williamr@2: is followed by the token, KVersitTokenUniversalTime. */ williamr@2: EExportTimeZoneDesignator=0x01, williamr@2: EExportLeaveAsLocalTime=0x02 williamr@2: }; williamr@2: /** williamr@2: @deprecated since 9.1 williamr@2: */ williamr@2: inline void SetFlag(TVersitDateTimeFlags aFlag) { iFlags |= aFlag; } williamr@2: /** williamr@2: @deprecated since 9.1 williamr@2: */ williamr@2: inline TBool IsFlagSet(TVersitDateTimeFlags aFlag) const { return iFlags & aFlag; } williamr@2: /** williamr@2: @deprecated since 9.1 williamr@2: */ williamr@2: inline void ClearFlag(TVersitDateTimeFlags aFlag) { iFlags &= ~aFlag; } williamr@2: public: williamr@2: /** The date/time value. */ williamr@2: TDateTime iDateTime; williamr@2: /** Specifies whether the time value is local to the machine which originated the williamr@2: vCard, local to the machine on which the code is running, or universal. */ williamr@2: TRelativeTime iRelativeTime; williamr@2: private: williamr@2: TInt iFlags; williamr@2: }; williamr@2: williamr@2: // williamr@2: // CParserPropertyValue williamr@2: // williamr@2: class CParserPropertyValue : public CBase williamr@2: /** Abstract base class for all property values. williamr@2: williamr@2: Defines a pure virtual ExternalizeL() function which should write out the williamr@2: property value to a stream. williamr@2: williamr@2: The type of derived class is returned by the Uid() function; the UID value is williamr@2: specified on construction. williamr@2: williamr@2: The other functions relate to the character set, encoding format and plug-in williamr@2: used during externalising. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: /** Externalises the property value to a write stream. williamr@2: williamr@2: Implementations of this function are invoked by the parser's ExternalizeL() williamr@2: function. williamr@2: williamr@2: @param aStream Stream to which the property value is externalised. williamr@2: @param aEncodingCharset The character set and encoding information. williamr@2: @param aLengthOutput The amount of text that has been outputted so far on the williamr@2: line (for the property name), which may need to be taken into account when williamr@2: calculating if and where any line break should occur. */ williamr@2: virtual void ExternalizeL(RWriteStream& aStream,const Versit::TEncodingAndCharset& aEncodingCharset,TInt aLengthOutput)=0; williamr@2: IMPORT_C virtual TBool IsAsciiCharacterSetSufficient(); williamr@2: IMPORT_C virtual void EncodeL(CBufBase* aTarget,const TDesC8& aSource,const TUid& aEncoding) const; williamr@2: IMPORT_C virtual TBool SupportsInterface(const TUid& /*aInterfaceUid*/) const; williamr@2: inline TUid Uid() const; williamr@2: inline void SetPlugIn(MVersitPlugIn* aPlugIn); williamr@2: protected: williamr@2: IMPORT_C CParserPropertyValue(const TUid& aPropertyValueUid); williamr@2: IMPORT_C void FoldEncodeAndWriteValueToStreamL(RWriteStream& aStream, const TDesC& aValue williamr@2: ,const Versit::TEncodingAndCharset& aEncodingCharset,TInt& aLengthOutput) const; williamr@2: IMPORT_C void FoldEncodeAndWriteValueToStreamL(RWriteStream& aStream, const CDesCArray* aValueArray williamr@2: ,const Versit::TEncodingAndCharset& aEncodingCharset,TInt& aLengthOutput) const; williamr@2: IMPORT_C void FoldAndWriteValueToStreamL(RWriteStream& aStream, const TDesC& aValue williamr@2: ,const Versit::TEncodingAndCharset& aEncodingCharset,TInt& aLengthOutput) const; williamr@2: IMPORT_C static void Append(TDes16& aTarget,TDesC8& aSource); williamr@2: protected: williamr@2: inline MVersitPlugIn* PlugIn(); williamr@2: williamr@2: private: williamr@2: TUid iPropertyValueTypeUid; williamr@2: MVersitPlugIn* iPlugIn; williamr@2: }; williamr@2: williamr@2: // williamr@2: // CParserTimePropertyValue williamr@2: // williamr@2: williamr@2: class CVersitDaylight; williamr@2: williamr@2: class CParserTimePropertyValue : public CParserPropertyValue williamr@2: /** Abstract base class for all of the date/time property value classes. williamr@2: williamr@2: Provides date/time conversion functions between machine-local and universal williamr@2: time. williamr@2: williamr@2: The date/time property value classes are CParserPropertyValueAlarm, williamr@2: CParserPropertyValueDate, CParserPropertyValueDateTime, williamr@2: CParserPropertyValueMultiDateTime, CParserPropertyValueDaylight and williamr@2: CParserPropertyValueRecurrence. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: /** This is implemented, where applicable, to convert date/time williamr@2: values into universal time. williamr@2: williamr@2: The date/time is checked against the daylight saving information provided williamr@2: in aDaylight. If it falls inside the daylight saving period then the daylight williamr@2: saving offset is subtracted from the time to convert it to universal time. williamr@2: Otherwise aIncrement is added to the date/time of the alarm to convert it williamr@2: to universal time. williamr@2: williamr@2: Note that the daylight savings offset will adjust the time both for the daylight williamr@2: saving and for the time zone. williamr@2: williamr@2: The function has no effect if it date/times are already stored in universal williamr@2: time. williamr@2: williamr@2: If aDaylight is a NULL pointer then aIncrement is used. williamr@2: williamr@2: @param aIncrement A time interval in seconds which represents the time zone's williamr@2: offset from universal time. williamr@2: @param aDaylight Pointer to the specification for daylight saving. If the alarm's williamr@2: time value is within the period for daylight saving, the value is modified williamr@2: by the daylight saving offset (which accounts for both the time zone and daylight williamr@2: saving rule). williamr@2: @deprecated since 9.1 williamr@2: */ williamr@2: IMPORT_C virtual void ConvertAllDateTimesToUTCL(const TTimeIntervalSeconds& aIncrement,const CVersitDaylight* aDaylight)=0; williamr@2: /** Pure virtual function which is implemented, where applicable, to convert the williamr@2: date/time property value into machine-local time. williamr@2: williamr@2: This process involves adjusting the date/time value by the offset in aIncrement. williamr@2: williamr@2: The function has no effect if the value is already stored as machine-local williamr@2: time. williamr@2: williamr@2: The universal date/times are assumed to have been corrected for any daylight saving williamr@2: rule in effect. williamr@2: williamr@2: @param aIncrement A time interval which represents the number of seconds which williamr@2: is to be added to the date/time value. This should normally be the universal williamr@2: time offset for the machine's locale. williamr@2: @deprecated since 9.1 */ williamr@2: IMPORT_C virtual void ConvertAllUTCDateTimesToMachineLocalL(const TTimeIntervalSeconds& aIncrement)=0; williamr@2: static void ConvertDateTime(TDateTime& aDateTime,const TTimeIntervalSeconds& aIncrement,const CVersitDaylight* aDaylight,TBool aTo); williamr@2: public: //from CParserPropertyValue williamr@2: IMPORT_C virtual TBool SupportsInterface(const TUid& aInterfaceUid) const; williamr@2: protected: williamr@2: IMPORT_C CParserTimePropertyValue(const TUid& aPropertyValueUid); williamr@2: IMPORT_C void ConvertDateTime(TDateTime* aDateTime,const TTimeIntervalSeconds& aIncrement,const CVersitDaylight* aDaylight); williamr@2: IMPORT_C void EncodeVersitDateTimeL(TDes8& aBuf,const TVersitDateTime& aDateTime,TBool aEncodeTime=ETrue) const; williamr@2: IMPORT_C void EncodeTimePeriodL(TDes8& aBuf,const TTime& aTimePeriod) const; williamr@2: }; williamr@2: williamr@2: // williamr@2: // CParserPropertyValueHBufC williamr@2: // williamr@2: class CParserPropertyValueHBufC : public CParserPropertyValue williamr@2: /** A heap descriptor property value parser. williamr@2: williamr@2: Many properties are stored using this class. Examples are vCard e-mails and williamr@2: vCalendar locations. williamr@2: williamr@2: The UID for a heap descriptor property value is KVersitPropertyHBufCUid. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C static CParserPropertyValueHBufC* NewL(const TDesC& aValue); williamr@2: IMPORT_C CParserPropertyValueHBufC(HBufC16* aValue); williamr@2: IMPORT_C ~CParserPropertyValueHBufC(); williamr@2: IMPORT_C TPtrC Value() const; williamr@2: IMPORT_C HBufC* TakeValueOwnership(); williamr@2: IMPORT_C CParserPropertyValueCDesCArray* TreatAsArrayPropertyLC(const CParserProperty& aOwningProperty) const; williamr@2: public: // from CParserPropertyValue williamr@2: IMPORT_C TBool IsAsciiCharacterSetSufficient(); williamr@2: IMPORT_C void ExternalizeL(RWriteStream& aStream,const Versit::TEncodingAndCharset& aEncodingCharset,TInt aLengthOutput); williamr@2: private: williamr@2: CParserPropertyValueHBufC(); williamr@2: void ConstructL(const TDesC& aValue); williamr@2: protected: williamr@2: HBufC* iValue; williamr@2: }; williamr@2: williamr@2: // williamr@2: // CParserPropertyValueBinary williamr@2: // williamr@2: williamr@2: class CParserPropertyValueBinary : public CParserPropertyValue williamr@2: /** A binary property value parser. williamr@2: williamr@2: It is used to store logos, photos, alarm content and binary attachment as binary values. williamr@2: williamr@2: The UID for a binary property value is KVersitPropertyBinaryUid. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C static CParserPropertyValueBinary* NewL(const TDesC8& aValue); williamr@2: IMPORT_C static CParserPropertyValueBinary* NewLC(const TDesC8& aValue); williamr@2: williamr@2: inline CParserPropertyValueBinary(CBufSeg& aValue); williamr@2: IMPORT_C ~CParserPropertyValueBinary(); williamr@2: IMPORT_C const CBufSeg* Value() const; williamr@2: public: // from CParserPropertyValue williamr@2: IMPORT_C void ExternalizeL(RWriteStream& aStream,const Versit::TEncodingAndCharset& aEncodingCharset,TInt /*aLengthOutput*/); williamr@2: protected: williamr@2: inline CParserPropertyValueBinary(); williamr@2: void ConstructL(const TDesC8& aValue); williamr@2: void ExternalizeL(RWriteStream& aStream, const Versit::TEncodingAndCharset& aEncodingCharset, TInt aLengthOutput, RReadStream& aReadStream); williamr@2: williamr@2: protected: williamr@2: CBufSeg* iValue; williamr@2: };// williamr@4: williamr@4: #ifndef SYMBIAN_ENABLE_SPLIT_HEADERS williamr@2: NONSHARABLE_CLASS(CParserPropertyValueBinaryFile) : public CParserPropertyValueBinary williamr@2: /** A file property value parser. williamr@2: williamr@2: It is used to store a file handle so that the binary data can be read through the handle when exporting. williamr@2: It is not used when importing. williamr@2: The UID for a binary property value is KVersitPropertyBinaryUid. williamr@2: @publishedPartner williamr@4: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C static CParserPropertyValueBinaryFile* NewL(const RFile& aFileHandle); williamr@2: IMPORT_C ~CParserPropertyValueBinaryFile(); williamr@2: public: // from CParserPropertyValue williamr@2: void ExternalizeL(RWriteStream& aStream,const Versit::TEncodingAndCharset& aEncodingCharset,TInt aLengthOutput); williamr@2: williamr@2: private: williamr@2: void ConstructL(const RFile& aFileHandle); williamr@2: private: williamr@2: RFileReadStream iFileStream; williamr@2: }; williamr@4: #endif //SYMBIAN_ENABLE_SPLIT_HEADERS williamr@2: // CParserPropertyValueCDesCArray williamr@2: // williamr@2: class CParserPropertyValueCDesCArray : public CParserPropertyValue williamr@2: /** A property value parser which stores an array of descriptors. williamr@2: williamr@2: Can be used by both vCards and vCalendars, for example to store a postal address williamr@2: or information about an organisation. williamr@2: williamr@2: The UID for a descriptor array property value is KVersitPropertyCDesCArrayUid. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C CParserPropertyValueCDesCArray(CDesCArray* aValue); williamr@2: IMPORT_C ~CParserPropertyValueCDesCArray(); williamr@2: inline CDesCArray* Value() const; williamr@2: IMPORT_C TBool IsPresent(const TDesC& aValue) const; williamr@2: public: // from CParserPropertyValue williamr@2: IMPORT_C TBool IsAsciiCharacterSetSufficient(); williamr@2: IMPORT_C void ExternalizeL(RWriteStream& aStream,const Versit::TEncodingAndCharset& aEncodingCharset,TInt aLengthOutput); williamr@2: protected: williamr@2: CDesCArray* iValue; williamr@2: }; williamr@2: williamr@2: // williamr@2: // CParserPropertyValueTimeZone williamr@2: // williamr@2: williamr@2: class CParserPropertyValueTimeZone: public CParserPropertyValue williamr@2: /** A time zone property value parser. williamr@2: williamr@2: Stores and externalises a property value which represents the time zone information williamr@2: for a vCard or vCalendar. williamr@2: williamr@2: The time zone is specified as the universal time offset. This is a time interval williamr@2: which is a positive or negative number of seconds from universal time. Time williamr@2: zones east of universal time have positive numbers. Time zones west of universal williamr@2: time have negative numbers. williamr@2: williamr@2: The UID for a time zone property value is KVersitPropertyTimeZoneUid. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: static void EncodeTimeZone(TDes8& aBuf,TTimeIntervalSeconds iValue); williamr@2: IMPORT_C CParserPropertyValueTimeZone(TTimeIntervalSeconds aValue); williamr@2: inline TTimeIntervalSeconds Value() const; williamr@2: public: // from CParserPropertyValue williamr@2: IMPORT_C void ExternalizeL(RWriteStream& aStream,const Versit::TEncodingAndCharset& aEncodingCharset,TInt /*aLengthOutput*/); williamr@2: protected: williamr@2: TTimeIntervalSeconds iValue; williamr@2: }; williamr@2: williamr@2: // williamr@2: // CVersitDaylight williamr@2: // williamr@2: class CVersitDaylight : public CBase williamr@2: /** Universal time offset information, including the daylight savings offset. williamr@2: williamr@2: This class deals with the daylight saving offset: a one hour offset that occurs williamr@2: in many countries during part of the year. This offset needs to be taken into williamr@2: account when converting Versit times (TVersitDateTimes) between universal williamr@2: and machine-local times. williamr@2: williamr@2: This class stores information about the offset, including its length in seconds, williamr@2: when it takes effect and the standard time designations. williamr@2: williamr@2: Note that the universal offset (iOffset) is the sum of the daylight saving williamr@2: offset and any time zone offset, as it is the absolute offset from GMT. williamr@2: williamr@2: An instance of this class is owned by the CParserPropertyValueDaylight class. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C static CVersitDaylight* NewL(TBool aSavings, TTimeIntervalSeconds aOffset, TVersitDateTime* aStartTime, TVersitDateTime* aEndTime, const TDesC& aStandardDesignation, const TDesC& aDaylightDesignation); williamr@2: IMPORT_C ~CVersitDaylight(); williamr@2: private: williamr@2: CVersitDaylight(TBool aSavings, TTimeIntervalSeconds aOffset, TVersitDateTime* aStartTime, TVersitDateTime* aEndTime); williamr@2: void ConstructL(const TDesC& aStandardDesignation, const TDesC& aDaylightDesignation); williamr@2: public: williamr@2: /** A sort key than can be used when sorting an array of properties by start date/time. */ williamr@2: TInt64 iStartTimeSortKey; williamr@2: /** The daylight savings flag: this is ETrue if daylight saving is in effect williamr@2: in the locale and EFalse if not. */ williamr@2: TBool iSavings; williamr@2: /** The absolute offset from GMT, which is the sum of the time zone and daylight williamr@2: saving offsets (in seconds). */ williamr@2: TTimeIntervalSeconds iOffset; williamr@2: /** The date/time at which the period for daylight saving begins. */ williamr@2: TVersitDateTime* iStartTime; williamr@2: /** The date/time at which the period for daylight saving ends. */ williamr@2: TVersitDateTime* iEndTime; williamr@2: /** The standard time designation, e.g. GMT, EST. */ williamr@2: HBufC* iStandardDesignation; williamr@2: /** The daylight saving time designation, e.g. BST, EDT. */ williamr@2: HBufC* iDaylightDesignation; williamr@2: }; williamr@2: williamr@2: // williamr@2: // CParserPropertyValueDaylight williamr@2: // williamr@2: class CParserPropertyValueDaylight : public CParserTimePropertyValue williamr@2: /** A property value parser which contains the daylight savings rule for a vCalendar. williamr@2: williamr@2: The property value is stored using an instance of the CVersitDaylight class. williamr@2: williamr@2: The UID for a daylight savings rule property value is KVersitPropertyDaylightUid. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C CParserPropertyValueDaylight(CVersitDaylight* aValue); williamr@2: IMPORT_C ~CParserPropertyValueDaylight(); williamr@2: inline CVersitDaylight* Value() const; williamr@2: public: // from CParserTimePropertyValue williamr@2: IMPORT_C void ConvertAllDateTimesToUTCL(const TTimeIntervalSeconds& aIncrement,const CVersitDaylight* aDaylight); williamr@2: IMPORT_C void ConvertAllUTCDateTimesToMachineLocalL(const TTimeIntervalSeconds& aIncrement); williamr@2: public: // from CParserPropertyValue williamr@2: IMPORT_C void ExternalizeL(RWriteStream& aStream,const Versit::TEncodingAndCharset& aEncodingCharset,TInt aLengthOutput); williamr@2: private: williamr@2: CVersitDaylight* iValue; williamr@2: }; williamr@2: williamr@2: // williamr@2: // CParserPropertyValueDateTime williamr@2: // williamr@2: class CParserPropertyValueDateTime : public CParserTimePropertyValue williamr@2: /** A date/time property value parser. williamr@2: williamr@2: The date/time value is contained in a TVersitDateTime object. williamr@2: williamr@2: The UID for a date/time property value is KVersitPropertyDateTimeUid. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C CParserPropertyValueDateTime(TVersitDateTime* aValue); williamr@2: IMPORT_C ~CParserPropertyValueDateTime(); williamr@2: inline TVersitDateTime* Value() const; williamr@2: public: // from CParserTimePropertyValue williamr@2: IMPORT_C void ConvertAllDateTimesToUTCL(const TTimeIntervalSeconds& aIncrement,const CVersitDaylight* aDaylight); williamr@2: IMPORT_C void ConvertAllUTCDateTimesToMachineLocalL(const TTimeIntervalSeconds& aIncrement); williamr@2: public: // from CParserPropertyValue williamr@2: IMPORT_C void ExternalizeL(RWriteStream& aStream,const Versit::TEncodingAndCharset& /*aEncodingCharset*/,TInt /*aLengthOutput*/); williamr@2: protected: williamr@2: TVersitDateTime* iValue; williamr@2: }; williamr@2: williamr@2: // williamr@2: // CParserPropertyValueDate williamr@2: // williamr@2: class CParserPropertyValueDate : public CParserTimePropertyValue williamr@2: /** A date property value parser. williamr@2: williamr@2: The date value is contained in a TVersitDateTime object. williamr@2: williamr@2: The UID for a date property value is KVersitPropertyDateUid. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C CParserPropertyValueDate(TVersitDateTime* aValue); williamr@2: IMPORT_C ~CParserPropertyValueDate(); williamr@2: inline TVersitDateTime* Value() const; williamr@2: public: // from CParserTimePropertyValue williamr@2: IMPORT_C void ConvertAllDateTimesToUTCL(const TTimeIntervalSeconds& /*aIncrement*/,const CVersitDaylight* /*aDaylight*/); williamr@2: IMPORT_C void ConvertAllUTCDateTimesToMachineLocalL(const TTimeIntervalSeconds& /*aIncrement*/); williamr@2: public: // from CParserPropertyValue williamr@2: IMPORT_C void ExternalizeL(RWriteStream& aStream,const Versit::TEncodingAndCharset& aEncodingCharset,TInt /*aLengthOutput*/); williamr@2: private: williamr@2: TVersitDateTime* iValue; williamr@2: }; williamr@2: williamr@2: // williamr@2: // CParserPropertyValueMultiDateTime williamr@2: // williamr@2: class CParserPropertyValueMultiDateTime : public CParserTimePropertyValue williamr@2: /** A property value parser which stores a list of date/time values using an array williamr@2: of TVersitDateTime objects. williamr@2: williamr@2: The UID for a multiple date/time property value is KVersitPropertyMultiDateTimeUid. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C CParserPropertyValueMultiDateTime(CArrayPtr* aValue); williamr@2: IMPORT_C ~CParserPropertyValueMultiDateTime(); williamr@2: inline CArrayPtr* Value() const; williamr@2: public: // from CParserTimePropertyValue williamr@2: IMPORT_C void ConvertAllDateTimesToUTCL(const TTimeIntervalSeconds& aIncrement,const CVersitDaylight* aDaylight); williamr@2: IMPORT_C void ConvertAllUTCDateTimesToMachineLocalL(const TTimeIntervalSeconds& aIncrement); williamr@2: public: // from CParserPropertyValue williamr@2: IMPORT_C void ExternalizeL(RWriteStream& aStream,const Versit::TEncodingAndCharset& /*aEncodingCharset*/,TInt aLengthOutput); williamr@2: protected: williamr@2: CArrayPtr* iValue; williamr@2: }; williamr@2: williamr@2: // williamr@2: // CParserPropertyValueInt williamr@2: // williamr@2: class CParserPropertyValueInt : public CParserPropertyValue williamr@2: /** An integer property value parser. williamr@2: williamr@2: This stores a property value as a signed integer. For example, an employee williamr@2: ID number might be stored using this class. williamr@2: williamr@2: The UID for an integer property value is KVersitPropertyIntUid. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C CParserPropertyValueInt(TInt aValue); williamr@2: inline TInt Value() const; williamr@2: public: // from CParserPropertyValue williamr@2: IMPORT_C void ExternalizeL(RWriteStream& aStream,const Versit::TEncodingAndCharset& aEncodingCharset,TInt /*aLengthOutput*/); williamr@2: protected: williamr@2: TInt iValue; williamr@2: }; williamr@2: williamr@2: // williamr@2: // CParserProperty williamr@2: // williamr@2: williamr@2: class CParserProperty : public CBase williamr@2: /** A vCard or vCalendar property. williamr@2: williamr@2: A property consists of a name, an optional value and one or more optional williamr@2: parameters. williamr@2: williamr@2: The name, value and parameters are initialised on construction. williamr@2: williamr@2: Versit properties have the general form: williamr@2: williamr@2: Property Name (; Property Parameter Name(=Property Parameter Value)* : Property williamr@2: Value) williamr@2: williamr@2: where items in brackets are optional and * indicates that the item may be williamr@2: repeated. williamr@2: williamr@2: For instance, TEL; HOME; ENCODING=QUOTED-PRINTABLE; CHARSET=US-ASCII : 01234 567890 williamr@2: williamr@2: Here, TEL is the property name; HOME, ENCODING and CHARSET are property parameter williamr@2: names; QUOTED-PRINTABLE and US-ASCII are property parameter values. The component williamr@2: following the colon is the property value. williamr@2: williamr@2: Properties also have a name UID, which set during internalisation of a property williamr@2: and used only during internalisation. It is set by SetNameUid() and is used williamr@2: to allow number comparisons during internalisation. This provides a faster williamr@2: alternative to string comparisons when checking a property to see if it is williamr@2: a significant one (e.g. a begin or binary property). This is the only use williamr@2: of the name UID: it is not used during externalisation of a property. williamr@2: williamr@2: Note that grouped properties are supported by the derived class, CParserGroupedProperty. williamr@2: The vCalender parser does not have property groups, and so stores all properties williamr@2: using this base class, whereas the vCard parser stores all properties using williamr@2: CParserGroupedProperty. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C static CParserProperty* NewL(CParserPropertyValue& aPropertyValue, const TDesC8& aName, CArrayPtr* aArrayOfParams); williamr@2: IMPORT_C CParserProperty(CArrayPtr* aArrayOfParams); williamr@2: IMPORT_C ~CParserProperty(); williamr@2: IMPORT_C virtual void ExternalizeL(RWriteStream& aStream, CVersitParser* aVersitParser = NULL); williamr@2: IMPORT_C CParserParam* Param(const TDesC8& aParamName) const; // note params can only appear once williamr@2: IMPORT_C void AddParamL(CParserParam* aParam); williamr@2: IMPORT_C void DeleteParam(TDesC8& aParamName); williamr@2: IMPORT_C void SetNameL(const TDesC8& aName); williamr@2: IMPORT_C virtual TBool SupportsInterface(const TUid& /*aInterfaceUid*/) const; williamr@2: IMPORT_C TPtrC8 Name() const; williamr@2: inline void SetValue(CParserPropertyValue* aPropertyValue); williamr@2: inline CParserPropertyValue* Value() const; williamr@2: inline TUid Uid() const; williamr@2: inline void SetNameUid(TUid aUid); williamr@2: inline TUid NameUid() const; williamr@2: inline void SetParamArray(CArrayPtr* aArrayOfParams); williamr@2: williamr@2: williamr@2: IMPORT_C TBool LoadBinaryValuesFromFilesL(RFs& aFileSession); williamr@2: IMPORT_C TBool SaveBinaryValuesToFilesL(TInt aSizeThreshold,const TDesC& aPath,RFs& aFileSession); williamr@2: protected: williamr@2: IMPORT_C CParserProperty(CParserPropertyValue& aPropertyValue, CArrayPtr* aArrayOfParams); williamr@2: IMPORT_C static void ConstructSelfL(CParserProperty& aSelf,const TDesC8& aName); williamr@2: williamr@2: public: williamr@2: IMPORT_C CArrayPtr* ParamArray()const; williamr@2: williamr@2: protected: williamr@2: CParserPropertyValue* iPropertyValue; williamr@2: HBufC8* iPropertyName; williamr@2: TUid iPropertyNameUid; williamr@2: CArrayPtr* iArrayOfParams; williamr@2: williamr@2: private: williamr@2: friend class CVersitParser; williamr@2: inline HBufC8*& NameBuf(); williamr@2: IMPORT_C virtual void Reserved(); williamr@2: void ReadBinaryDataL(const CBufSeg* aBufseg_ptr,HBufC8** aBuffer); williamr@2: void GenerateNameAndCreateFileL(RFs& aFileSession,TPtr8 aPropertyName,RFile& aFile,TDes& aFileName); williamr@2: williamr@2: }; williamr@2: williamr@2: #include williamr@2: williamr@2: #endif