1 // CalendarEvent.cpp - CalendarEventObject class save functions
3 // (c) 2016-2017 Xestia Software Development.
5 // This file is part of Xestia Calendar.
7 // Xestia Calendar is free software: you can redistribute it and/or modify
8 // it under the terms of the GNU General Public License as published by the
9 // Free Software Foundation, version 3 of the license.
11 // Xestia Calendar is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 // GNU General Public License for more details.
16 // You should have received a copy of the GNU General Public License along
17 // with Xestia Calendar. If not, see <http://www.gnu.org/licenses/>
19 #include "CalendarEvent.h"
23 void CalendarEventObject::SaveObjectData(string *SaveData){
26 string DataLineProcessed = "";
28 *SaveData += "BEGIN:VEVENT\n";
32 if (UniqueID.size() > 0){
34 if (UniqueIDTokens.size() > 0){
37 DataLine += UniqueIDTokens;
49 DataLineProcessed = OutputText(&DataLine);
51 *SaveData += DataLineProcessed;
54 DataLineProcessed.clear();
58 // Process the DTSTAMP.
60 if (DateTimeStampData.size() > 0){
62 if (DateTimeStampTokens.size() > 0){
64 DataLine += "DTSTAMP;";
65 DataLine += DateTimeStampTokens;
69 DataLine += "DTSTAMP";
74 DataLine += DateTimeStampData;
77 DataLineProcessed = OutputText(&DataLine);
79 *SaveData += DataLineProcessed;
82 DataLineProcessed.clear();
86 // Process the DTSTART.
88 if (DateTimeStartData.size() > 0){
90 DataLine += "DTSTART";
92 if (DateTimeStartDataValue.size() > 0){
94 DataLine += ";VALUE=";
95 DataLine += DateTimeStartDataValue;
99 if (DateTimeStartDataTimeZoneID.size() > 0){
101 DataLine += ";TZID=";
102 DataLine += DateTimeStartDataTimeZoneID;
106 if (DateTimeStartDataTokens.size() > 0){
109 DataLine += DateTimeStartDataTokens;
114 DataLine += DateTimeStartData;
117 DataLineProcessed = OutputText(&DataLine);
119 *SaveData += DataLineProcessed;
122 DataLineProcessed.clear();
126 // Process the DTEND.
128 if (DateTimeEndData.size() > 0){
132 if (DateTimeEndDataValue.size() > 0){
134 DataLine += ";VALUE=";
135 DataLine += DateTimeEndDataValue;
139 if (DateTimeEndDataTimeZoneID.size() > 0){
141 DataLine += ";TZID=";
142 DataLine += DateTimeEndDataTimeZoneID;
146 if (DateTimeEndDataTokens.size() > 0){
149 DataLine += DateTimeEndDataTokens;
154 DataLine += DateTimeEndData;
157 DataLineProcessed = OutputText(&DataLine);
159 *SaveData += DataLineProcessed;
162 DataLineProcessed.clear();
166 // Process the SUMMARY.
168 if (SummaryData.size() > 0){
170 DataLine += "SUMMARY";
172 if (SummaryDataAltRep.size() > 0){
174 DataLine += ";ALTREP=\"";
175 DataLine += SummaryDataAltRep;
180 if (SummaryDataLanguage.size() > 0){
182 DataLine += ";LANGUAGE=";
183 DataLine += SummaryDataLanguage;
187 if (SummaryDataTokens.size() > 0){
190 DataLine += SummaryDataTokens;
195 DataLine += SummaryData;
198 DataLineProcessed = OutputText(&DataLine);
200 *SaveData += DataLineProcessed;
203 DataLineProcessed.clear();
207 // Process the CLASS value.
209 if (ClassData.size() > 0){
211 if (ClassDataTokens.size() > 0){
213 DataLine += "CLASS;";
214 DataLine += ClassDataTokens;
223 DataLine += ClassData;
226 DataLineProcessed = OutputText(&DataLine);
228 *SaveData += DataLineProcessed;
231 DataLineProcessed.clear();
235 // Process the CREATED value.
237 if (DateTimeCreatedData.size() > 0){
239 if (DateTimeCreatedTokens.size() > 0){
241 DataLine += "CREATED;";
242 DataLine += DateTimeCreatedTokens;
246 DataLine += "CREATED";
251 DataLine += DateTimeCreatedData;
254 DataLineProcessed = OutputText(&DataLine);
256 *SaveData += DataLineProcessed;
259 DataLineProcessed.clear();
263 // Process the DESCRIPTION values. Write out the
264 // first DESCRPITION only as per RFC5545 specifcation.
266 if (DescriptionList.size() > 0){
268 DataLine += "DESCRIPTION";
270 if (DescriptionListAltRep[0].size() > 0){
272 DataLine += ";ALTREP=\"";
273 DataLine += DescriptionListAltRep[0];
278 if (DescriptionListLanguage[0].size() > 0){
280 DataLine += ";LANGUAGE=";
281 DataLine += DescriptionListLanguage[0];
285 if (DescriptionListTokens[0].size() > 0){
288 DataLine += DescriptionListTokens[0];
293 DataLine += DescriptionList[0];
296 DataLineProcessed = OutputText(&DataLine);
298 *SaveData += DataLineProcessed;
301 DataLineProcessed.clear();
305 // Process the GEO value.
307 if (GeographicData.size() > 0){
309 if (GeographicTokens.size() > 0){
312 DataLine += GeographicTokens;
321 DataLine += GeographicData;
324 DataLineProcessed = OutputText(&DataLine);
326 *SaveData += DataLineProcessed;
329 DataLineProcessed.clear();
333 // Process the LAST-MODIFIED value.
335 if (LastModifiedData.size() > 0){
337 if (LastModifiedTokens.size() > 0){
339 DataLine += "LAST-MODIFIED;";
340 DataLine += LastModifiedTokens;
344 DataLine += "LAST-MODIFIED";
349 DataLine += LastModifiedData;
352 DataLineProcessed = OutputText(&DataLine);
354 *SaveData += DataLineProcessed;
357 DataLineProcessed.clear();
361 // Process the LOCATION value.
363 if (LocationData.size() > 0){
365 DataLine += "LOCATION";
367 if (LocationDataAltRep.size() > 0){
369 DataLine += ";ALTREP=\"";
370 DataLine += LocationDataAltRep;
375 if (LocationDataLanguage.size() > 0){
377 DataLine += ";LANGUAGE=";
378 DataLine += LocationDataLanguage;
382 if (LocationDataTokens.size() > 0){
385 DataLine += LocationDataTokens;
390 DataLine += LocationData;
393 DataLineProcessed = OutputText(&DataLine);
395 *SaveData += DataLineProcessed;
398 DataLineProcessed.clear();
402 // Process the ORGANIZER value.
404 if (OrganiserData.size() > 0){
406 DataLine += "ORGANIZER";
408 if (OrganiserDataCommonName.size() > 0){
411 DataLine += OrganiserDataCommonName;
415 if (OrganiserDataDirectoryEntry.size() > 0){
417 DataLine += ";DIR=\"";
418 DataLine += OrganiserDataDirectoryEntry;
423 if (OrganiserDataSentByParam.size() > 0){
425 DataLine += ";SENT-BY=\"";
426 DataLine += OrganiserDataSentByParam;
431 if (OrganiserDataLanguage.size() > 0){
433 DataLine += ";LANGUAGE=";
434 DataLine += OrganiserDataLanguage;
438 if (OrganiserDataTokens.size() > 0){
441 DataLine += OrganiserDataTokens;
446 DataLine += OrganiserData;
449 DataLineProcessed = OutputText(&DataLine);
451 *SaveData += DataLineProcessed;
454 DataLineProcessed.clear();
458 // Process the PRIORITY value.
460 if (PriorityData > -1 && PriorityData < 10){
462 DataLine += "PRIORITY";
464 if (PriorityTokens.size() > 0){
467 DataLine += PriorityTokens;
472 DataLine += to_string(PriorityData);
475 DataLineProcessed = OutputText(&DataLine);
477 *SaveData += DataLineProcessed;
480 DataLineProcessed.clear();
484 // Process the SEQUENCE value.
486 if (SequenceData > -1 && SequenceData < 10){
488 DataLine += "SEQUENCE";
490 if (SequenceTokens.size() > 0){
493 DataLine += SequenceTokens;
498 DataLine += to_string(SequenceData);
501 DataLineProcessed = OutputText(&DataLine);
503 *SaveData += DataLineProcessed;
506 DataLineProcessed.clear();
510 // Process the STATUS value.
512 if (StatusData.size() > 0){
514 DataLine += "STATUS";
516 if (StatusLanguage.size() > 0){
518 DataLine += ";LANGUAGE=";
519 DataLine += StatusLanguage;
523 if (StatusTokens.size() > 0){
526 DataLine += StatusTokens;
531 DataLine += StatusData;
534 DataLineProcessed = OutputText(&DataLine);
536 *SaveData += DataLineProcessed;
539 DataLineProcessed.clear();
543 // Process the TRANSP value.
545 if (TimeTransparencyData.size() > 0){
547 DataLine += "TRANSP";
549 if (TimeTransparencyDataTokens.size() > 0){
552 DataLine += TimeTransparencyDataTokens;
557 DataLine += TimeTransparencyData;
560 DataLineProcessed = OutputText(&DataLine);
562 *SaveData += DataLineProcessed;
565 DataLineProcessed.clear();
569 // Process the URL value.
571 if (URLData.size() > 0){
575 if (URLDataTokens.size() > 0){
578 DataLine += URLDataTokens;
586 DataLineProcessed = OutputText(&DataLine);
588 *SaveData += DataLineProcessed;
591 DataLineProcessed.clear();
595 // Process the RECURRENCE-ID value.
597 if (RecurranceIDData.size() > 0){
599 DataLine += "RECURRENCE-ID";
601 if (RecurranceIDDataTimeZoneParam.size() > 0){
603 DataLine += ";TZID=";
604 DataLine += RecurranceIDDataTimeZoneParam;
608 if (RecurranceIDDataRangeParam.size() > 0){
610 DataLine += ";RANGE=";
611 DataLine += RecurranceIDDataRangeParam;
615 if (RecurranceIDDataValue.size() > 0){
617 DataLine += ";VALUE=";
618 DataLine += RecurranceIDDataValue;
622 if (RecurranceIDDataTokens.size() > 0){
625 DataLine += RecurranceIDDataTokens;
630 DataLine += RecurranceIDData;
633 DataLineProcessed = OutputText(&DataLine);
635 *SaveData += DataLineProcessed;
638 DataLineProcessed.clear();
642 // Process the DURATION value.
644 if (DurationData.size() > 0){
646 DataLine += "DURATION";
648 if (DurationDataTokens.size() > 0){
651 DataLine += DurationDataTokens;
656 DataLine += DurationData;
659 DataLineProcessed = OutputText(&DataLine);
661 *SaveData += DataLineProcessed;
664 DataLineProcessed.clear();
668 // Process the RRULE value.
670 if (RecurranceRuleData.size() > 0){
674 if (RecurranceRuleDataTokens.size() > 0){
677 DataLine += RecurranceRuleDataTokens;
682 DataLine += RecurranceRuleData;
685 DataLineProcessed = OutputText(&DataLine);
687 *SaveData += DataLineProcessed;
690 DataLineProcessed.clear();
694 // Process the ATTACH values.
696 if (AttachList.size() > 0){
698 for (int AttachListSeek = 0; AttachListSeek < AttachList.size();
701 DataLine += "ATTACH";
703 if (AttachListFormatType[AttachListSeek].size() > 0){
705 DataLine += ";FMTTYPE=";
706 DataLine += AttachListFormatType[AttachListSeek];
710 if (AttachListValue[AttachListSeek].size() > 0){
712 DataLine += ";VALUE=";
713 DataLine += AttachListValue[AttachListSeek];
717 if (AttachListEncoding[AttachListSeek].size() > 0){
719 DataLine += ";ENCODING=";
720 DataLine += AttachListEncoding[AttachListSeek];
724 if (AttachListTokens[AttachListSeek].size() > 0){
727 DataLine += AttachListTokens[AttachListSeek];
732 DataLine += AttachList[AttachListSeek];
735 DataLineProcessed = OutputText(&DataLine);
737 *SaveData += DataLineProcessed;
740 DataLineProcessed.clear();
746 // Process the ATTENDEE value.
748 if (AttendeeList.size() > 0){
750 for (int AttendeeListSeek = 0; AttendeeListSeek < AttendeeList.size();
753 DataLine += "ATTENDEE";
755 if (AttendeeListMember[AttendeeListSeek].size() > 0){
757 DataLine += ";MEMBER=\"";
758 DataLine += AttendeeListMember[AttendeeListSeek];
763 if (AttendeeListDelegatedFrom[AttendeeListSeek].size() > 0){
765 DataLine += ";DELEGATED-FROM=\"";
766 DataLine += AttendeeListDelegatedFrom[AttendeeListSeek];
771 if (AttendeeListDelegatedTo[AttendeeListSeek].size() > 0){
773 DataLine += ";DELEGATED-TO=\"";
774 DataLine += AttendeeListDelegatedTo[AttendeeListSeek];
779 if (AttendeeListRole[AttendeeListSeek].size() > 0){
781 DataLine += ";ROLE=";
782 DataLine += AttendeeListRole[AttendeeListSeek];
786 if (AttendeeListRSVP[AttendeeListSeek].size() > 0){
788 DataLine += ";RSVP=";
789 DataLine += AttendeeListRSVP[AttendeeListSeek];
793 if (AttendeeListDirectoryEntry[AttendeeListSeek].size() > 0){
795 DataLine += ";DIR=\"";
796 DataLine += AttendeeListDirectoryEntry[AttendeeListSeek];
801 if (AttendeeListSentBy[AttendeeListSeek].size() > 0){
803 DataLine += ";SENT-BY=\"";
804 DataLine += AttendeeListSentBy[AttendeeListSeek];
809 if (AttendeeListCommonName[AttendeeListSeek].size() > 0){
811 DataLine += ";CN=\"";
812 DataLine += AttendeeListCommonName[AttendeeListSeek];
817 if (AttendeeListCalendarUserType[AttendeeListSeek].size() > 0){
819 DataLine += ";CUTYPE=";
820 DataLine += AttendeeListCalendarUserType[AttendeeListSeek];
824 if (AttendeeListParticipationStatus[AttendeeListSeek].size() > 0){
826 DataLine += ";PARTSTAT=";
827 DataLine += AttendeeListParticipationStatus[AttendeeListSeek];
831 if (AttendeeListLanguage[AttendeeListSeek].size() > 0){
833 DataLine += ";LANGUAGE=";
834 DataLine += AttendeeListLanguage[AttendeeListSeek];
838 if (AttendeeListTokens[AttendeeListSeek].size() > 0){
841 DataLine += AttendeeListTokens[AttendeeListSeek];
846 DataLine += AttendeeList[AttendeeListSeek];
849 DataLineProcessed = OutputText(&DataLine);
851 *SaveData += DataLineProcessed;
854 DataLineProcessed.clear();
860 // Process the CATEGORIES value.
862 if (CategoriesList.size() > 0){
864 for (int CategoriesListSeek = 0; CategoriesListSeek < CategoriesList.size();
865 CategoriesListSeek++){
867 DataLine += "CATEGORIES";
869 if (CategoriesListLanguage[CategoriesListSeek].size() > 0){
871 DataLine += ";LANGUAGE=";
872 DataLine += CategoriesListLanguage[CategoriesListSeek];
876 if (CategoriesListTokens[CategoriesListSeek].size() > 0){
879 DataLine += CategoriesListTokens[CategoriesListSeek];
884 DataLine += CategoriesList[CategoriesListSeek];
887 DataLineProcessed = OutputText(&DataLine);
889 *SaveData += DataLineProcessed;
892 DataLineProcessed.clear();
898 // Process the COMMENT value.
900 if (CommentList.size() > 0){
902 for (int CommentListSeek = 0; CommentListSeek < CommentList.size();
905 DataLine += "COMMENT";
907 if (CommentListAltRep[CommentListSeek].size() > 0){
909 DataLine += ";ALTREP=\"";
910 DataLine += CommentListAltRep[CommentListSeek];
915 if (CommentListLanguage[CommentListSeek].size() > 0){
917 DataLine += ";LANGUAGE=";
918 DataLine += CommentListLanguage[CommentListSeek];
922 if (CommentListTokens[CommentListSeek].size() > 0){
925 DataLine += CommentListTokens[CommentListSeek];
930 DataLine += CommentList[CommentListSeek];
933 DataLineProcessed = OutputText(&DataLine);
935 *SaveData += DataLineProcessed;
938 DataLineProcessed.clear();
944 // Process the CONTACT value.
946 if (ContactList.size() > 0){
948 for (int ContactListSeek = 0; ContactListSeek < ContactList.size();
951 DataLine += "CONTACT";
953 if (ContactListAltRep[ContactListSeek].size() > 0){
955 DataLine += ";ALTREP=\"";
956 DataLine += ContactListAltRep[ContactListSeek];
961 if (ContactListLanguage[ContactListSeek].size() > 0){
963 DataLine += ";LANGUAGE=";
964 DataLine += ContactListLanguage[ContactListSeek];
968 if (ContactListTokens[ContactListSeek].size() > 0){
971 DataLine += ContactListTokens[ContactListSeek];
976 DataLine += ContactList[ContactListSeek];
979 DataLineProcessed = OutputText(&DataLine);
981 *SaveData += DataLineProcessed;
984 DataLineProcessed.clear();
990 // Process the EXDATE value.
992 if (ExcludeDateData.size() > 0){
994 for (int ExcludeDateDataSeek = 0; ExcludeDateDataSeek < ExcludeDateData.size();
995 ExcludeDateDataSeek++){
997 DataLine += "EXDATE";
999 if (ExcludeDateDataTimeZoneParam[ExcludeDateDataSeek].size() > 0){
1001 DataLine += ";TZID=";
1002 DataLine += ExcludeDateDataTimeZoneParam[ExcludeDateDataSeek];
1006 if (ExcludeDateDataValue[ExcludeDateDataSeek].size() > 0){
1008 DataLine += ";VALUE=";
1009 DataLine += ExcludeDateDataValue[ExcludeDateDataSeek];
1013 if (ExcludeDateDataTokens[ExcludeDateDataSeek].size() > 0){
1016 DataLine += ExcludeDateDataTokens[ExcludeDateDataSeek];
1021 DataLine += ExcludeDateData[ExcludeDateDataSeek];
1024 DataLineProcessed = OutputText(&DataLine);
1026 *SaveData += DataLineProcessed;
1029 DataLineProcessed.clear();
1035 // Process the REQUEST-STATUS value.
1037 if (RequestStatusData.size() > 0){
1039 for (int RequestStatusDataSeek = 0; RequestStatusDataSeek < RequestStatusData.size();
1040 RequestStatusDataSeek++){
1042 DataLine += "REQUEST-STATUS";
1044 if (RequestStatusLanguage[RequestStatusDataSeek].size() > 0){
1046 DataLine += ";LANGUAGE=";
1047 DataLine += RequestStatusLanguage[RequestStatusDataSeek];
1051 if (RequestStatusTokens[RequestStatusDataSeek].size() > 0){
1054 DataLine += RequestStatusTokens[RequestStatusDataSeek];
1059 DataLine += RequestStatusData[RequestStatusDataSeek];
1062 DataLineProcessed = OutputText(&DataLine);
1064 *SaveData += DataLineProcessed;
1067 DataLineProcessed.clear();
1073 // Process the RELATED-TO value.
1075 if (RelatedToData.size() > 0){
1077 for (int RequestToDataSeek = 0; RequestToDataSeek < RelatedToData.size();
1078 RequestToDataSeek++){
1080 DataLine += "RELATED-TO";
1082 if (RelatedToDataRelationType[RequestToDataSeek].size() > 0){
1084 DataLine += ";RELTYPE=";
1085 DataLine += RelatedToDataRelationType[RequestToDataSeek];
1089 if (RelatedToDataTokens[RequestToDataSeek].size() > 0){
1092 DataLine += RelatedToDataTokens[RequestToDataSeek];
1097 DataLine += RelatedToData[RequestToDataSeek];
1100 DataLineProcessed = OutputText(&DataLine);
1102 *SaveData += DataLineProcessed;
1105 DataLineProcessed.clear();
1111 // Process the RESOURCES value.
1113 if (ResourcesData.size() > 0){
1115 for (int ResourcesDataSeek = 0; ResourcesDataSeek < ResourcesData.size();
1116 ResourcesDataSeek++){
1118 DataLine += "RESOURCES";
1120 if (ResourcesDataAltRep[ResourcesDataSeek].size() > 0){
1122 DataLine += ";ALTREP=\"";
1123 DataLine += ResourcesDataAltRep[ResourcesDataSeek];
1128 if (ResourcesDataLanguage[ResourcesDataSeek].size() > 0){
1130 DataLine += ";LANGUAGE=";
1131 DataLine += ResourcesDataLanguage[ResourcesDataSeek];
1135 if (ResourcesDataTokens[ResourcesDataSeek].size() > 0){
1138 DataLine += ResourcesDataTokens[ResourcesDataSeek];
1143 DataLine += ResourcesData[ResourcesDataSeek];
1146 DataLineProcessed = OutputText(&DataLine);
1148 *SaveData += DataLineProcessed;
1151 DataLineProcessed.clear();
1157 // Process the RDATE value.
1159 if (RecurranceDateData.size() > 0){
1161 for (int RecurranceDateDataSeek = 0; RecurranceDateDataSeek < RecurranceDateData.size();
1162 RecurranceDateDataSeek++){
1164 DataLine += "RDATE";
1166 if (RecurranceDateDataValue[RecurranceDateDataSeek].size() > 0){
1168 DataLine += ";VALUE=";
1169 DataLine += RecurranceDateDataValue[RecurranceDateDataSeek];
1173 if (RecurranceDateDataTimeZoneParam[RecurranceDateDataSeek].size() > 0){
1175 DataLine += ";TZID=";
1176 DataLine += RecurranceDateDataTimeZoneParam[RecurranceDateDataSeek];
1180 if (RecurranceDateDataTokens[RecurranceDateDataSeek].size() > 0){
1183 DataLine += RecurranceDateDataTokens[RecurranceDateDataSeek];
1188 DataLine += RecurranceDateData[RecurranceDateDataSeek];
1191 DataLineProcessed = OutputText(&DataLine);
1193 *SaveData += DataLineProcessed;
1196 DataLineProcessed.clear();
1202 // Process the VALARMS.
1204 if (CalendarAlarmData.size() > 0){
1206 for (int CalendarAlarmDataSeek = 0; CalendarAlarmDataSeek < CalendarAlarmData.size();
1207 CalendarAlarmDataSeek++){
1209 *SaveData += "BEGIN:VALARM\n";
1211 // Process the ACTION VALARM value.
1213 DataLine += "ACTION";
1215 if (CalendarAlarmData[CalendarAlarmDataSeek].AlarmActionTokens.size() > 0){
1218 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].AlarmActionTokens;
1223 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].AlarmAction;
1226 DataLineProcessed = OutputText(&DataLine);
1228 *SaveData += DataLineProcessed;
1231 DataLineProcessed.clear();
1233 // Process the TRIGGER VALARM value.
1235 if (CalendarAlarmData[CalendarAlarmDataSeek].TriggerData.size() > 0){
1237 DataLine += "TRIGGER";
1239 if (CalendarAlarmData[CalendarAlarmDataSeek].TriggerRelated.size() > 0){
1241 DataLine += ";RELATED=";
1242 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].TriggerRelated;
1246 if (CalendarAlarmData[CalendarAlarmDataSeek].TriggerValue.size() > 0){
1248 DataLine += ";VALUE=";
1249 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].TriggerValue;
1253 if (CalendarAlarmData[CalendarAlarmDataSeek].TriggerTokens.size() > 0){
1256 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].TriggerTokens;
1261 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].TriggerData;
1264 DataLineProcessed = OutputText(&DataLine);
1266 *SaveData += DataLineProcessed;
1269 DataLineProcessed.clear();
1273 // Process the DURATION VALARM value.
1275 if (CalendarAlarmData[CalendarAlarmDataSeek].DurationData.size() > 0){
1277 DataLine += "DURATION";
1279 if (CalendarAlarmData[CalendarAlarmDataSeek].DurationTokens.size() > 0){
1282 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].DurationTokens;
1287 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].DurationData;
1290 DataLineProcessed = OutputText(&DataLine);
1292 *SaveData += DataLineProcessed;
1295 DataLineProcessed.clear();
1299 // Process the DESCRIPTION VALARM value.
1301 if (CalendarAlarmData[CalendarAlarmDataSeek].DescriptionData.size() > 0){
1303 DataLine += "DESCRIPTION";
1305 if (CalendarAlarmData[CalendarAlarmDataSeek].DescriptionAltRep.size() > 0){
1307 DataLine += ";ALTREP=\"";
1308 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].DescriptionAltRep;
1313 if (CalendarAlarmData[CalendarAlarmDataSeek].DescriptionLanguage.size() > 0){
1315 DataLine += ";LANGUAGE=";
1316 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].DescriptionLanguage;
1320 if (CalendarAlarmData[CalendarAlarmDataSeek].DescriptionTokens.size() > 0){
1323 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].DescriptionTokens;
1328 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].DescriptionData;
1331 DataLineProcessed = OutputText(&DataLine);
1333 *SaveData += DataLineProcessed;
1336 DataLineProcessed.clear();
1340 // Process the SUMMARY VALARM value.
1342 if (CalendarAlarmData[CalendarAlarmDataSeek].SummaryData.size() > 0){
1344 DataLine += "SUMMARY";
1346 if (CalendarAlarmData[CalendarAlarmDataSeek].SummaryAltRep.size() > 0){
1348 DataLine += ";ALTREP=\"";
1349 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].SummaryAltRep;
1354 if (CalendarAlarmData[CalendarAlarmDataSeek].SummaryLanguage.size() > 0){
1356 DataLine += ";LANGUAGE=";
1357 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].SummaryLanguage;
1361 if (CalendarAlarmData[CalendarAlarmDataSeek].SummaryTokens.size() > 0){
1364 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].SummaryTokens;
1369 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].SummaryData;
1372 DataLineProcessed = OutputText(&DataLine);
1374 *SaveData += DataLineProcessed;
1377 DataLineProcessed.clear();
1381 // Process the REPEAT VALARM value.
1383 if (CalendarAlarmData[CalendarAlarmDataSeek].RepeatData.size() > 0){
1385 DataLine += "REPEAT";
1387 if (CalendarAlarmData[CalendarAlarmDataSeek].RepeatTokens.size() > 0){
1390 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].RepeatTokens;
1395 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].RepeatData;
1398 DataLineProcessed = OutputText(&DataLine);
1400 *SaveData += DataLineProcessed;
1403 DataLineProcessed.clear();
1407 // Process the ATTENDEE VALARM values.
1409 if (CalendarAlarmData[CalendarAlarmDataSeek].AttendeeList.size() > 0){
1411 for (int AttendeeListSeek = 0; AttendeeListSeek < CalendarAlarmData[CalendarAlarmDataSeek].AttendeeList.size();
1412 AttendeeListSeek++){
1414 DataLine += "ATTENDEE";
1416 if (CalendarAlarmData[CalendarAlarmDataSeek].AttendeeListMember[AttendeeListSeek].size() > 0){
1418 DataLine += ";MEMBER=\"";
1419 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].AttendeeListMember[AttendeeListSeek];
1424 if (CalendarAlarmData[CalendarAlarmDataSeek].AttendeeListDelegatedFrom[AttendeeListSeek].size() > 0){
1426 DataLine += ";DELEGATED-FROM=\"";
1427 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].AttendeeListDelegatedFrom[AttendeeListSeek];
1432 if (CalendarAlarmData[CalendarAlarmDataSeek].AttendeeListDelegatedTo[AttendeeListSeek].size() > 0){
1434 DataLine += ";DELEGATED-TO=\"";
1435 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].AttendeeListDelegatedTo[AttendeeListSeek];
1440 if (CalendarAlarmData[CalendarAlarmDataSeek].AttendeeListRole[AttendeeListSeek].size() > 0){
1442 DataLine += ";ROLE=";
1443 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].AttendeeListRole[AttendeeListSeek];
1447 if (CalendarAlarmData[CalendarAlarmDataSeek].AttendeeListRSVP[AttendeeListSeek].size() > 0){
1449 DataLine += ";RSVP=";
1450 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].AttendeeListRSVP[AttendeeListSeek];
1454 if (CalendarAlarmData[CalendarAlarmDataSeek].AttendeeListDirectoryEntry[AttendeeListSeek].size() > 0){
1456 DataLine += ";DIR=\"";
1457 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].AttendeeListDirectoryEntry[AttendeeListSeek];
1462 if (CalendarAlarmData[CalendarAlarmDataSeek].AttendeeListSentBy[AttendeeListSeek].size() > 0){
1464 DataLine += ";SENT-BY=\"";
1465 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].AttendeeListSentBy[AttendeeListSeek];
1470 if (CalendarAlarmData[CalendarAlarmDataSeek].AttendeeListCommonName[AttendeeListSeek].size() > 0){
1472 DataLine += ";CN=\"";
1473 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].AttendeeListCommonName[AttendeeListSeek];
1478 if (CalendarAlarmData[CalendarAlarmDataSeek].AttendeeListCalendarUserType[AttendeeListSeek].size() > 0){
1480 DataLine += ";CUTYPE=";
1481 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].AttendeeListCalendarUserType[AttendeeListSeek];
1485 if (CalendarAlarmData[CalendarAlarmDataSeek].AttendeeListParticipationStatus[AttendeeListSeek].size() > 0){
1487 DataLine += ";PARTSTAT=";
1488 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].AttendeeListParticipationStatus[AttendeeListSeek];
1492 if (CalendarAlarmData[CalendarAlarmDataSeek].AttendeeListLanguage[AttendeeListSeek].size() > 0){
1494 DataLine += ";LANGUAGE=";
1495 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].AttendeeListLanguage[AttendeeListSeek];
1499 if (CalendarAlarmData[CalendarAlarmDataSeek].AttendeeListTokens[AttendeeListSeek].size() > 0){
1502 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].AttendeeListTokens[AttendeeListSeek];
1507 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].AttendeeList[AttendeeListSeek];
1510 DataLineProcessed = OutputText(&DataLine);
1512 *SaveData += DataLineProcessed;
1515 DataLineProcessed.clear();
1521 // Process the ATTACH VALARM values.
1523 if (CalendarAlarmData[CalendarAlarmDataSeek].AttachList.size() > 0){
1525 for (int AttachListSeek = 0; AttachListSeek < CalendarAlarmData[CalendarAlarmDataSeek].AttachList.size();
1528 DataLine += "ATTACH";
1530 if (CalendarAlarmData[CalendarAlarmDataSeek].AttachListFormatType[AttachListSeek].size() > 0){
1532 DataLine += ";FMTTYPE=";
1533 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].AttachListFormatType[AttachListSeek];
1537 if (CalendarAlarmData[CalendarAlarmDataSeek].AttachListValue[AttachListSeek].size() > 0){
1539 DataLine += ";VALUE=";
1540 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].AttachListValue[AttachListSeek];
1544 if (CalendarAlarmData[CalendarAlarmDataSeek].AttachListEncoding[AttachListSeek].size() > 0){
1546 DataLine += ";ENCODING=";
1547 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].AttachListEncoding[AttachListSeek];
1551 if (CalendarAlarmData[CalendarAlarmDataSeek].AttachListTokens[AttachListSeek].size() > 0){
1554 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].AttachListTokens[AttachListSeek];
1559 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].AttachList[AttachListSeek];
1562 DataLineProcessed = OutputText(&DataLine);
1564 *SaveData += DataLineProcessed;
1567 DataLineProcessed.clear();
1573 // Process the X-Token VALARM values.
1575 if (CalendarAlarmData[CalendarAlarmDataSeek].XTokensData.size() > 0){
1577 for (int XTokenSeek = 0; XTokenSeek < CalendarAlarmData[CalendarAlarmDataSeek].XTokensData.size();
1580 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].XTokensDataTokens[XTokenSeek];
1582 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].XTokensData[XTokenSeek];
1585 DataLineProcessed = OutputText(&DataLine);
1587 *SaveData += DataLineProcessed;
1590 DataLineProcessed.clear();
1596 *SaveData += "END:VALARM\n";
1602 // Process the X-Token values.
1604 if (XTokensData.size() > 0){
1606 for (int XTokenSeek = 0; XTokenSeek < XTokensData.size();
1609 DataLine += XTokensDataTokens[XTokenSeek];
1611 DataLine += XTokensData[XTokenSeek];
1614 DataLineProcessed = OutputText(&DataLine);
1616 *SaveData += DataLineProcessed;
1619 DataLineProcessed.clear();
1625 *SaveData += "END:VEVENT\n";