1 // CalendarTask-Save.cpp - CalendarTask 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 "CalendarTask.h"
23 void CalendarTaskObject::SaveObjectData(string *SaveData){
26 string DataLineProcessed = "";
28 *SaveData += "BEGIN:VTODO\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 CLASS value.
88 if (ClassData.size() > 0){
90 if (ClassDataTokens.size() > 0){
93 DataLine += ClassDataTokens;
102 DataLine += ClassData;
105 DataLineProcessed = OutputText(&DataLine);
107 *SaveData += DataLineProcessed;
110 DataLineProcessed.clear();
114 // Process the COMPLETED value.
116 if (CompletedData.size() > 0){
118 if (CompletedDataTokens.size() > 0){
120 DataLine += "COMPLETED;";
121 DataLine += CompletedDataTokens;
125 DataLine += "COMPLETED";
130 DataLine += CompletedData;
133 DataLineProcessed = OutputText(&DataLine);
135 *SaveData += DataLineProcessed;
138 DataLineProcessed.clear();
142 // Process the CREATED value.
144 if (DateTimeCreatedData.size() > 0){
146 if (DateTimeCreatedTokens.size() > 0){
148 DataLine += "CREATED;";
149 DataLine += DateTimeCreatedTokens;
153 DataLine += "CREATED";
158 DataLine += DateTimeCreatedData;
161 DataLineProcessed = OutputText(&DataLine);
163 *SaveData += DataLineProcessed;
166 DataLineProcessed.clear();
170 // Process the DESCRIPTION values. Write out the
171 // first DESCRPITION only as per RFC5545 specifcation.
173 if (DescriptionList.size() > 0){
175 DataLine += "DESCRIPTION";
177 if (DescriptionListAltRep[0].size() > 0){
179 DataLine += ";ALTREP=\"";
180 DataLine += DescriptionListAltRep[0];
185 if (DescriptionListLanguage[0].size() > 0){
187 DataLine += ";LANGUAGE=";
188 DataLine += DescriptionListLanguage[0];
192 if (DescriptionListTokens[0].size() > 0){
195 DataLine += DescriptionListTokens[0];
200 DataLine += DescriptionList[0];
203 DataLineProcessed = OutputText(&DataLine);
205 *SaveData += DataLineProcessed;
208 DataLineProcessed.clear();
212 // Process the DTSTART.
214 if (DateTimeStartData.size() > 0){
216 DataLine += "DTSTART";
218 if (DateTimeStartDataValue.size() > 0){
220 DataLine += ";VALUE=";
221 DataLine += DateTimeStartDataValue;
225 if (DateTimeStartDataTimeZoneID.size() > 0){
227 DataLine += ";TZID=";
228 DataLine += DateTimeStartDataTimeZoneID;
232 if (DateTimeStartDataTokens.size() > 0){
235 DataLine += DateTimeStartDataTokens;
240 DataLine += DateTimeStartData;
243 DataLineProcessed = OutputText(&DataLine);
245 *SaveData += DataLineProcessed;
248 DataLineProcessed.clear();
252 // Process the GEO value.
254 if (GeographicData.size() > 0){
256 if (GeographicTokens.size() > 0){
259 DataLine += GeographicTokens;
268 DataLine += GeographicData;
271 DataLineProcessed = OutputText(&DataLine);
273 *SaveData += DataLineProcessed;
276 DataLineProcessed.clear();
280 // Process the LAST-MODIFIED value.
282 if (LastModifiedData.size() > 0){
284 if (LastModifiedTokens.size() > 0){
286 DataLine += "LAST-MODIFIED;";
287 DataLine += LastModifiedTokens;
291 DataLine += "LAST-MODIFIED";
296 DataLine += LastModifiedData;
299 DataLineProcessed = OutputText(&DataLine);
301 *SaveData += DataLineProcessed;
304 DataLineProcessed.clear();
308 // Process the LOCATION value.
310 if (LocationData.size() > 0){
312 DataLine += "LOCATION";
314 if (LocationDataAltRep.size() > 0){
316 DataLine += ";ALTREP=\"";
317 DataLine += LocationDataAltRep;
322 if (LocationDataLanguage.size() > 0){
324 DataLine += ";LANGUAGE=";
325 DataLine += LocationDataLanguage;
329 if (LocationDataTokens.size() > 0){
332 DataLine += LocationDataTokens;
337 DataLine += LocationData;
340 DataLineProcessed = OutputText(&DataLine);
342 *SaveData += DataLineProcessed;
345 DataLineProcessed.clear();
349 // Process the ORGANIZER value.
351 if (OrganiserData.size() > 0){
353 DataLine += "ORGANIZER";
355 if (OrganiserDataCommonName.size() > 0){
358 DataLine += OrganiserDataCommonName;
362 if (OrganiserDataDirectoryEntry.size() > 0){
364 DataLine += ";DIR=\"";
365 DataLine += OrganiserDataDirectoryEntry;
370 if (OrganiserDataSentByParam.size() > 0){
372 DataLine += ";SENT-BY=\"";
373 DataLine += OrganiserDataSentByParam;
378 if (OrganiserDataLanguage.size() > 0){
380 DataLine += ";LANGUAGE=";
381 DataLine += OrganiserDataLanguage;
385 if (OrganiserDataTokens.size() > 0){
388 DataLine += OrganiserDataTokens;
393 DataLine += OrganiserData;
396 DataLineProcessed = OutputText(&DataLine);
398 *SaveData += DataLineProcessed;
401 DataLineProcessed.clear();
405 // Process the PERCENT-COMPLETE value.
407 if (PercentCompleteData.size() > 0){
409 if (PercentCompleteTokens.size() > 0){
411 DataLine += "PERCENT-COMPLETE;";
412 DataLine += PercentCompleteTokens;
416 DataLine += "PERCENT-COMPLETE";
421 DataLine += PercentCompleteData;
424 DataLineProcessed = OutputText(&DataLine);
426 *SaveData += DataLineProcessed;
429 DataLineProcessed.clear();
433 // Process the DURATION value.
435 if (DurationData.size() > 0){
437 DataLine += "DURATION";
439 if (DurationDataTokens.size() > 0){
442 DataLine += DurationDataTokens;
447 DataLine += DurationData;
450 DataLineProcessed = OutputText(&DataLine);
452 *SaveData += DataLineProcessed;
455 DataLineProcessed.clear();
459 // Process the PRIORITY value.
461 if (PriorityData > -1 && PriorityData < 10){
463 DataLine += "PRIORITY";
465 if (PriorityTokens.size() > 0){
468 DataLine += PriorityTokens;
473 DataLine += to_string(PriorityData);
476 DataLineProcessed = OutputText(&DataLine);
478 *SaveData += DataLineProcessed;
481 DataLineProcessed.clear();
485 // Process the RECURRENCE-ID value.
487 if (RecurranceIDData.size() > 0){
489 DataLine += "RECURRENCE-ID";
491 if (RecurranceIDDataTimeZoneParam.size() > 0){
493 DataLine += ";TZID=";
494 DataLine += RecurranceIDDataTimeZoneParam;
498 if (RecurranceIDDataRangeParam.size() > 0){
500 DataLine += ";RANGE=";
501 DataLine += RecurranceIDDataRangeParam;
505 if (RecurranceIDDataValue.size() > 0){
507 DataLine += ";VALUE=";
508 DataLine += RecurranceIDDataValue;
512 if (RecurranceIDDataTokens.size() > 0){
515 DataLine += RecurranceIDDataTokens;
520 DataLine += RecurranceIDData;
523 DataLineProcessed = OutputText(&DataLine);
525 *SaveData += DataLineProcessed;
528 DataLineProcessed.clear();
532 // Process the SEQUENCE value.
534 if (SequenceData > -1 && SequenceData < 10){
536 DataLine += "SEQUENCE";
538 if (SequenceTokens.size() > 0){
541 DataLine += SequenceTokens;
546 DataLine += to_string(SequenceData);
549 DataLineProcessed = OutputText(&DataLine);
551 *SaveData += DataLineProcessed;
554 DataLineProcessed.clear();
558 // Process the STATUS value.
560 if (StatusData.size() > 0){
562 DataLine += "STATUS";
564 if (StatusLanguage.size() > 0){
566 DataLine += ";LANGUAGE=";
567 DataLine += StatusLanguage;
571 if (StatusTokens.size() > 0){
574 DataLine += StatusTokens;
579 DataLine += StatusData;
582 DataLineProcessed = OutputText(&DataLine);
584 *SaveData += DataLineProcessed;
587 DataLineProcessed.clear();
591 // Process the SUMMARY.
593 if (SummaryData.size() > 0){
595 DataLine += "SUMMARY";
597 if (SummaryDataAltRep.size() > 0){
599 DataLine += ";ALTREP=\"";
600 DataLine += SummaryDataAltRep;
605 if (SummaryDataLanguage.size() > 0){
607 DataLine += ";LANGUAGE=";
608 DataLine += SummaryDataLanguage;
612 if (SummaryDataTokens.size() > 0){
615 DataLine += SummaryDataTokens;
620 DataLine += SummaryData;
623 DataLineProcessed = OutputText(&DataLine);
625 *SaveData += DataLineProcessed;
628 DataLineProcessed.clear();
632 // Process the URL value.
634 if (URLData.size() > 0){
638 if (URLDataTokens.size() > 0){
641 DataLine += URLDataTokens;
649 DataLineProcessed = OutputText(&DataLine);
651 *SaveData += DataLineProcessed;
654 DataLineProcessed.clear();
658 // Process the RRULE value.
660 if (RecurranceRuleData.size() > 0){
664 if (RecurranceRuleDataTokens.size() > 0){
667 DataLine += RecurranceRuleDataTokens;
672 DataLine += RecurranceRuleData;
675 DataLineProcessed = OutputText(&DataLine);
677 *SaveData += DataLineProcessed;
680 DataLineProcessed.clear();
684 // Process the DUE value.
686 if (DueData.size() > 0){
690 if (DueDataTimeZoneID.size() > 0){
692 DataLine += ";TZID=";
693 DataLine += DueDataTimeZoneID;
697 if (DueDataValue.size() > 0){
699 DataLine += ";VALUE=";
700 DataLine += DueDataValue;
704 if (SummaryDataTokens.size() > 0){
707 DataLine += DueDataTokens;
715 DataLineProcessed = OutputText(&DataLine);
717 *SaveData += DataLineProcessed;
720 DataLineProcessed.clear();
724 // Process the ATTACH values.
726 if (AttachList.size() > 0){
728 for (int AttachListSeek = 0; AttachListSeek < AttachList.size();
731 DataLine += "ATTACH";
733 if (AttachListFormatType[AttachListSeek].size() > 0){
735 DataLine += ";FMTTYPE=";
736 DataLine += AttachListFormatType[AttachListSeek];
740 if (AttachListValue[AttachListSeek].size() > 0){
742 DataLine += ";VALUE=";
743 DataLine += AttachListValue[AttachListSeek];
747 if (AttachListEncoding[AttachListSeek].size() > 0){
749 DataLine += ";ENCODING=";
750 DataLine += AttachListEncoding[AttachListSeek];
754 if (AttachListTokens[AttachListSeek].size() > 0){
757 DataLine += AttachListTokens[AttachListSeek];
762 DataLine += AttachList[AttachListSeek];
765 DataLineProcessed = OutputText(&DataLine);
767 *SaveData += DataLineProcessed;
770 DataLineProcessed.clear();
776 // Process the ATTENDEE value.
778 if (AttendeeList.size() > 0){
780 for (int AttendeeListSeek = 0; AttendeeListSeek < AttendeeList.size();
783 DataLine += "ATTENDEE";
785 if (AttendeeListMember[AttendeeListSeek].size() > 0){
787 DataLine += ";MEMBER=\"";
788 DataLine += AttendeeListMember[AttendeeListSeek];
793 if (AttendeeListDelegatedFrom[AttendeeListSeek].size() > 0){
795 DataLine += ";DELEGATED-FROM=\"";
796 DataLine += AttendeeListDelegatedFrom[AttendeeListSeek];
801 if (AttendeeListDelegatedTo[AttendeeListSeek].size() > 0){
803 DataLine += ";DELEGATED-TO=\"";
804 DataLine += AttendeeListDelegatedTo[AttendeeListSeek];
809 if (AttendeeListRole[AttendeeListSeek].size() > 0){
811 DataLine += ";ROLE=";
812 DataLine += AttendeeListRole[AttendeeListSeek];
816 if (AttendeeListRSVP[AttendeeListSeek].size() > 0){
818 DataLine += ";RSVP=";
819 DataLine += AttendeeListRSVP[AttendeeListSeek];
823 if (AttendeeListDirectoryEntry[AttendeeListSeek].size() > 0){
825 DataLine += ";DIR=\"";
826 DataLine += AttendeeListDirectoryEntry[AttendeeListSeek];
831 if (AttendeeListSentBy[AttendeeListSeek].size() > 0){
833 DataLine += ";SENT-BY=\"";
834 DataLine += AttendeeListSentBy[AttendeeListSeek];
839 if (AttendeeListCommonName[AttendeeListSeek].size() > 0){
841 DataLine += ";CN=\"";
842 DataLine += AttendeeListCommonName[AttendeeListSeek];
847 if (AttendeeListCalendarUserType[AttendeeListSeek].size() > 0){
849 DataLine += ";CUTYPE=";
850 DataLine += AttendeeListCalendarUserType[AttendeeListSeek];
854 if (AttendeeListParticipationStatus[AttendeeListSeek].size() > 0){
856 DataLine += ";PARTSTAT=";
857 DataLine += AttendeeListParticipationStatus[AttendeeListSeek];
861 if (AttendeeListLanguage[AttendeeListSeek].size() > 0){
863 DataLine += ";LANGUAGE=";
864 DataLine += AttendeeListLanguage[AttendeeListSeek];
868 if (AttendeeListTokens[AttendeeListSeek].size() > 0){
871 DataLine += AttendeeListTokens[AttendeeListSeek];
876 DataLine += AttendeeList[AttendeeListSeek];
879 DataLineProcessed = OutputText(&DataLine);
881 *SaveData += DataLineProcessed;
884 DataLineProcessed.clear();
890 // Process the CATEGORIES value.
892 if (CategoriesList.size() > 0){
894 for (int CategoriesListSeek = 0; CategoriesListSeek < CategoriesList.size();
895 CategoriesListSeek++){
897 DataLine += "CATEGORIES";
899 if (CategoriesListLanguage[CategoriesListSeek].size() > 0){
901 DataLine += ";LANGUAGE=";
902 DataLine += CategoriesListLanguage[CategoriesListSeek];
906 if (CategoriesListTokens[CategoriesListSeek].size() > 0){
909 DataLine += CategoriesListTokens[CategoriesListSeek];
914 DataLine += CategoriesList[CategoriesListSeek];
917 DataLineProcessed = OutputText(&DataLine);
919 *SaveData += DataLineProcessed;
922 DataLineProcessed.clear();
928 // Process the COMMENT value.
930 if (CommentList.size() > 0){
932 for (int CommentListSeek = 0; CommentListSeek < CommentList.size();
935 DataLine += "COMMENT";
937 if (CommentListAltRep[CommentListSeek].size() > 0){
939 DataLine += ";ALTREP=\"";
940 DataLine += CommentListAltRep[CommentListSeek];
945 if (CommentListLanguage[CommentListSeek].size() > 0){
947 DataLine += ";LANGUAGE=";
948 DataLine += CommentListLanguage[CommentListSeek];
952 if (CommentListTokens[CommentListSeek].size() > 0){
955 DataLine += CommentListTokens[CommentListSeek];
960 DataLine += CommentList[CommentListSeek];
963 DataLineProcessed = OutputText(&DataLine);
965 *SaveData += DataLineProcessed;
968 DataLineProcessed.clear();
974 // Process the CONTACT value.
976 if (ContactList.size() > 0){
978 for (int ContactListSeek = 0; ContactListSeek < ContactList.size();
981 DataLine += "CONTACT";
983 if (ContactListAltRep[ContactListSeek].size() > 0){
985 DataLine += ";ALTREP=\"";
986 DataLine += ContactListAltRep[ContactListSeek];
991 if (ContactListLanguage[ContactListSeek].size() > 0){
993 DataLine += ";LANGUAGE=";
994 DataLine += ContactListLanguage[ContactListSeek];
998 if (ContactListTokens[ContactListSeek].size() > 0){
1001 DataLine += ContactListTokens[ContactListSeek];
1006 DataLine += ContactList[ContactListSeek];
1009 DataLineProcessed = OutputText(&DataLine);
1011 *SaveData += DataLineProcessed;
1014 DataLineProcessed.clear();
1020 // Process the EXDATE value.
1022 if (ExcludeDateData.size() > 0){
1024 for (int ExcludeDateDataSeek = 0; ExcludeDateDataSeek < ExcludeDateData.size();
1025 ExcludeDateDataSeek++){
1027 DataLine += "EXDATE";
1029 if (ExcludeDateDataTimeZoneParam[ExcludeDateDataSeek].size() > 0){
1031 DataLine += ";TZID=";
1032 DataLine += ExcludeDateDataTimeZoneParam[ExcludeDateDataSeek];
1036 if (ExcludeDateDataValue[ExcludeDateDataSeek].size() > 0){
1038 DataLine += ";VALUE=";
1039 DataLine += ExcludeDateDataValue[ExcludeDateDataSeek];
1043 if (ExcludeDateDataTokens[ExcludeDateDataSeek].size() > 0){
1046 DataLine += ExcludeDateDataTokens[ExcludeDateDataSeek];
1051 DataLine += ExcludeDateData[ExcludeDateDataSeek];
1054 DataLineProcessed = OutputText(&DataLine);
1056 *SaveData += DataLineProcessed;
1059 DataLineProcessed.clear();
1065 // Process the REQUEST-STATUS value.
1067 if (RequestStatusData.size() > 0){
1069 for (int RequestStatusDataSeek = 0; RequestStatusDataSeek < RequestStatusData.size();
1070 RequestStatusDataSeek++){
1072 DataLine += "REQUEST-STATUS";
1074 if (RequestStatusLanguage[RequestStatusDataSeek].size() > 0){
1076 DataLine += ";LANGUAGE=";
1077 DataLine += RequestStatusLanguage[RequestStatusDataSeek];
1081 if (RequestStatusTokens[RequestStatusDataSeek].size() > 0){
1084 DataLine += RequestStatusTokens[RequestStatusDataSeek];
1089 DataLine += RequestStatusData[RequestStatusDataSeek];
1092 DataLineProcessed = OutputText(&DataLine);
1094 *SaveData += DataLineProcessed;
1097 DataLineProcessed.clear();
1103 // Process the RELATED-TO value.
1105 if (RelatedToData.size() > 0){
1107 for (int RequestToDataSeek = 0; RequestToDataSeek < RelatedToData.size();
1108 RequestToDataSeek++){
1110 DataLine += "RELATED-TO";
1112 if (RelatedToDataRelationType[RequestToDataSeek].size() > 0){
1114 DataLine += ";RELTYPE=";
1115 DataLine += RelatedToDataRelationType[RequestToDataSeek];
1119 if (RelatedToDataTokens[RequestToDataSeek].size() > 0){
1122 DataLine += RelatedToDataTokens[RequestToDataSeek];
1127 DataLine += RelatedToData[RequestToDataSeek];
1130 DataLineProcessed = OutputText(&DataLine);
1132 *SaveData += DataLineProcessed;
1135 DataLineProcessed.clear();
1141 // Process the RESOURCES value.
1143 if (ResourcesData.size() > 0){
1145 for (int ResourcesDataSeek = 0; ResourcesDataSeek < ResourcesData.size();
1146 ResourcesDataSeek++){
1148 DataLine += "RESOURCES";
1150 if (ResourcesDataAltRep[ResourcesDataSeek].size() > 0){
1152 DataLine += ";ALTREP=\"";
1153 DataLine += ResourcesDataAltRep[ResourcesDataSeek];
1158 if (ResourcesDataLanguage[ResourcesDataSeek].size() > 0){
1160 DataLine += ";LANGUAGE=";
1161 DataLine += ResourcesDataLanguage[ResourcesDataSeek];
1165 if (ResourcesDataTokens[ResourcesDataSeek].size() > 0){
1168 DataLine += ResourcesDataTokens[ResourcesDataSeek];
1173 DataLine += ResourcesData[ResourcesDataSeek];
1176 DataLineProcessed = OutputText(&DataLine);
1178 *SaveData += DataLineProcessed;
1181 DataLineProcessed.clear();
1187 // Process the RDATE value.
1189 if (RecurranceDateData.size() > 0){
1191 for (int RecurranceDateDataSeek = 0; RecurranceDateDataSeek < RecurranceDateData.size();
1192 RecurranceDateDataSeek++){
1194 DataLine += "RDATE";
1196 if (RecurranceDateDataValue[RecurranceDateDataSeek].size() > 0){
1198 DataLine += ";VALUE=";
1199 DataLine += RecurranceDateDataValue[RecurranceDateDataSeek];
1203 if (RecurranceDateDataTimeZoneParam[RecurranceDateDataSeek].size() > 0){
1205 DataLine += ";TZID=";
1206 DataLine += RecurranceDateDataTimeZoneParam[RecurranceDateDataSeek];
1210 if (RecurranceDateDataTokens[RecurranceDateDataSeek].size() > 0){
1213 DataLine += RecurranceDateDataTokens[RecurranceDateDataSeek];
1218 DataLine += RecurranceDateData[RecurranceDateDataSeek];
1221 DataLineProcessed = OutputText(&DataLine);
1223 *SaveData += DataLineProcessed;
1226 DataLineProcessed.clear();
1232 // Process the VALARMS.
1234 if (CalendarAlarmData.size() > 0){
1236 for (int CalendarAlarmDataSeek = 0; CalendarAlarmDataSeek < CalendarAlarmData.size();
1237 CalendarAlarmDataSeek++){
1239 *SaveData += "BEGIN:VALARM\n";
1241 // Process the ACTION VALARM value.
1243 DataLine += "ACTION";
1245 if (CalendarAlarmData[CalendarAlarmDataSeek].AlarmActionTokens.size() > 0){
1248 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].AlarmActionTokens;
1253 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].AlarmAction;
1256 DataLineProcessed = OutputText(&DataLine);
1258 *SaveData += DataLineProcessed;
1261 DataLineProcessed.clear();
1263 // Process the TRIGGER VALARM value.
1265 if (CalendarAlarmData[CalendarAlarmDataSeek].TriggerData.size() > 0){
1267 DataLine += "TRIGGER";
1269 if (CalendarAlarmData[CalendarAlarmDataSeek].TriggerRelated.size() > 0){
1271 DataLine += ";RELATED=";
1272 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].TriggerRelated;
1276 if (CalendarAlarmData[CalendarAlarmDataSeek].TriggerValue.size() > 0){
1278 DataLine += ";VALUE=";
1279 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].TriggerValue;
1283 if (CalendarAlarmData[CalendarAlarmDataSeek].TriggerTokens.size() > 0){
1286 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].TriggerTokens;
1291 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].TriggerData;
1294 DataLineProcessed = OutputText(&DataLine);
1296 *SaveData += DataLineProcessed;
1299 DataLineProcessed.clear();
1303 // Process the DURATION VALARM value.
1305 if (CalendarAlarmData[CalendarAlarmDataSeek].DurationData.size() > 0){
1307 DataLine += "DURATION";
1309 if (CalendarAlarmData[CalendarAlarmDataSeek].DurationTokens.size() > 0){
1312 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].DurationTokens;
1317 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].DurationData;
1320 DataLineProcessed = OutputText(&DataLine);
1322 *SaveData += DataLineProcessed;
1325 DataLineProcessed.clear();
1329 // Process the DESCRIPTION VALARM value.
1331 if (CalendarAlarmData[CalendarAlarmDataSeek].DescriptionData.size() > 0){
1333 DataLine += "DESCRIPTION";
1335 if (CalendarAlarmData[CalendarAlarmDataSeek].DescriptionAltRep.size() > 0){
1337 DataLine += ";ALTREP=\"";
1338 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].DescriptionAltRep;
1343 if (CalendarAlarmData[CalendarAlarmDataSeek].DescriptionLanguage.size() > 0){
1345 DataLine += ";LANGUAGE=";
1346 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].DescriptionLanguage;
1350 if (CalendarAlarmData[CalendarAlarmDataSeek].DescriptionTokens.size() > 0){
1353 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].DescriptionTokens;
1358 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].DescriptionData;
1361 DataLineProcessed = OutputText(&DataLine);
1363 *SaveData += DataLineProcessed;
1366 DataLineProcessed.clear();
1370 // Process the SUMMARY VALARM value.
1372 if (CalendarAlarmData[CalendarAlarmDataSeek].SummaryData.size() > 0){
1374 DataLine += "SUMMARY";
1376 if (CalendarAlarmData[CalendarAlarmDataSeek].SummaryAltRep.size() > 0){
1378 DataLine += ";ALTREP=\"";
1379 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].SummaryAltRep;
1384 if (CalendarAlarmData[CalendarAlarmDataSeek].SummaryLanguage.size() > 0){
1386 DataLine += ";LANGUAGE=";
1387 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].SummaryLanguage;
1391 if (CalendarAlarmData[CalendarAlarmDataSeek].SummaryTokens.size() > 0){
1394 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].SummaryTokens;
1399 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].SummaryData;
1402 DataLineProcessed = OutputText(&DataLine);
1404 *SaveData += DataLineProcessed;
1407 DataLineProcessed.clear();
1411 // Process the REPEAT VALARM value.
1413 if (CalendarAlarmData[CalendarAlarmDataSeek].RepeatData.size() > 0){
1415 DataLine += "REPEAT";
1417 if (CalendarAlarmData[CalendarAlarmDataSeek].RepeatTokens.size() > 0){
1420 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].RepeatTokens;
1425 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].RepeatData;
1428 DataLineProcessed = OutputText(&DataLine);
1430 *SaveData += DataLineProcessed;
1433 DataLineProcessed.clear();
1437 // Process the ATTENDEE VALARM values.
1439 if (CalendarAlarmData[CalendarAlarmDataSeek].AttendeeList.size() > 0){
1441 for (int AttendeeListSeek = 0; AttendeeListSeek < CalendarAlarmData[CalendarAlarmDataSeek].AttendeeList.size();
1442 AttendeeListSeek++){
1444 DataLine += "ATTENDEE";
1446 if (CalendarAlarmData[CalendarAlarmDataSeek].AttendeeListMember[AttendeeListSeek].size() > 0){
1448 DataLine += ";MEMBER=\"";
1449 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].AttendeeListMember[AttendeeListSeek];
1454 if (CalendarAlarmData[CalendarAlarmDataSeek].AttendeeListDelegatedFrom[AttendeeListSeek].size() > 0){
1456 DataLine += ";DELEGATED-FROM=\"";
1457 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].AttendeeListDelegatedFrom[AttendeeListSeek];
1462 if (CalendarAlarmData[CalendarAlarmDataSeek].AttendeeListDelegatedTo[AttendeeListSeek].size() > 0){
1464 DataLine += ";DELEGATED-TO=\"";
1465 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].AttendeeListDelegatedTo[AttendeeListSeek];
1470 if (CalendarAlarmData[CalendarAlarmDataSeek].AttendeeListRole[AttendeeListSeek].size() > 0){
1472 DataLine += ";ROLE=";
1473 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].AttendeeListRole[AttendeeListSeek];
1477 if (CalendarAlarmData[CalendarAlarmDataSeek].AttendeeListRSVP[AttendeeListSeek].size() > 0){
1479 DataLine += ";RSVP=";
1480 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].AttendeeListRSVP[AttendeeListSeek];
1484 if (CalendarAlarmData[CalendarAlarmDataSeek].AttendeeListDirectoryEntry[AttendeeListSeek].size() > 0){
1486 DataLine += ";DIR=\"";
1487 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].AttendeeListDirectoryEntry[AttendeeListSeek];
1492 if (CalendarAlarmData[CalendarAlarmDataSeek].AttendeeListSentBy[AttendeeListSeek].size() > 0){
1494 DataLine += ";SENT-BY=\"";
1495 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].AttendeeListSentBy[AttendeeListSeek];
1500 if (CalendarAlarmData[CalendarAlarmDataSeek].AttendeeListCommonName[AttendeeListSeek].size() > 0){
1502 DataLine += ";CN=\"";
1503 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].AttendeeListCommonName[AttendeeListSeek];
1508 if (CalendarAlarmData[CalendarAlarmDataSeek].AttendeeListCalendarUserType[AttendeeListSeek].size() > 0){
1510 DataLine += ";CUTYPE=";
1511 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].AttendeeListCalendarUserType[AttendeeListSeek];
1515 if (CalendarAlarmData[CalendarAlarmDataSeek].AttendeeListParticipationStatus[AttendeeListSeek].size() > 0){
1517 DataLine += ";PARTSTAT=";
1518 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].AttendeeListParticipationStatus[AttendeeListSeek];
1522 if (CalendarAlarmData[CalendarAlarmDataSeek].AttendeeListLanguage[AttendeeListSeek].size() > 0){
1524 DataLine += ";LANGUAGE=";
1525 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].AttendeeListLanguage[AttendeeListSeek];
1529 if (CalendarAlarmData[CalendarAlarmDataSeek].AttendeeListTokens[AttendeeListSeek].size() > 0){
1532 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].AttendeeListTokens[AttendeeListSeek];
1537 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].AttendeeList[AttendeeListSeek];
1540 DataLineProcessed = OutputText(&DataLine);
1542 *SaveData += DataLineProcessed;
1545 DataLineProcessed.clear();
1551 // Process the ATTACH VALARM values.
1553 if (CalendarAlarmData[CalendarAlarmDataSeek].AttachList.size() > 0){
1555 for (int AttachListSeek = 0; AttachListSeek < CalendarAlarmData[CalendarAlarmDataSeek].AttachList.size();
1558 DataLine += "ATTACH";
1560 if (CalendarAlarmData[CalendarAlarmDataSeek].AttachListFormatType[AttachListSeek].size() > 0){
1562 DataLine += ";FMTTYPE=";
1563 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].AttachListFormatType[AttachListSeek];
1567 if (CalendarAlarmData[CalendarAlarmDataSeek].AttachListValue[AttachListSeek].size() > 0){
1569 DataLine += ";VALUE=";
1570 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].AttachListValue[AttachListSeek];
1574 if (CalendarAlarmData[CalendarAlarmDataSeek].AttachListEncoding[AttachListSeek].size() > 0){
1576 DataLine += ";ENCODING=";
1577 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].AttachListEncoding[AttachListSeek];
1581 if (CalendarAlarmData[CalendarAlarmDataSeek].AttachListTokens[AttachListSeek].size() > 0){
1584 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].AttachListTokens[AttachListSeek];
1589 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].AttachList[AttachListSeek];
1592 DataLineProcessed = OutputText(&DataLine);
1594 *SaveData += DataLineProcessed;
1597 DataLineProcessed.clear();
1603 // Process the X-Token VALARM values.
1605 if (CalendarAlarmData[CalendarAlarmDataSeek].XTokensData.size() > 0){
1607 for (int XTokenSeek = 0; XTokenSeek < CalendarAlarmData[CalendarAlarmDataSeek].XTokensData.size();
1610 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].XTokensDataTokens[XTokenSeek];
1612 DataLine += CalendarAlarmData[CalendarAlarmDataSeek].XTokensData[XTokenSeek];
1615 DataLineProcessed = OutputText(&DataLine);
1617 *SaveData += DataLineProcessed;
1620 DataLineProcessed.clear();
1626 *SaveData += "END:VALARM\n";
1632 // Process the X-Token values.
1634 if (XTokensData.size() > 0){
1636 for (int XTokenSeek = 0; XTokenSeek < XTokensData.size();
1639 DataLine += XTokensDataTokens[XTokenSeek];
1641 DataLine += XTokensData[XTokenSeek];
1644 DataLineProcessed = OutputText(&DataLine);
1646 *SaveData += DataLineProcessed;
1649 DataLineProcessed.clear();
1655 *SaveData += "END:VTODO\n";