1 // CalendarJournal.cpp - CalendarJournal 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 "CalendarJournal.h"
23 void CalendarJournalObject::SaveObjectData(string *saveData){
26 string dataLineProcessed = "";
28 *saveData += "BEGIN:VJOURNAL\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 SUMMARY.
88 if (summaryData.size() > 0){
90 dataLine += "SUMMARY";
92 if (summaryDataAltRep.size() > 0){
94 dataLine += ";ALTREP=\"";
95 dataLine += summaryDataAltRep;
100 if (summaryDataLanguage.size() > 0){
102 dataLine += ";LANGUAGE=";
103 dataLine += summaryDataLanguage;
107 if (summaryDataTokens.size() > 0){
110 dataLine += summaryDataTokens;
115 dataLine += summaryData;
118 dataLineProcessed = OutputText(&dataLine);
120 *saveData += dataLineProcessed;
123 dataLineProcessed.clear();
127 // Process the CLASS.
129 if (classData.size() > 0){
133 if (classDataTokens.size() > 0){
136 dataLine += classDataTokens;
141 dataLine += classData;
144 dataLineProcessed = OutputText(&dataLine);
146 *saveData += dataLineProcessed;
149 dataLineProcessed.clear();
153 // Process the DTSTART.
155 if (dateTimeStartData.size() > 0){
157 dataLine += "DTSTART";
159 if (dateTimeStartDataValue.size() > 0){
161 dataLine += ";VALUE=";
162 dataLine += dateTimeStartDataValue;
166 if (dateTimeStartDataTimeZoneID.size() > 0){
168 dataLine += ";TZID=";
169 dataLine += dateTimeStartDataTimeZoneID;
173 if (dateTimeStartDataTokens.size() > 0){
176 dataLine += dateTimeStartDataTokens;
181 dataLine += dateTimeStartData;
184 dataLineProcessed = OutputText(&dataLine);
186 *saveData += dataLineProcessed;
189 dataLineProcessed.clear();
193 // Process the LAST-MODIFIED value.
195 if (lastModifiedData.size() > 0){
197 if (lastModifiedTokens.size() > 0){
199 dataLine += "LAST-MODIFIED;";
200 dataLine += lastModifiedTokens;
204 dataLine += "LAST-MODIFIED";
209 dataLine += lastModifiedData;
212 dataLineProcessed = OutputText(&dataLine);
214 *saveData += dataLineProcessed;
217 dataLineProcessed.clear();
221 // Process the ORGANIZER value.
223 if (organiserData.size() > 0){
225 dataLine += "ORGANIZER";
227 if (organiserDataCommonName.size() > 0){
230 dataLine += organiserDataCommonName;
234 if (organiserDataDirectoryEntry.size() > 0){
236 dataLine += ";DIR=\"";
237 dataLine += organiserDataDirectoryEntry;
242 if (organiserDataSentByParam.size() > 0){
244 dataLine += ";SENT-BY=\"";
245 dataLine += organiserDataSentByParam;
250 if (organiserDataLanguage.size() > 0){
252 dataLine += ";LANGUAGE=";
253 dataLine += organiserDataLanguage;
257 if (organiserDataTokens.size() > 0){
260 dataLine += organiserDataTokens;
265 dataLine += organiserData;
268 dataLineProcessed = OutputText(&dataLine);
270 *saveData += dataLineProcessed;
273 dataLineProcessed.clear();
277 // Process the RECURRENCE-ID value.
279 if (recurranceIDData.size() > 0){
281 dataLine += "RECURRENCE-ID";
283 if (recurranceIDDataTimeZoneParam.size() > 0){
285 dataLine += ";TZID=";
286 dataLine += recurranceIDDataTimeZoneParam;
290 if (recurranceIDDataRangeParam.size() > 0){
292 dataLine += ";RANGE=";
293 dataLine += recurranceIDDataRangeParam;
297 if (recurranceIDDataValue.size() > 0){
299 dataLine += ";VALUE=";
300 dataLine += recurranceIDDataValue;
304 if (recurranceIDDataTokens.size() > 0){
307 dataLine += recurranceIDDataTokens;
312 dataLine += recurranceIDData;
315 dataLineProcessed = OutputText(&dataLine);
317 *saveData += dataLineProcessed;
320 dataLineProcessed.clear();
324 // Process the SEQUENCE value.
326 if (sequenceData > -1 && sequenceData < 10){
328 dataLine += "SEQUENCE";
330 if (sequenceTokens.size() > 0){
333 dataLine += sequenceTokens;
338 dataLine += to_string(sequenceData);
341 dataLineProcessed = OutputText(&dataLine);
343 *saveData += dataLineProcessed;
346 dataLineProcessed.clear();
350 // Process the STATUS value.
352 if (statusData.size() > 0){
354 dataLine += "STATUS";
356 if (statusLanguage.size() > 0){
358 dataLine += ";LANGUAGE=";
359 dataLine += statusLanguage;
363 if (statusTokens.size() > 0){
366 dataLine += statusTokens;
371 dataLine += statusData;
374 dataLineProcessed = OutputText(&dataLine);
376 *saveData += dataLineProcessed;
379 dataLineProcessed.clear();
383 // Process the URL value.
385 if (urlData.size() > 0){
389 if (urlDataTokens.size() > 0){
392 dataLine += urlDataTokens;
400 dataLineProcessed = OutputText(&dataLine);
402 *saveData += dataLineProcessed;
405 dataLineProcessed.clear();
409 // Process the RRULE value.
411 if (recurranceRuleData.size() > 0){
415 if (recurranceRuleDataTokens.size() > 0){
418 dataLine += recurranceRuleDataTokens;
423 dataLine += recurranceRuleData;
426 dataLineProcessed = OutputText(&dataLine);
428 *saveData += dataLineProcessed;
431 dataLineProcessed.clear();
435 // Process the ATTACH values.
437 if (attachList.size() > 0){
439 for (int attachListSeek = 0; attachListSeek < attachList.size();
442 dataLine += "ATTACH";
444 if (attachListFormatType[attachListSeek].size() > 0){
446 dataLine += ";FMTTYPE=";
447 dataLine += attachListFormatType[attachListSeek];
451 if (attachListValue[attachListSeek].size() > 0){
453 dataLine += ";VALUE=";
454 dataLine += attachListValue[attachListSeek];
458 if (attachListEncoding[attachListSeek].size() > 0){
460 dataLine += ";ENCODING=";
461 dataLine += attachListEncoding[attachListSeek];
465 if (attachListTokens[attachListSeek].size() > 0){
468 dataLine += attachListTokens[attachListSeek];
473 dataLine += attachList[attachListSeek];
476 dataLineProcessed = OutputText(&dataLine);
478 *saveData += dataLineProcessed;
481 dataLineProcessed.clear();
487 // Process the ATTENDEE value.
489 if (attendeeList.size() > 0){
491 for (int attendeeListSeek = 0; attendeeListSeek < attendeeList.size();
494 dataLine += "ATTENDEE";
496 if (attendeeListMember[attendeeListSeek].size() > 0){
498 dataLine += ";MEMBER=\"";
499 dataLine += attendeeListMember[attendeeListSeek];
504 if (attendeeListDelegatedFrom[attendeeListSeek].size() > 0){
506 dataLine += ";DELEGATED-FROM=\"";
507 dataLine += attendeeListDelegatedFrom[attendeeListSeek];
512 if (attendeeListDelegatedTo[attendeeListSeek].size() > 0){
514 dataLine += ";DELEGATED-TO=\"";
515 dataLine += attendeeListDelegatedTo[attendeeListSeek];
520 if (attendeeListRole[attendeeListSeek].size() > 0){
522 dataLine += ";ROLE=";
523 dataLine += attendeeListRole[attendeeListSeek];
527 if (attendeeListRSVP[attendeeListSeek].size() > 0){
529 dataLine += ";RSVP=";
530 dataLine += attendeeListRSVP[attendeeListSeek];
534 if (attendeeListDirectoryEntry[attendeeListSeek].size() > 0){
536 dataLine += ";DIR=\"";
537 dataLine += attendeeListDirectoryEntry[attendeeListSeek];
542 if (attendeeListSentBy[attendeeListSeek].size() > 0){
544 dataLine += ";SENT-BY=\"";
545 dataLine += attendeeListSentBy[attendeeListSeek];
550 if (attendeeListCommonName[attendeeListSeek].size() > 0){
552 dataLine += ";CN=\"";
553 dataLine += attendeeListCommonName[attendeeListSeek];
558 if (attendeeListCalendarUserType[attendeeListSeek].size() > 0){
560 dataLine += ";CUTYPE=";
561 dataLine += attendeeListCalendarUserType[attendeeListSeek];
565 if (attendeeListParticipationStatus[attendeeListSeek].size() > 0){
567 dataLine += ";PARTSTAT=";
568 dataLine += attendeeListParticipationStatus[attendeeListSeek];
572 if (attendeeListLanguage[attendeeListSeek].size() > 0){
574 dataLine += ";LANGUAGE=";
575 dataLine += attendeeListLanguage[attendeeListSeek];
579 if (attendeeListTokens[attendeeListSeek].size() > 0){
582 dataLine += attendeeListTokens[attendeeListSeek];
587 dataLine += attendeeList[attendeeListSeek];
590 dataLineProcessed = OutputText(&dataLine);
592 *saveData += dataLineProcessed;
595 dataLineProcessed.clear();
601 // Process the CATEGORIES value.
603 if (categoriesList.size() > 0){
605 for (int categoriesListSeek = 0; categoriesListSeek < categoriesList.size();
606 categoriesListSeek++){
608 dataLine += "CATEGORIES";
610 if (categoriesListLanguage[categoriesListSeek].size() > 0){
612 dataLine += ";LANGUAGE=";
613 dataLine += categoriesListLanguage[categoriesListSeek];
617 if (categoriesListTokens[categoriesListSeek].size() > 0){
620 dataLine += categoriesListTokens[categoriesListSeek];
625 dataLine += categoriesList[categoriesListSeek];
628 dataLineProcessed = OutputText(&dataLine);
630 *saveData += dataLineProcessed;
633 dataLineProcessed.clear();
639 // Process the COMMENT value.
641 if (commentList.size() > 0){
643 for (int commentListSeek = 0; commentListSeek < commentList.size();
646 dataLine += "COMMENT";
648 if (commentListAltRep[commentListSeek].size() > 0){
650 dataLine += ";ALTREP=\"";
651 dataLine += commentListAltRep[commentListSeek];
656 if (commentListLanguage[commentListSeek].size() > 0){
658 dataLine += ";LANGUAGE=";
659 dataLine += commentListLanguage[commentListSeek];
663 if (commentListTokens[commentListSeek].size() > 0){
666 dataLine += commentListTokens[commentListSeek];
671 dataLine += commentList[commentListSeek];
674 dataLineProcessed = OutputText(&dataLine);
676 *saveData += dataLineProcessed;
679 dataLineProcessed.clear();
685 // Process the CONTACT value.
687 if (contactList.size() > 0){
689 for (int contactListSeek = 0; contactListSeek < contactList.size();
692 dataLine += "CONTACT";
694 if (contactListAltRep[contactListSeek].size() > 0){
696 dataLine += ";ALTREP=\"";
697 dataLine += contactListAltRep[contactListSeek];
702 if (contactListLanguage[contactListSeek].size() > 0){
704 dataLine += ";LANGUAGE=";
705 dataLine += contactListLanguage[contactListSeek];
709 if (contactListTokens[contactListSeek].size() > 0){
712 dataLine += contactListTokens[contactListSeek];
717 dataLine += contactList[contactListSeek];
720 dataLineProcessed = OutputText(&dataLine);
722 *saveData += dataLineProcessed;
725 dataLineProcessed.clear();
731 // Process the DESCRIPTION values.
733 if (descriptionList.size() > 0){
735 for (int descriptionListSeek = 0; descriptionListSeek < descriptionList.size() > 0;
736 descriptionListSeek++){
738 dataLine += "DESCRIPTION";
740 if (descriptionListAltRep[descriptionListSeek].size() > 0){
742 dataLine += ";ALTREP=\"";
743 dataLine += descriptionListAltRep[descriptionListSeek];
748 if (descriptionListLanguage[descriptionListSeek].size() > 0){
750 dataLine += ";LANGUAGE=";
751 dataLine += descriptionListLanguage[descriptionListSeek];
755 if (descriptionListTokens[descriptionListSeek].size() > 0){
758 dataLine += descriptionListTokens[descriptionListSeek];
763 dataLine += descriptionList[descriptionListSeek];
766 dataLineProcessed = OutputText(&dataLine);
768 *saveData += dataLineProcessed;
771 dataLineProcessed.clear();
777 // Process the EXDATE value.
779 if (excludeDateData.size() > 0){
781 for (int excludeDateDataSeek = 0; excludeDateDataSeek < excludeDateData.size();
782 excludeDateDataSeek++){
784 dataLine += "EXDATE";
786 if (excludeDateDataTimeZoneParam[excludeDateDataSeek].size() > 0){
788 dataLine += ";TZID=";
789 dataLine += excludeDateDataTimeZoneParam[excludeDateDataSeek];
793 if (excludeDateDataValue[excludeDateDataSeek].size() > 0){
795 dataLine += ";VALUE=";
796 dataLine += excludeDateDataValue[excludeDateDataSeek];
800 if (excludeDateDataTokens[excludeDateDataSeek].size() > 0){
803 dataLine += excludeDateDataTokens[excludeDateDataSeek];
808 dataLine += excludeDateData[excludeDateDataSeek];
811 dataLineProcessed = OutputText(&dataLine);
813 *saveData += dataLineProcessed;
816 dataLineProcessed.clear();
822 // Process the RELATED-TO value.
824 if (relatedToData.size() > 0){
826 for (int requestToDataSeek = 0; requestToDataSeek < relatedToData.size();
827 requestToDataSeek++){
829 dataLine += "RELATED-TO";
831 if (relatedToDataRelationType[requestToDataSeek].size() > 0){
833 dataLine += ";RELTYPE=";
834 dataLine += relatedToDataRelationType[requestToDataSeek];
838 if (relatedToDataTokens[requestToDataSeek].size() > 0){
841 dataLine += relatedToDataTokens[requestToDataSeek];
846 dataLine += relatedToData[requestToDataSeek];
849 dataLineProcessed = OutputText(&dataLine);
851 *saveData += dataLineProcessed;
854 dataLineProcessed.clear();
860 // Process the RDATE value.
862 if (recurranceDateData.size() > 0){
864 for (int recurranceDateDataSeek = 0; recurranceDateDataSeek < recurranceDateData.size();
865 recurranceDateDataSeek++){
869 if (recurranceDateDataValue[recurranceDateDataSeek].size() > 0){
871 dataLine += ";VALUE=";
872 dataLine += recurranceDateDataValue[recurranceDateDataSeek];
876 if (recurranceDateDataTimeZoneParam[recurranceDateDataSeek].size() > 0){
878 dataLine += ";TZID=";
879 dataLine += recurranceDateDataTimeZoneParam[recurranceDateDataSeek];
883 if (recurranceDateDataTokens[recurranceDateDataSeek].size() > 0){
886 dataLine += recurranceDateDataTokens[recurranceDateDataSeek];
891 dataLine += recurranceDateData[recurranceDateDataSeek];
894 dataLineProcessed = OutputText(&dataLine);
896 *saveData += dataLineProcessed;
899 dataLineProcessed.clear();
905 // Process the REQUEST-STATUS value.
907 if (requestStatusData.size() > 0){
909 for (int requestStatusDataSeek = 0; requestStatusDataSeek < requestStatusData.size();
910 requestStatusDataSeek++){
912 dataLine += "REQUEST-STATUS";
914 if (requestStatusLanguage[requestStatusDataSeek].size() > 0){
916 dataLine += ";LANGUAGE=";
917 dataLine += requestStatusLanguage[requestStatusDataSeek];
921 if (requestStatusTokens[requestStatusDataSeek].size() > 0){
924 dataLine += requestStatusTokens[requestStatusDataSeek];
929 dataLine += requestStatusData[requestStatusDataSeek];
932 dataLineProcessed = OutputText(&dataLine);
934 *saveData += dataLineProcessed;
937 dataLineProcessed.clear();
943 // Process the X-Token values.
945 if (xTokensData.size() > 0){
947 for (int xTokenSeek = 0; xTokenSeek < xTokensData.size();
950 dataLine += xTokensDataTokens[xTokenSeek];
952 dataLine += xTokensData[xTokenSeek];
955 dataLineProcessed = OutputText(&dataLine);
957 *saveData += dataLineProcessed;
960 dataLineProcessed.clear();
966 *saveData += "END:VJOURNAL\n";