1 #include "CalendarEvent.h"
5 void CalendarEventObject::SaveObjectData(string *SaveData){
8 string DataLineProcessed = "";
10 *SaveData += "BEGIN:VEVENT\n";
14 if (UniqueID.size() > 0){
16 if (UniqueIDTokens.size() > 0){
19 DataLine += UniqueIDTokens;
31 DataLineProcessed = OutputText(&DataLine);
33 *SaveData += DataLineProcessed;
36 DataLineProcessed.clear();
40 // Process the DTSTAMP.
42 if (DateTimeStampData.size() > 0){
44 if (DateTimeStampTokens.size() > 0){
46 DataLine += "DTSTAMP;";
47 DataLine += DateTimeStampTokens;
51 DataLine += "DTSTAMP";
56 DataLine += DateTimeStampData;
59 DataLineProcessed = OutputText(&DataLine);
61 *SaveData += DataLineProcessed;
64 DataLineProcessed.clear();
68 // Process the DTSTART.
70 if (DateTimeStartData.size() > 0){
72 DataLine += "DTSTART";
74 if (DateTimeStartDataValue.size() > 0){
76 DataLine += ";VALUE=";
77 DataLine += DateTimeStartDataValue;
81 if (DateTimeStartDataTimeZoneID.size() > 0){
84 DataLine += DateTimeStartDataTimeZoneID;
88 if (DateTimeStartDataTokens.size() > 0){
91 DataLine += DateTimeStartDataTokens;
96 DataLine += DateTimeStartData;
99 DataLineProcessed = OutputText(&DataLine);
101 *SaveData += DataLineProcessed;
104 DataLineProcessed.clear();
108 // Process the DTEND.
110 if (DateTimeEndData.size() > 0){
114 if (DateTimeEndDataValue.size() > 0){
116 DataLine += ";VALUE=";
117 DataLine += DateTimeEndDataValue;
121 if (DateTimeEndDataTimeZoneID.size() > 0){
123 DataLine += ";TZID=";
124 DataLine += DateTimeEndDataTimeZoneID;
128 if (DateTimeEndDataTokens.size() > 0){
131 DataLine += DateTimeEndDataTokens;
136 DataLine += DateTimeEndData;
139 DataLineProcessed = OutputText(&DataLine);
141 *SaveData += DataLineProcessed;
144 DataLineProcessed.clear();
148 // Process the SUMMARY.
150 if (SummaryData.size() > 0){
152 DataLine += "SUMMARY";
154 if (SummaryDataAltRep.size() > 0){
156 DataLine += ";ALTREP=\"";
157 DataLine += SummaryDataAltRep;
162 if (SummaryDataLanguage.size() > 0){
164 DataLine += ";LANGUAGE=";
165 DataLine += SummaryDataLanguage;
169 if (SummaryDataTokens.size() > 0){
172 DataLine += SummaryDataTokens;
177 DataLine += SummaryData;
180 DataLineProcessed = OutputText(&DataLine);
182 *SaveData += DataLineProcessed;
185 DataLineProcessed.clear();
189 // Process the CLASS value.
191 if (ClassData.size() > 0){
193 if (ClassDataTokens.size() > 0){
195 DataLine += "CLASS;";
196 DataLine += ClassDataTokens;
205 DataLine += ClassData;
208 DataLineProcessed = OutputText(&DataLine);
210 *SaveData += DataLineProcessed;
213 DataLineProcessed.clear();
217 // Process the CREATED value.
219 if (DateTimeCreatedData.size() > 0){
221 if (DateTimeCreatedTokens.size() > 0){
223 DataLine += "CREATED;";
224 DataLine += DateTimeCreatedTokens;
228 DataLine += "CREATED";
233 DataLine += DateTimeCreatedData;
236 DataLineProcessed = OutputText(&DataLine);
238 *SaveData += DataLineProcessed;
241 DataLineProcessed.clear();
245 // Process the DESCRIPTION values. Write out the
246 // first DESCRPITION only as per RFC5545 specifcation.
248 if (DescriptionList.size() > 0){
250 DataLine += "DESCRIPTION";
252 if (DescriptionListAltRep[0].size() > 0){
254 DataLine += ";ALTREP=\"";
255 DataLine += DescriptionListAltRep[0];
260 if (DescriptionListLanguage[0].size() > 0){
262 DataLine += ";LANGUAGE=";
263 DataLine += DescriptionListLanguage[0];
267 if (DescriptionListTokens[0].size() > 0){
270 DataLine += DescriptionListTokens[0];
275 DataLine += DescriptionList[0];
278 DataLineProcessed = OutputText(&DataLine);
280 *SaveData += DataLineProcessed;
283 DataLineProcessed.clear();
287 // Process the GEO value.
289 if (GeographicData.size() > 0){
291 if (GeographicTokens.size() > 0){
294 DataLine += GeographicTokens;
303 DataLine += GeographicData;
306 DataLineProcessed = OutputText(&DataLine);
308 *SaveData += DataLineProcessed;
311 DataLineProcessed.clear();
315 // Process the LAST-MODIFIED value.
317 if (LastModifiedData.size() > 0){
319 if (LastModifiedTokens.size() > 0){
321 DataLine += "LAST-MODIFIED;";
322 DataLine += LastModifiedTokens;
326 DataLine += "LAST-MODIFIED";
331 DataLine += LastModifiedData;
334 DataLineProcessed = OutputText(&DataLine);
336 *SaveData += DataLineProcessed;
339 DataLineProcessed.clear();
343 // Process the LOCATION value.
345 if (LocationData.size() > 0){
347 DataLine += "LOCATION";
349 if (LocationDataAltRep.size() > 0){
351 DataLine += ";ALTREP=\"";
352 DataLine += LocationDataAltRep;
357 if (LocationDataLanguage.size() > 0){
359 DataLine += ";LANGUAGE=";
360 DataLine += LocationDataLanguage;
364 if (LocationDataTokens.size() > 0){
367 DataLine += LocationDataTokens;
372 DataLine += LocationData;
375 DataLineProcessed = OutputText(&DataLine);
377 *SaveData += DataLineProcessed;
380 DataLineProcessed.clear();
384 // Process the ORGANIZER value.
386 if (OrganiserData.size() > 0){
388 DataLine += "ORGANIZER";
390 if (OrganiserDataCommonName.size() > 0){
393 DataLine += OrganiserDataCommonName;
397 if (OrganiserDataDirectoryEntry.size() > 0){
399 DataLine += ";DIR=\"";
400 DataLine += OrganiserDataDirectoryEntry;
405 if (OrganiserDataSentByParam.size() > 0){
407 DataLine += ";SENT-BY=\"";
408 DataLine += OrganiserDataSentByParam;
413 if (OrganiserDataLanguage.size() > 0){
415 DataLine += ";LANGUAGE=";
416 DataLine += OrganiserDataLanguage;
420 if (OrganiserDataTokens.size() > 0){
423 DataLine += OrganiserDataTokens;
428 DataLine += OrganiserData;
431 DataLineProcessed = OutputText(&DataLine);
433 *SaveData += DataLineProcessed;
436 DataLineProcessed.clear();
440 // Process the PRIORITY value.
442 if (PriorityData > -1 && PriorityData < 10){
444 DataLine += "PRIORITY";
446 if (PriorityTokens.size() > 0){
449 DataLine += PriorityTokens;
454 DataLine += to_string(PriorityData);
457 DataLineProcessed = OutputText(&DataLine);
459 *SaveData += DataLineProcessed;
462 DataLineProcessed.clear();
466 // Process the SEQUENCE value.
468 if (SequenceData > -1 && SequenceData < 10){
470 DataLine += "SEQUENCE";
472 if (SequenceTokens.size() > 0){
475 DataLine += SequenceTokens;
480 DataLine += to_string(SequenceData);
483 DataLineProcessed = OutputText(&DataLine);
485 *SaveData += DataLineProcessed;
488 DataLineProcessed.clear();
492 // Process the STATUS value.
494 if (StatusData.size() > 0){
496 DataLine += "STATUS";
498 if (StatusLanguage.size() > 0){
500 DataLine += ";LANGUAGE=";
501 DataLine += StatusLanguage;
505 if (StatusTokens.size() > 0){
508 DataLine += StatusTokens;
513 DataLine += StatusData;
516 DataLineProcessed = OutputText(&DataLine);
518 *SaveData += DataLineProcessed;
521 DataLineProcessed.clear();
525 // Process the TRANSP value.
527 if (TimeTransparencyData.size() > 0){
529 DataLine += "TRANSP";
531 if (TimeTransparencyDataTokens.size() > 0){
534 DataLine += TimeTransparencyDataTokens;
539 DataLine += TimeTransparencyData;
542 DataLineProcessed = OutputText(&DataLine);
544 *SaveData += DataLineProcessed;
547 DataLineProcessed.clear();
551 // Process the URL value.
553 if (URLData.size() > 0){
557 if (URLDataTokens.size() > 0){
560 DataLine += URLDataTokens;
568 DataLineProcessed = OutputText(&DataLine);
570 *SaveData += DataLineProcessed;
573 DataLineProcessed.clear();
577 // Process the RECURRENCE-ID value.
579 if (RecurranceIDData.size() > 0){
581 DataLine += "RECURRENCE-ID";
583 if (RecurranceIDDataTimeZoneParam.size() > 0){
585 DataLine += ";TZID=";
586 DataLine += RecurranceIDDataTimeZoneParam;
590 if (RecurranceIDDataRangeParam.size() > 0){
592 DataLine += ";RANGE=";
593 DataLine += RecurranceIDDataRangeParam;
597 if (RecurranceIDDataValue.size() > 0){
599 DataLine += ";VALUE=";
600 DataLine += RecurranceIDDataValue;
604 if (RecurranceIDDataTokens.size() > 0){
607 DataLine += RecurranceIDDataTokens;
612 DataLine += RecurranceIDData;
615 DataLineProcessed = OutputText(&DataLine);
617 *SaveData += DataLineProcessed;
620 DataLineProcessed.clear();
624 // Process the RRULE value.
626 if (RecurranceRuleData.size() > 0){
630 if (RecurranceRuleDataTokens.size() > 0){
633 DataLine += RecurranceRuleDataTokens;
638 DataLine += RecurranceRuleData;
641 DataLineProcessed = OutputText(&DataLine);
643 *SaveData += DataLineProcessed;
646 DataLineProcessed.clear();
650 // Process the ATTACH values.
652 if (AttachList.size() > 0){
654 for (int AttachListSeek = 0; AttachListSeek < AttachList.size();
657 DataLine += "ATTACH";
659 if (AttachListFormatType[AttachListSeek].size() > 0){
661 DataLine += ";FMTTYPE=";
662 DataLine += AttachListFormatType[AttachListSeek];
666 if (AttachListValue[AttachListSeek].size() > 0){
668 DataLine += ";VALUE=";
669 DataLine += AttachListValue[AttachListSeek];
673 if (AttachListEncoding[AttachListSeek].size() > 0){
675 DataLine += ";ENCODING=";
676 DataLine += AttachListEncoding[AttachListSeek];
680 if (AttachListTokens[AttachListSeek].size() > 0){
683 DataLine += AttachListTokens[AttachListSeek];
688 DataLine += AttachList[AttachListSeek];
691 DataLineProcessed = OutputText(&DataLine);
693 *SaveData += DataLineProcessed;
696 DataLineProcessed.clear();
702 // Process the ATTENDEE value.
704 if (AttendeeList.size() > 0){
706 for (int AttendeeListSeek = 0; AttendeeListSeek < AttendeeList.size();
709 DataLine += "ATTENDEE";
711 if (AttendeeListMember[AttendeeListSeek].size() > 0){
713 DataLine += ";MEMBER=\"";
714 DataLine += AttendeeListMember[AttendeeListSeek];
719 if (AttendeeListDelegatedFrom[AttendeeListSeek].size() > 0){
721 DataLine += ";DELEGATED-FROM=\"";
722 DataLine += AttendeeListDelegatedFrom[AttendeeListSeek];
727 if (AttendeeListDelegatedTo[AttendeeListSeek].size() > 0){
729 DataLine += ";DELEGATED-TO=\"";
730 DataLine += AttendeeListDelegatedTo[AttendeeListSeek];
735 if (AttendeeListRole[AttendeeListSeek].size() > 0){
737 DataLine += ";ROLE=";
738 DataLine += AttendeeListRole[AttendeeListSeek];
742 if (AttendeeListRSVP[AttendeeListSeek].size() > 0){
744 DataLine += ";RSVP=";
745 DataLine += AttendeeListRSVP[AttendeeListSeek];
749 if (AttendeeListDirectoryEntry[AttendeeListSeek].size() > 0){
751 DataLine += ";DIR=\"";
752 DataLine += AttendeeListDirectoryEntry[AttendeeListSeek];
757 if (AttendeeListSentBy[AttendeeListSeek].size() > 0){
759 DataLine += ";SENT-BY=\"";
760 DataLine += AttendeeListSentBy[AttendeeListSeek];
765 if (AttendeeListCommonName[AttendeeListSeek].size() > 0){
767 DataLine += ";CN=\"";
768 DataLine += AttendeeListCommonName[AttendeeListSeek];
773 if (AttendeeListCalendarUserType[AttendeeListSeek].size() > 0){
775 DataLine += ";CUTYPE=";
776 DataLine += AttendeeListCalendarUserType[AttendeeListSeek];
780 if (AttendeeListParticipationStatus[AttendeeListSeek].size() > 0){
782 DataLine += ";PARTSTAT=";
783 DataLine += AttendeeListParticipationStatus[AttendeeListSeek];
787 if (AttendeeListLanguage[AttendeeListSeek].size() > 0){
789 DataLine += ";LANGUAGE=";
790 DataLine += AttendeeListLanguage[AttendeeListSeek];
794 if (AttendeeListTokens[AttendeeListSeek].size() > 0){
797 DataLine += AttendeeListTokens[AttendeeListSeek];
802 DataLine += AttendeeList[AttendeeListSeek];
805 DataLineProcessed = OutputText(&DataLine);
807 *SaveData += DataLineProcessed;
810 DataLineProcessed.clear();
816 // Process the CATEGORIES value.
818 if (CategoriesList.size() > 0){
820 for (int CategoriesListSeek = 0; CategoriesListSeek < CategoriesList.size();
821 CategoriesListSeek++){
823 DataLine += "CATEGORIES";
825 if (CategoriesListLanguage[CategoriesListSeek].size() > 0){
827 DataLine += ";LANGUAGE=";
828 DataLine += CategoriesListLanguage[CategoriesListSeek];
832 if (CategoriesListTokens[CategoriesListSeek].size() > 0){
835 DataLine += CategoriesListTokens[CategoriesListSeek];
840 DataLine += CategoriesList[CategoriesListSeek];
843 DataLineProcessed = OutputText(&DataLine);
845 *SaveData += DataLineProcessed;
848 DataLineProcessed.clear();
854 // Process the COMMENT value.
856 if (CommentList.size() > 0){
858 for (int CommentListSeek = 0; CommentListSeek < CommentList.size();
861 DataLine += "COMMENT";
863 if (CommentListAltRep[CommentListSeek].size() > 0){
865 DataLine += ";ALTREP=\"";
866 DataLine += CommentListAltRep[CommentListSeek];
871 if (CommentListLanguage[CommentListSeek].size() > 0){
873 DataLine += ";LANGUAGE=";
874 DataLine += CommentListLanguage[CommentListSeek];
878 if (CommentListTokens[CommentListSeek].size() > 0){
881 DataLine += CommentListTokens[CommentListSeek];
886 DataLine += CommentList[CommentListSeek];
889 DataLineProcessed = OutputText(&DataLine);
891 *SaveData += DataLineProcessed;
894 DataLineProcessed.clear();
900 // Process the CONTACT value.
902 if (ContactList.size() > 0){
904 for (int ContactListSeek = 0; ContactListSeek < ContactList.size();
907 DataLine += "CONTACT";
909 if (ContactListAltRep[ContactListSeek].size() > 0){
911 DataLine += ";ALTREP=\"";
912 DataLine += ContactListAltRep[ContactListSeek];
917 if (ContactListLanguage[ContactListSeek].size() > 0){
919 DataLine += ";LANGUAGE=";
920 DataLine += ContactListLanguage[ContactListSeek];
924 if (ContactListTokens[ContactListSeek].size() > 0){
927 DataLine += ContactListTokens[ContactListSeek];
932 DataLine += ContactList[ContactListSeek];
935 DataLineProcessed = OutputText(&DataLine);
937 *SaveData += DataLineProcessed;
940 DataLineProcessed.clear();
946 // Process the EXDATE value.
948 if (ExcludeDateData.size() > 0){
950 for (int ExcludeDateDataSeek = 0; ExcludeDateDataSeek < ExcludeDateData.size();
951 ExcludeDateDataSeek++){
953 DataLine += "EXDATE";
955 if (ExcludeDateDataTimeZoneParam[ExcludeDateDataSeek].size() > 0){
957 DataLine += ";TZID=";
958 DataLine += ExcludeDateDataTimeZoneParam[ExcludeDateDataSeek];
962 if (ExcludeDateDataValue[ExcludeDateDataSeek].size() > 0){
964 DataLine += ";VALUE=";
965 DataLine += ExcludeDateDataValue[ExcludeDateDataSeek];
969 if (ExcludeDateDataTokens[ExcludeDateDataSeek].size() > 0){
972 DataLine += ExcludeDateDataTokens[ExcludeDateDataSeek];
977 DataLine += ExcludeDateData[ExcludeDateDataSeek];
980 DataLineProcessed = OutputText(&DataLine);
982 *SaveData += DataLineProcessed;
985 DataLineProcessed.clear();
991 // Process the REQUEST-STATUS value.
993 if (RequestStatusData.size() > 0){
995 for (int RequestStatusDataSeek = 0; RequestStatusDataSeek < RequestStatusData.size();
996 RequestStatusDataSeek++){
998 DataLine += "REQUEST-STATUS";
1000 if (RequestStatusLanguage[RequestStatusDataSeek].size() > 0){
1002 DataLine += ";LANGUAGE=";
1003 DataLine += RequestStatusLanguage[RequestStatusDataSeek];
1007 if (RequestStatusTokens[RequestStatusDataSeek].size() > 0){
1010 DataLine += RequestStatusTokens[RequestStatusDataSeek];
1015 DataLine += RequestStatusData[RequestStatusDataSeek];
1018 DataLineProcessed = OutputText(&DataLine);
1020 *SaveData += DataLineProcessed;
1023 DataLineProcessed.clear();
1029 // Process the RELATED-TO value.
1031 if (RelatedToData.size() > 0){
1033 for (int RequestToDataSeek = 0; RequestToDataSeek < RelatedToData.size();
1034 RequestToDataSeek++){
1036 DataLine += "RELATED-TO";
1038 if (RelatedToDataRelationType[RequestToDataSeek].size() > 0){
1040 DataLine += ";RELTYPE=";
1041 DataLine += RelatedToDataRelationType[RequestToDataSeek];
1045 if (RelatedToDataTokens[RequestToDataSeek].size() > 0){
1048 DataLine += RelatedToDataTokens[RequestToDataSeek];
1053 DataLine += RelatedToData[RequestToDataSeek];
1056 DataLineProcessed = OutputText(&DataLine);
1058 *SaveData += DataLineProcessed;
1061 DataLineProcessed.clear();
1067 // Process the RESOURCES value.
1069 if (ResourcesData.size() > 0){
1071 for (int ResourcesDataSeek = 0; ResourcesDataSeek < ResourcesData.size();
1072 ResourcesDataSeek++){
1074 DataLine += "RESOURCES";
1076 if (ResourcesDataAltRep[ResourcesDataSeek].size() > 0){
1078 DataLine += ";ALTREP=\"";
1079 DataLine += ResourcesDataAltRep[ResourcesDataSeek];
1084 if (ResourcesDataLanguage[ResourcesDataSeek].size() > 0){
1086 DataLine += ";LANGUAGE=";
1087 DataLine += ResourcesDataLanguage[ResourcesDataSeek];
1091 if (ResourcesDataTokens[ResourcesDataSeek].size() > 0){
1094 DataLine += ResourcesDataTokens[ResourcesDataSeek];
1099 DataLine += ResourcesData[ResourcesDataSeek];
1102 DataLineProcessed = OutputText(&DataLine);
1104 *SaveData += DataLineProcessed;
1107 DataLineProcessed.clear();
1113 // Process the RDATE value.
1115 if (RecurranceDateData.size() > 0){
1117 for (int RecurranceDateDataSeek = 0; RecurranceDateDataSeek < RecurranceDateData.size();
1118 RecurranceDateDataSeek++){
1120 DataLine += "RDATE";
1122 if (RecurranceDateDataValue[RecurranceDateDataSeek].size() > 0){
1124 DataLine += ";VALUE=";
1125 DataLine += RecurranceDateDataValue[RecurranceDateDataSeek];
1129 if (RecurranceDateDataTimeZoneParam[RecurranceDateDataSeek].size() > 0){
1131 DataLine += ";TZID=";
1132 DataLine += RecurranceDateDataTimeZoneParam[RecurranceDateDataSeek];
1136 if (RecurranceDateDataTokens[RecurranceDateDataSeek].size() > 0){
1139 DataLine += RecurranceDateDataTokens[RecurranceDateDataSeek];
1144 DataLine += RecurranceDateData[RecurranceDateDataSeek];
1147 DataLineProcessed = OutputText(&DataLine);
1149 *SaveData += DataLineProcessed;
1152 DataLineProcessed.clear();
1158 // Process the VALARMS.
1160 if (CalendarAlarmData.size() > 0){
1162 for (int CalendarAlarmDataSeek = 0; CalendarAlarmDataSeek < CalendarAlarmData.size();
1163 CalendarAlarmDataSeek++){
1165 *SaveData += "BEGIN:VALARM\n";
1167 // Process the ACTION VALARM value.
1169 DataLine += "ACTION";
1171 if (CalendarAlarmData[CalendarAlarmDataSeek].AlarmActionTokens.size() > 0){
1174 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].AlarmActionTokens;
1179 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].AlarmAction;
1182 DataLineProcessed = OutputText(&DataLine);
1184 *SaveData += DataLineProcessed;
1187 DataLineProcessed.clear();
1189 *SaveData += "END:VALARM\n";
1195 *SaveData += "END:VEVENT\n";