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 (dueDataTokens.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 (xTokenData.size() > 0){
1636 for (int XTokenSeek = 0; XTokenSeek < xTokenData.size();
1639 dataLine += xTokenDataTokens[XTokenSeek];
1641 dataLine += xTokenData[XTokenSeek];
1644 dataLineProcessed = OutputText(&dataLine);
1646 *SaveData += dataLineProcessed;
1649 dataLineProcessed.clear();
1655 *SaveData += "END:VTODO\n";