00001
00020 #ifndef __ICALCONVERTER_H__
00021 #define __ICALCONVERTER_H__
00022 using namespace std;
00023 extern "C" {
00024 #include <libical/ical.h>
00025 #include <libical/icalcomponent.h>
00026 #include <libical/icalenums.h>
00027 #include "stdlib.h"
00028 #include "stdio.h"
00029 }
00030 #include "Common.h"
00031 #include "CParameters.h"
00032 typedef enum {
00033 ICAL_TYPE = 0,
00034 VCAL_TYPE,
00035 UNKNOWN_TYPE
00036 }FileType;
00041 class ICalConverter {
00042
00043 public:
00054 string localToIcalVcal(CComponent *pEntry,FileType iType,int &pErrorCode);
00055
00061 void setSyncing(bool sync);
00065 void findEffectiveDSToffset(string szLine,string &szDaylight);
00076 CComponent *toLocal(string strIcalComp,FileType iType,int &pErrorCode);
00080 ICalConverter();
00084 ~ICalConverter();
00085
00092 string appendControlM(string szContents);
00093
00099 string toString();
00110 vector < CComponent* > icalVcalToLocal(string strIcalComp,FileType iType,int &pErrorCode);
00118 string strip(string szContents);
00131 bool checkCount(string szContents,string szBegin,string szEnd,unsigned int& iCount);
00140 string validateContents(string szContents);
00148 int getIntFromIcaltimetype(struct icaltimetype ical_time);
00154 char* decodeParameterTextFields(string encodedString,
00155 icalparameter_encoding encodingType);
00156
00157
00158
00159
00160 char* getCurrentTimeZone();
00164 void fillvCalTimeZone(string &szContents);
00165 string exportTimeZone(time_t dtstart,string szZone,FileType iType);
00166 string calculateMonthdayFromRule(time_t dtstart,struct icaltimetype &dtstartStd,string ruleStd,string szZone);
00167 private:
00172 void limitDateRange(struct icaltimetype &s_time);
00173
00177 void replaceWithEncodedString(string &szIcalComp,
00178 CComponentDetails *pEntry);
00182 void convertAttach(string &szAttach);
00190 void findLocationFromOffset(string szDaylight);
00194 void getImpendingAlarm (string szRrule,time_t & triggerTime, time_t dateStart, int alarmFlag);
00201 float stringToFloat(string szValue);
00210 string addAlarmDateToString(string strIcalComp, string strVCalAlarmDate,
00211 entryType iType);
00220 string addRuleToString(string strIcalComp, vector < string > rrules,
00221 int flag);
00231 string getIcalAlarm(CAlarm * cAlarm,string sZone,bool isAllday = false);
00238 void deleteWhiteSpaces(string &szSpaceString );
00249 vector<CRecurrenceRule*> getRecurrence(string strIcalComp, icalcomponent* pComp, icalproperty_kind kind,FileType iFType);
00250
00261 CRecurrenceRule* getRecurrenceRule(string strIcalComp, int index, string strRuleType,FileType iFType);
00262
00273 vector<string> getRecurrenceDates(string strIcalComp, icalcomponent *pComp,
00274 CEvent* pEvent, icalproperty_kind kind,int type=ICAL_TYPE);
00275
00276
00277
00288 template<class T> CAlarm* getAlarm(string strIcalComp, icalcomponent *pComp,
00289 T* pEntry);
00290
00291
00298 struct tm initTime(icaltimetype time_ical);
00299
00308 string get_line(string strIcal, int start_loc);
00309
00317 string get_line_in_ical(string strInVcal, string strType, int index);
00318
00326 string getTranspFromIcal(icalproperty_transp iTransp);
00327
00334 COrganizer* getOrganizerFromIcal(icalproperty *pProp);
00335
00343 CAttendee* getAttendeeFromIcal(icalproperty *pProp,FileType iType);
00344
00352 int getParticipationRoleFromIcal(icalparameter_role icalRole);
00353
00361 int getParticipationStatusFromIcal(icalparameter_partstat icalPartStat);
00362
00370 bool getRSVPFromIcal(icalparameter_rsvp icalRSVP);
00371
00379 int getCUTypeFromIcal(icalparameter_cutype icalCUType);
00380
00388 string getClasFromIcal(icalproperty_class iClass);
00389
00396 icalproperty* getIcalOrganizer(COrganizer* pOrg);
00397
00404 string getContactFromIcal(icalproperty* pProp);
00405
00413 icalparameter_rsvp getIcalRSVP(bool fRSVP);
00414
00422 icalparameter_partstat getIcalPartStatus(ParticipantStatus iPartStat);
00423
00431 icalparameter_role getIcalPartRole(ParticipantRole iRole);
00432
00440 icalparameter_cutype getIcalCalendarUserType(CalendarUserType iCUType);
00441
00448 icalproperty* getIcalAttendee_ical(CAttendee* pAtten);
00449
00450 icalproperty* getIcalAttendee_vcal(CAttendee* pAtten);
00451
00458 CProperties* getXProperty(icalproperty *pProp);
00459
00466 CParameters* getParameters(icalparameter *pParam);
00467
00474 vector <CParameters*> getRelationshipParamFromICal(icalparameter* pParam);
00475
00482 int getStatusFromIcal(icalproperty_status icalStatus);
00483
00490 CParameters* getLanguageFromIcal(icalparameter* pParam);
00491
00498 CParameters* getAlterFromIcal(icalparameter* pParam);
00499
00506 vector < CParameters* > getLangAlterParam(icalproperty* pProp);
00507
00515 int getIcalStatus(statusParam iStatus);
00523 icalparameter_reltype getIcalRelType(RelationshipType iRel);
00530 CParameters* getFMTypeFromIcal(icalparameter* pParam);
00536 icalparameter* getTZIDParam();
00537
00538 string getTimeInHHMM(int offset);
00539
00540
00541 time_t getTimeDiff(time_t diffTime );
00542 void exportEventProperties (icalcomponent *pEntComp, CEvent *pEvent, FileType iType);
00543 void exportTodoProperties (icalcomponent *pEntComp, CTodo *pTodo, FileType iType);
00544 void exportJournalProperties (icalcomponent *pEntComp, CJournal *pJournal, FileType iType);
00545
00546 template<class T> void exportCreatedTimeFromLocal(icalcomponent *pEntComp,
00547 T *pComp, FileType iType);
00548 template<class T> void exportDueFromLocal(icalcomponent *pEntcomp, T *pComp);
00549 template<class T> void exportDateStampFromLocal(icalcomponent *pEntcomp, T *pComp);
00550 template<class T> void exportSummaryFromLocal(icalcomponent *pEntcomp, T *pComp);
00551 template<class T> void exportLocationFromLocal(icalcomponent *pEntcomp, T *pComp);
00552 template<class T> void exportDescriptionFromLocal(icalcomponent *pEntcomp, T *pComp);
00553 template<class T> void exportUidFromLocal(icalcomponent *pEntcomp, T *pComp);
00554 template<class T> void exportDateStartFromLocal(icalcomponent *pEntcomp, T *pComp,FileType iType);
00555 template<class T> void exportAttendeesFromLocal(icalcomponent *pEntcomp, T *pComp, FileType iType);
00556 template<class T> void exportAttachmentsFromLocal(icalcomponent *pEntcomp, T *pComp);
00557 template<class T> void exportPriorityFromLocal(icalcomponent *pEntcomp, T *pComp);
00558 template<class T> void exportSequenceFromLocal(icalcomponent *pEntcomp, T *pComp);
00559 template<class T> void exportCommentsFromLocal(icalcomponent *pEntcomp, T *pComp);
00560 template<class T> void exportUrlFromLocal(icalcomponent *pEntcomp, T *pComp);
00561 template<class T> void exportCategoriesFromLocal(icalcomponent *pEntcomp, T *pComp);
00562 template<class T> void exportGeoFromLocal(icalcomponent *pEntcomp, T *pComp);
00563 template<class T> void exportClassFromLocal(icalcomponent *pEntcomp, T *pComp);
00564 template<class T> void exportRelatedFromLocal(icalcomponent *pEntcomp, T *pComp);
00565 template<class T> void exportOrganizerFromLocal(icalcomponent *pEntcomp, T *pComp);
00566 template<class T> void exportXPropFromLocal(icalcomponent *pEntcomp, T *pComp);
00567 template<class T> void exportResourcesFromLocal(icalcomponent *pEntcomp, T *pComp);
00568 template<class T> void exportContactsFromLocal(icalcomponent *pEntcomp, T *pComp);
00569 template<class T> string exportAlarmFromLocal(T *pComp, FileType iType);
00570 void exportEventDateEndFromLocal(icalcomponent *pEntcomp, CEvent *pEvent,FileType iType);
00571 void exportEventTranspFromLocal(icalcomponent *pEntcomp, CEvent *pEvent, FileType iType);
00572 void exportTodoPercentCompleteFromLocal(icalcomponent *pEntcomp, CTodo *pTodo);
00573 void exportTodoCompletedFromLocal(icalcomponent *pEntcomp, CTodo *pTodo);
00574
00575 void exportEntryStatusFromLocal(icalcomponent *pEntcomp, CComponent *pEntry,
00576 FileType iType);
00577 void exportEntryLastModifiedFromLocal(icalcomponent *pEntcomp, CComponent *pEntry);
00578 template<class T> struct icaltimetype importCreatedTime(icalcomponent *pComp,
00579 T *tComp, FileType iType, string strIcalComp);
00580 template<class T> void importDateStamp(icalcomponent *pComp, T *tComp, struct icaltimetype c_time);
00581 template<class T> void importOrganizer(icalcomponent *pComp, T *tComp);
00582 template<class T> void importAttendees(icalcomponent *pComp, T *tComp, FileType iType);
00583 template<class T> void importSequence(icalcomponent *pComp, T *tComp);
00584 template<class T> void importPriority(icalcomponent *pComp, T *tComp);
00585 template<class T> void importUrl(icalcomponent *pComp, T *tComp);
00586 template<class T> void importGeo(icalcomponent *pComp, T *tComp);
00587 template<class T> void importClass(icalcomponent *pComp, T *tComp);
00588 template<class T> vector <CParameters *> importResources(icalcomponent *pComp, T *tComp);
00589 template<class T> vector <CParameters *> importCategories(icalcomponent *pComp, T *tComp);
00590 template<class T> vector <CParameters *> importContacts(icalcomponent *pComp, T *tComp);
00591 template<class T> vector <CParameters *> importRelated(icalcomponent *pComp, T *tComp);
00592 template<class T> vector <CParameters *> importLocation(icalcomponent *pComp, T *tComp);
00593 template<class T> vector <CParameters *> importDescription(icalcomponent *pComp, T *tComp);
00594 template<class T> vector <CParameters *> importSummary(icalcomponent *pComp, T *tComp);
00595 template<class T> vector <CParameters *> importComments(icalcomponent *pComp, T *tComp);
00596 template<class T> void importDateStart(icalcomponent *pComp, T *pComp);
00597 bool importEventDateStartAndDateEnd(icalcomponent *pComp, CEvent *pEvent,FileType iType,int& pErrorCode);
00598 bool importEventDateEnd(icalcomponent *pComp, CEvent *pEvent,FileType iType);
00599 void importEventXProp(icalcomponent *pComp, CEvent *pEvent);
00600 void importEventTransp(icalcomponent *pComp, CEvent *pEvent, FileType iType, string strIcalComp);
00601 void importEventAttachements(icalcomponent *pComp, CEvent *pEvent);
00602 void importEventAlarm(icalcomponent *pComp, CEvent *pEvent, icalcomponent *pAComp,
00603 string strIcalComp, FileType iType);
00604 void importEventRecurrence(icalcomponent *pComp, CEvent *pEvent, string strIcalComp, FileType iType, int &pErrorCode);
00605
00606 void importTodoDue(icalcomponent *pComp, CTodo *pTodo);
00607 void importTodoPercentCompleted(icalcomponent *pComp, CTodo *pTodo);
00608 void importTodoCompleted(icalcomponent *pComp, CTodo *pTodo);
00609 void importTodoAlarm(icalcomponent *pComp, CTodo *pTodo, icalcomponent *pAComp,
00610 string strIcalComp, FileType iType);
00611 void importJournalAttach(icalcomponent *pComp, CJournal *pJournal);
00612
00613 void importComponentStatus(icalcomponent *pComp, CComponent *pComponent, FileType iType, string strIcalComp);
00614 void importComponentLastModified(icalcomponent *pComp, CComponent *pComponent);
00615
00616 void parseTimeZone(string &szZone);
00617 private:
00618 bool bSyncing;
00619 };
00620 #endif