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