pimappservices/calendarvcalplugin/Inc/agmvcal.h
changeset 0 f979ecb2b13e
child 18 c198609911f9
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pimappservices/calendarvcalplugin/Inc/agmvcal.h	Tue Feb 02 10:12:19 2010 +0200
@@ -0,0 +1,368 @@
+// Copyright (c) 1997-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:
+//
+
+/**
+ @file
+ @internalComponent 
+*/
+
+#ifndef __AGMVCAL_H__
+#define __AGMVCAL_H__
+
+
+#include <vcal.h>
+#include <apgdoor.h>
+#include <concnf.h>
+#include <confndr.h>
+#include <conlist.h>
+
+#include <tz.h>
+#include <tzconverter.h>
+#include <calcategory.h>
+#include <calentry.h>
+
+// Maximum characters in a GEO value should be 11 = -NNN.NNNNNN
+const TUint KGEOMaxWidthOfGeoValue = 11;
+
+const TUid KUidApaDoorStateStream={0x1000012a};
+//const TUid KUidApaDoorDocStream={0x10000144};
+const TUid KPlainTextToWordConverterUid={0x10001823};
+const TUid KWordToPlainTextConverterUid={0x10001824};
+const TUid KUidEtextToText={0x100040C8};
+const TUid KUidTextToEtext={0x100040C7};
+const TUid KUidTextToEtextNoTrim={0x10281B4C};
+const TInt KConverterBufferSize = 1024;
+
+// Extended VCal fields
+
+_LIT(KVCalTokenENTRYTYPE,"AGENDAENTRYTYPE"); // for externalizing
+_LIT(KVCalTokenXDASHENTRYTYPE,"X-EPOCAGENDAENTRYTYPE"); // for internalizing
+_LIT8(KVCalToken8ENTRYTYPE,"AGENDAENTRYTYPE"); // for externalizing
+_LIT8(KVCalToken8XDASHENTRYTYPE,"X-EPOCAGENDAENTRYTYPE"); // for internalizing
+
+_LIT(KVCalTokenTypeAPPT,"APPOINTMENT");
+_LIT(KVCalTokenTypeANNIV,"ANNIVERSARY");
+_LIT(KVCalTokenTypeEVENT,"EVENT");
+_LIT(KVCalTokenTypeTODO,"TODO");
+_LIT(KVCalTokenTypeREMINDER,"REMINDER");
+
+_LIT(KVCalTokenPUBLIC,"PUBLIC");
+_LIT(KVCalTokenPRIVATE,"PRIVATE");
+_LIT(KVCalTokenCONFIDENTIAL,"CONFIDENTIAL");
+
+_LIT(KVCalTokenTYPE,"TYPE");
+_LIT8(KVCalToken8TYPE,"TYPE");
+_LIT8(KVCalToken8RANGE,"RANGE");
+_LIT(KVCalValueEPOCSOUND,"X-EPOCSOUND");
+_LIT8(KVCalValue8EPOCSOUND,"X-EPOCSOUND");
+_LIT8(KVCalAlarmActionType, "X-CONTENTTYPE");
+_LIT8(KVCalAlarmActionTypeValue, "VALUE");
+_LIT8(KVCalContentValueUrl, "URL");
+_LIT8(KVCalContentValueInline, "INLINE");
+_LIT8(KVCalContentValueContentId, "CONTENT-ID");
+_LIT8(KVCalContentValueContentIdShort, "CID");
+_LIT8(KVCalAttachFileDate, "X-FILEDATE");
+
+
+//Recurence ID range
+_LIT8(KVCalRecurrenceIDRange8THISONLY,"THISONLY");
+_LIT8(KVCalRecurrenceIDRange8THISANDFUTURE,"THISANDFUTURE");
+_LIT8(KVCalRecurrenceIDRange8THISANDPRIOR,"THISANDPRIOR");
+
+// Attendee defines
+_LIT8(KICalAttendee8XDASHPHONEOWNER, 			"X-PHONEOWNER");
+
+_LIT(KVCalAttendeeROLE,"ROLE");
+_LIT(KVCalAttendeeSTATUS,"STATUS");
+_LIT(KVCalAttendeeRSVP,"RSVP");
+_LIT(KVCalAttendeeEXPECT,"EXPECT");
+_LIT8(KVCalAttendee8ROLE,"ROLE");
+_LIT8(KVCalAttendee8STATUS,"STATUS");
+_LIT8(KVCalAttendee8RSVP,"RSVP");
+_LIT8(KVCalAttendee8EXPECT,"EXPECT");
+
+_LIT(KVCalAttendeeRoleATTENDEE,"ATTENDEE");
+_LIT(KVCalAttendeeRoleORGANIZER,"ORGANIZER");
+_LIT(KVCalAttendeeRoleOWNER,"OWNER");
+_LIT(KVCalAttendeeRoleDELEGATE,"DELEGATE");
+_LIT8(KVCalAttendeeRole8ATTENDEE,"ATTENDEE");
+_LIT8(KVCalAttendeeRole8ORGANIZER,"ORGANIZER");
+_LIT8(KVCalAttendeeRole8OWNER,"OWNER");
+_LIT8(KVCalAttendeeRole8DELEGATE,"DELEGATE");
+
+_LIT(KVCalAttendeeStatusACCEPTED,"ACCEPTED");
+_LIT(KVCalAttendeeStatusNEEDSACTION,"NEEDS ACTION");
+_LIT(KVCalAttendeeStatusSENT,"SENT");
+_LIT(KVCalAttendeeStatusTENTATIVE,"TENTATIVE");
+_LIT(KVCalAttendeeStatusCONFIRMED,"CONFIRMED");
+_LIT(KVCalAttendeeStatusDECLINED,"DECLINED");
+_LIT(KVCalAttendeeStatusCOMPLETED,"COMPLETED");
+_LIT(KVCalAttendeeStatusDELEGATED,"DELEGATED");
+_LIT(KVCalAttendeeStatusXDASHRECEIVED,"X-RECEIVED"); // Epoc extension for received vCalendars
+_LIT8(KVCalAttendeeStatus8ACCEPTED,"ACCEPTED");
+_LIT8(KVCalAttendeeStatus8NEEDSACTION,"NEEDS ACTION");
+_LIT8(KVCalAttendeeStatus8SENT,"SENT");
+_LIT8(KVCalAttendeeStatus8TENTATIVE,"TENTATIVE");
+_LIT8(KVCalAttendeeStatus8CONFIRMED,"CONFIRMED");
+_LIT8(KVCalAttendeeStatus8DECLINED,"DECLINED");
+_LIT8(KVCalAttendeeStatus8COMPLETED,"COMPLETED");
+_LIT8(KVCalAttendeeStatus8DELEGATED,"DELEGATED");
+_LIT8(KVCalAttendeeStatus8XDASHRECEIVED,"X-RECEIVED"); // Epoc extension for received vCalendars
+
+//	iCal standard requires a hyphen for NEEDS ACTION value
+_LIT(KICalAttendeeCalStatusNEEDSACTION,"NEEDS-ACTION");
+_LIT8(KICalAttendeeCalStatus8NEEDSACTION,"NEEDS-ACTION");
+
+// iCal flags that we want to preserve in serialization
+_LIT(KICalAttendeeCalStatus,"X-STATUS");
+_LIT(KICalAttendeeCalRole,"X-ROLE");
+_LIT(KICalAttendeeCommonName,"X-CN");
+_LIT(KICalAttendeeSentBy,"X-SENTBY");
+_LIT8(KICalAttendeeCalStatus8,"X-STATUS");
+_LIT8(KICalAttendeeCalRole8,"X-ROLE");
+_LIT8(KICalAttendeeCommonName8,"X-CN");
+_LIT8(KICalAttendeeSentBy8,"X-SENTBY");
+
+// CalRole values
+_LIT(KICalAttendeeCalRoleOPTIONAL, "OPT-PARTICIPANT");
+_LIT(KICalAttendeeCalRoleNONPARTICIPANT, "NON-PARTICIPANT");
+_LIT(KICalAttendeeCalRoleREQUIRED, "REQ-PARTICIPANT");
+_LIT(KICalAttendeeCalRoleCHAIR, "CHAIR");
+_LIT8(KICalAttendeeCalRole8OPTIONAL, "OPT-PARTICIPANT");
+_LIT8(KICalAttendeeCalRole8NONPARTICIPANT, "NON-PARTICIPANT");
+_LIT8(KICalAttendeeCalRole8REQUIRED, "REQ-PARTICIPANT");
+_LIT8(KICalAttendeeCalRole8CHAIR, "CHAIR");
+//	the new ones
+_LIT(KICalAttendeeCalStatusINPROCESS, "IN-PROCESS");
+_LIT8(KICalAttendeeCalStatus8INPROCESS, "IN-PROCESS");
+
+_LIT(KVCalAttendeeRsvpYES,"YES");
+_LIT(KVCalAttendeeRsvpNO,"NO");
+_LIT8(KVCalAttendeeRsvp8YES,"YES");
+_LIT8(KVCalAttendeeRsvp8NO,"NO");
+
+_LIT(KVCalAttendeeExpectFYI,"FYI");
+_LIT(KVCalAttendeeExpectREQUIRE,"REQUIRE");
+_LIT(KVCalAttendeeExpectREQUEST,"REQUEST");
+_LIT(KVCalAttendeeExpectIMMEDIATE,"IMMEDIATE");
+_LIT8(KVCalAttendeeExpect8FYI,"FYI");
+_LIT8(KVCalAttendeeExpect8REQUIRE,"REQUIRE");
+_LIT8(KVCalAttendeeExpect8REQUEST,"REQUEST");
+_LIT8(KVCalAttendeeExpect8IMMEDIATE,"IMMEDIATE");
+
+// Categories property definitions
+_LIT(KVCalCategoriesAPPOINTMENT,"APPOINTMENT");
+_LIT(KVCalCategoriesBUSINESS,"BUSINESS");
+_LIT(KVCalCategoriesEDUCATION,"EDUCATION");
+_LIT(KVCalCategoriesHOLIDAY,"HOLIDAY");
+_LIT(KVCalCategoriesMEETING,"MEETING");
+_LIT(KVCalCategoriesMISCELLANEOUS,"MISCELLANEOUS");
+_LIT(KVCalCategoriesPERSONAL,"PERSONAL");
+_LIT(KVCalCategoriesPHONECALL,"PHONECALL");
+_LIT(KVCalCategoriesSICKDAY,"SICKDAY");
+_LIT(KVCalCategoriesSPECIALOCCASION,"SPECIALOCCASION");
+_LIT(KVCalCategoriesTRAVEL,"TRAVEL");
+_LIT(KVCalCategoriesVACATION,"VACATION");
+_LIT(KVCalTokenXDash,"X-"); // same as KVersitTokenXDash but not explicitly narrow
+
+// Status property
+_LIT(KVCalTokenVarCOMPLETED, "COMPLETED");
+_LIT(KVCalTokenVarSTATUS,	 "STATUS");
+_LIT(KVCalStatusACCEPTED, "ACCEPTED");
+_LIT(KVCalStatusSENT,		"SENT");
+_LIT(KVCalStatusNEEDSACTION, "NEEDS ACTION");
+_LIT(KVCalStatusTENTATIVE, "TENTATIVE");
+_LIT(KVCalStatusCONFIRMED, "CONFIRMED");
+_LIT(KVCalStatusDECLINED, "DECLINED");
+_LIT(KVCalStatusCOMPLETED, "COMPLETED");
+_LIT(KVCalStatusDELEGATED, "DELEGATED");
+
+_LIT8(KVCalTokenCOMPLETED, "COMPLETED");
+_LIT8(KVCalTokenSTATUS,	 "STATUS");
+
+// X-Method property values
+_LIT(KVCalTokenMethodStatusENone,  "NONE");
+_LIT(KVCalTokenMethodStatusEPublish, "PUBLISH");
+_LIT(KVCalTokenMethodStatusERequest, "REQUEST");
+_LIT(KVCalTokenMethodStatusEReply, 	 "REPLY");
+_LIT(KVCalTokenMethodStatusEAdd, "ADD");
+_LIT(KVCalTokenMethodStatusECancel, "CANCEL");
+_LIT(KVCalTokenMethodStatusERefresh, "REFRESH");
+_LIT(KVCalTokenMethodStatusECounter, "COUNTER");
+_LIT(KVCalTokenMethodStatusEDeclineCounter, "DECLINECOUNTER");
+
+class CCalContent;
+class CTzRules;
+class CVTzActualisedRules;
+class TCalRRule;
+
+class AgnConvertUtil
+/** 
+@internalComponent
+@released 
+*/
+	{
+public:
+	static HBufC* EncodeL(const TDesC& aText,TUid aConversion);
+	};
+
+// Agenda Entry to VCal conversion
+
+NONSHARABLE_CLASS(CAgendaEntryToVCalConverter) : public CBase
+/** 
+@internalComponent
+@released 
+*/
+	{
+public:
+	void ExportEntryL(CCalEntry* aEntry, CVersitParser& aParser);
+	void SetTzConverter(RTz* aTzConverter) {iTzConverter = aTzConverter;}
+	void AddTimeZonePropertiesL(CVersitParser& aParser, CCalEntry* aEntry);
+	void NextVCalendarL(); // resets iAddedTzProperty
+
+	~CAgendaEntryToVCalConverter();
+
+private:
+	void AddEntryPropertiesL(CCalEntry* aEntry, CVersitParser& aParser);
+	void AddEventPropertiesL(CVersitParser& aParser, CCalEntry* aEntry);
+	void AddTodoPropertiesL(CVersitParser& aParser, CCalEntry* aEntry);
+	
+ 	void AddTzPropertyL(CVersitParser& aParser, TTimeIntervalSeconds aStdOffsetInSeconds);
+ 	void AddDaylightPropertiesL(CVersitParser& aParser, const CTzRules* aRules, TInt aStdOffset, TTime aRepeatStartTime, TTime aRepeatEndTime);
+ 	void AddDaylightPropertyL(CVersitParser& aParser, TTimeIntervalSeconds aOffsetInSeconds,
+ 									 	TTimeWithReference aStartTime, TTimeWithReference aEndTime);
+
+	void AddIntegerPropertyL(CVersitParser& aParser, const TDesC8& aToken, TCalLocalUid aUid);
+	void AddDateTimePropertyL(CVersitParser& aParser, const TDesC8& aToken, const TTime& aTime, const TVersitDateTime::TRelativeTime aRelativeTime, TVersitDateTime::TVersitDateTimeFlags aTimeFlag);
+	void AddDesPropertyL(CVersitParser& aParser, const TDesC8& aToken, const TDesC& aDes);
+
+	void AddAlarmPropertyL(CVersitParser& aParser, const TDesC8& aToken, const TTime& aAlarmTime, const TDesC& aAlarmName);
+	void AddExtendedAlarmPropertyL(CVersitParser& aParser, const TDesC8& aToken, const CCalContent& aAlarmAction);
+
+	void AddAttendeePropertyL(CVersitParser& aParser, CCalUser* aAttendee, TBool isPhoneOwner, TBool isOrganizer);
+	void AddAttendeeParameterL(CArrayPtr<CParserParam>* aArrayOfParams, CCalAttendee* aAttendee);
+
+	void AddRepeatPropertiesL(CVersitParser& aParser, TCalRRule& aRpt, CTzRules* aEntryTzRule);
+	void AddRepeatExceptionPropertiesL(CVersitParser& aParser, RArray<TCalTime>& aExceptions);
+	
+	void AddRDatePropertyL(CVersitParser& aParser, RArray<TCalTime>& aRdates);
+	CStreamDictionary* CreateDictionaryLC(CEmbeddedStore& aEmbeddedStore, TStreamId& aId);
+	void AddCategoryPropertyL(CVersitParser& aParser, const RPointerArray<CCalCategory>& aCategories);
+	void AddAttachmentPropertyL(CVersitParser& aParser, CCalAttachment& aAttachment);
+
+	// Repeat properties
+	CVersitRecurrence* CreateWeeklyRepeatL(TCalRRule& aRpt, TInt aDuration, TVersitDateTime* aEndTime);
+	CVersitRecurrence* CreateMonthlyRepeatL(TCalRRule& aRpt, TInt aDuration, TVersitDateTime* aEndTime);
+	CVersitRecurrence* CreateYearlyRepeatL(TCalRRule& aRpt, TInt aDuration, TVersitDateTime* aEndTime);
+	static void ResetAndDestroyArrayOfParams(TAny* aObject);
+	static void ResetAndDestroyArrayOfVersitDateTime(TAny* aObject);
+
+	// Additional functions for compliance with vCal specs 1.0
+	void AddStatusPropertyL(CVersitParser& aParser, CCalEntry* aEntry);
+	
+private:
+	CParserVCal *iVCal;
+	RTz* iTzConverter;			//RTz* is owned by TAgnVCalConverter
+	TVersitDateTime::TRelativeTime iTimeType;
+	TVersitDateTime::TVersitDateTimeFlags iTimeFlag;
+	TDateTime iStartTime;
+	TBool	iAddedTzProperty;
+	};
+
+
+// VCal to Agenda Entry conversion
+
+NONSHARABLE_CLASS(CVCalToAgendaEntryConverter) : public CBase
+/** 
+@internalComponent
+@released 
+*/
+	{
+public:
+	void ImportVCalL(CVersitParser& aParser, RPointerArray<CCalEntry>& aEntryArray);
+	void SetTzConverter(RTz* aTzConverter);
+	void SetTzRules(CTzRules* aTzRules);
+	~CVCalToAgendaEntryConverter();
+
+	void SetImportVCalendarValues(TBool aImportVCalendar);
+
+	static TBool IsValidTime(const TTime& aTime);
+private:
+	CCalEntry::TType GetEntryTypeL(CVersitParser& aParser);
+	TBool GetStartAndEndDatesL(CVersitParser& aParser, TTime& aStartDate, TTime& aEndDate, TVersitDateTime::TRelativeTime& aRelativeTime);
+
+	TBool ImportEventPropertiesL(CVersitParser& aParser);
+	TBool ImportTodoPropertiesL(CVersitParser& aParser);
+
+	TBool ImportDateTimePropertyL(CVersitParser& aParser, const TDesC8& aToken, TTime& aValue, TVersitDateTime::TRelativeTime& aRelativeTime);
+
+	TBool ImportIntegerPropertyL(CVersitParser& aParser, const TDesC8& aToken, TInt& aValue);
+	HBufC* ImportDesPropertyL(CVersitParser& aParser, const TDesC8& aToken);
+
+	TBool ImportAlarmPropertyL(CVersitParser& aParser, TTime& aEntryTime, TVersitDateTime::TRelativeTime& aRelativeTime);
+
+	TBool ImportExtendedAlarmPropertyL(CCalAlarm* aAlarm, CVersitParser& aParser, const TDesC8& aToken);
+
+	void ImportAttendeePropertiesL(CVersitParser& aParser, const TDesC8& aToken);
+	void ImportCategoriesPropertyL(CVersitParser& aParser, const TDesC8& aToken);
+	void ImportRDatePropertyL(CVersitParser& aParser, const TDesC8& aToken);
+
+	void ImportRepeatRuleL(CVersitParser& aParser, const TDesC8& aToken, const TTime& aStartDate,TVersitDateTime::TRelativeTime aRelativeTime);
+	void ImportRepeatPropertyL(CVersitParser& aParser, const TDesC8& aToken, const TTime& aRepeatTime, TVersitDateTime::TRelativeTime aRelativeTime);
+	
+	void ImportWeeklyRepeatPropertiesL(CVersitRecurrenceWeekly* aRepeat, TCalRRule& aRpt, TDay aDefaultDayOfWeek);
+	void ImportMonthlyByDayRepeatPropertiesL(CVersitRecurrenceMonthlyByDay* aRepeat, TCalRRule& aRpt, TInt aDefaultDayOfMonth);
+	void ImportMonthlyByPosRepeatPropertiesL(CVersitRecurrenceMonthlyByPos* aRepeat, TCalRRule& aRpt, const TTime& aStartDate);
+	void ImportRepeatExceptionPropertiesL(CVersitParser& aParser, const TDesC8& aToken);
+	void ImportAttachmentPropertyL(CVersitParser& aParser);
+	TInt CalculateInstancesPerRepeatL(const TCalRRule& aRRule) const;
+
+	TBool FindCategoryPropertyL(CArrayPtrFlat<CCalCategory>* aCategoryList, CCalCategory::TCalCategoryType aCategoryType);
+	void UpdateCategoriesPropertyL(CVersitParser& aParser);
+	void UpdateAttendeePropertiesL(CVersitParser& aParser);
+	
+	TCalTime::TTimeMode GetTimeModeL(CVersitParser& aParser);
+	
+	// Additional functions for compliance with vCal spec 1.0 and iCalendar spec
+	void ImportStatusPropertyL(CVersitParser& aParser, CCalEntry::TStatus& aStatus);
+	void ImportICalStatusPropertyL(CVersitParser& aParser, CCalEntry::TStatus& aStatus);
+	void ImportVCalStatusPropertyL(CVersitParser& aParser, CCalEntry::TStatus& aStatus);
+private:
+	CCalEntry*	iEntry; //for convenience
+	RTz* iTzConverter; // It is used to convert time between UTC and Symstem local time. RTz* is owned by TAgnVCalConverter
+	TVersitDateTime::TRelativeTime iTimeType;
+	CTzRules* iTzZone; // It is imported from the vcs file used to convert time between UTC and event local time.
+	TBool iVcalTokenTypeReminder;
+	TBool iImportVCalendarValues;
+	};
+
+/** Template class for cleanup that needs ResetAndDestroy to be called 
+@internalComponent
+*/
+template<class T> class CalCleanup
+	{
+public:
+	static void PushResetAndDestroyL(T& aRef);
+	static void PushResetAndDestroyPointerL(T& aRef);
+	static void PushResetL(T& aRef);
+	
+private:
+	static void ResetAndDestroy(TAny* aPtr);
+	static void ResetAndDestroyPointer(TAny* aPtr);
+	static void Reset(TAny* aPtr);
+	};
+
+const TInt KMaxTimeStringSize = 40;
+#endif