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";