// CalendarJournal.cpp - CalendarJournal class save functions // // (c) 2016-2017 Xestia Software Development. // // This file is part of Xestia Calendar. // // Xestia Calendar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by the // Free Software Foundation, version 3 of the license. // // Xestia Calendar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License along // with Xestia Calendar. If not, see #include "CalendarJournal.h" using namespace std; void CalendarJournalObject::SaveObjectData(string *SaveData){ string DataLine = ""; string DataLineProcessed = ""; *SaveData += "BEGIN:VJOURNAL\n"; // Process the UID. if (UniqueID.size() > 0){ if (UniqueIDTokens.size() > 0){ DataLine += "UID;"; DataLine += UniqueIDTokens; } else { DataLine += "UID"; } DataLine += ":"; DataLine += UniqueID; DataLine += "\n"; DataLineProcessed = OutputText(&DataLine); *SaveData += DataLineProcessed; DataLine.clear(); DataLineProcessed.clear(); } // Process the DTSTAMP. if (DateTimeStampData.size() > 0){ if (DateTimeStampTokens.size() > 0){ DataLine += "DTSTAMP;"; DataLine += DateTimeStampTokens; } else { DataLine += "DTSTAMP"; } DataLine += ":"; DataLine += DateTimeStampData; DataLine += "\n"; DataLineProcessed = OutputText(&DataLine); *SaveData += DataLineProcessed; DataLine.clear(); DataLineProcessed.clear(); } // Process the SUMMARY. if (SummaryData.size() > 0){ DataLine += "SUMMARY"; if (SummaryDataAltRep.size() > 0){ DataLine += ";ALTREP=\""; DataLine += SummaryDataAltRep; DataLine += "\""; } if (SummaryDataLanguage.size() > 0){ DataLine += ";LANGUAGE="; DataLine += SummaryDataLanguage; } if (SummaryDataTokens.size() > 0){ DataLine += ";"; DataLine += SummaryDataTokens; } DataLine += ":"; DataLine += SummaryData; DataLine += "\n"; DataLineProcessed = OutputText(&DataLine); *SaveData += DataLineProcessed; DataLine.clear(); DataLineProcessed.clear(); } // Process the CLASS. if (ClassData.size() > 0){ DataLine += "CLASS"; if (ClassDataTokens.size() > 0){ DataLine += ";"; DataLine += ClassDataTokens; } DataLine += ":"; DataLine += ClassData; DataLine += "\n"; DataLineProcessed = OutputText(&DataLine); *SaveData += DataLineProcessed; DataLine.clear(); DataLineProcessed.clear(); } // Process the DTSTART. if (DateTimeStartData.size() > 0){ DataLine += "DTSTART"; if (DateTimeStartDataValue.size() > 0){ DataLine += ";VALUE="; DataLine += DateTimeStartDataValue; } if (DateTimeStartDataTimeZoneID.size() > 0){ DataLine += ";TZID="; DataLine += DateTimeStartDataTimeZoneID; } if (DateTimeStartDataTokens.size() > 0){ DataLine += ";"; DataLine += DateTimeStartDataTokens; } DataLine += ":"; DataLine += DateTimeStartData; DataLine += "\n"; DataLineProcessed = OutputText(&DataLine); *SaveData += DataLineProcessed; DataLine.clear(); DataLineProcessed.clear(); } // Process the LAST-MODIFIED value. if (LastModifiedData.size() > 0){ if (LastModifiedTokens.size() > 0){ DataLine += "LAST-MODIFIED;"; DataLine += LastModifiedTokens; } else { DataLine += "LAST-MODIFIED"; } DataLine += ":"; DataLine += LastModifiedData; DataLine += "\n"; DataLineProcessed = OutputText(&DataLine); *SaveData += DataLineProcessed; DataLine.clear(); DataLineProcessed.clear(); } // Process the ORGANIZER value. if (OrganiserData.size() > 0){ DataLine += "ORGANIZER"; if (OrganiserDataCommonName.size() > 0){ DataLine += ";CN="; DataLine += OrganiserDataCommonName; } if (OrganiserDataDirectoryEntry.size() > 0){ DataLine += ";DIR=\""; DataLine += OrganiserDataDirectoryEntry; DataLine += "\""; } if (OrganiserDataSentByParam.size() > 0){ DataLine += ";SENT-BY=\""; DataLine += OrganiserDataSentByParam; DataLine += "\""; } if (OrganiserDataLanguage.size() > 0){ DataLine += ";LANGUAGE="; DataLine += OrganiserDataLanguage; } if (OrganiserDataTokens.size() > 0){ DataLine += ";"; DataLine += OrganiserDataTokens; } DataLine += ":"; DataLine += OrganiserData; DataLine += "\n"; DataLineProcessed = OutputText(&DataLine); *SaveData += DataLineProcessed; DataLine.clear(); DataLineProcessed.clear(); } // Process the RECURRENCE-ID value. if (RecurranceIDData.size() > 0){ DataLine += "RECURRENCE-ID"; if (RecurranceIDDataTimeZoneParam.size() > 0){ DataLine += ";TZID="; DataLine += RecurranceIDDataTimeZoneParam; } if (RecurranceIDDataRangeParam.size() > 0){ DataLine += ";RANGE="; DataLine += RecurranceIDDataRangeParam; } if (RecurranceIDDataValue.size() > 0){ DataLine += ";VALUE="; DataLine += RecurranceIDDataValue; } if (RecurranceIDDataTokens.size() > 0){ DataLine += ";"; DataLine += RecurranceIDDataTokens; } DataLine += ":"; DataLine += RecurranceIDData; DataLine += "\n"; DataLineProcessed = OutputText(&DataLine); *SaveData += DataLineProcessed; DataLine.clear(); DataLineProcessed.clear(); } // Process the SEQUENCE value. if (SequenceData > -1 && SequenceData < 10){ DataLine += "SEQUENCE"; if (SequenceTokens.size() > 0){ DataLine += ";"; DataLine += SequenceTokens; } DataLine += ":"; DataLine += to_string(SequenceData); DataLine += "\n"; DataLineProcessed = OutputText(&DataLine); *SaveData += DataLineProcessed; DataLine.clear(); DataLineProcessed.clear(); } // Process the STATUS value. if (StatusData.size() > 0){ DataLine += "STATUS"; if (StatusLanguage.size() > 0){ DataLine += ";LANGUAGE="; DataLine += StatusLanguage; } if (StatusTokens.size() > 0){ DataLine += ";"; DataLine += StatusTokens; } DataLine += ":"; DataLine += StatusData; DataLine += "\n"; DataLineProcessed = OutputText(&DataLine); *SaveData += DataLineProcessed; DataLine.clear(); DataLineProcessed.clear(); } // Process the URL value. if (URLData.size() > 0){ DataLine += "URL"; if (URLDataTokens.size() > 0){ DataLine += ";"; DataLine += URLDataTokens; } DataLine += ":"; DataLine += URLData; DataLine += "\n"; DataLineProcessed = OutputText(&DataLine); *SaveData += DataLineProcessed; DataLine.clear(); DataLineProcessed.clear(); } // Process the RRULE value. if (RecurranceRuleData.size() > 0){ DataLine += "RRULE"; if (RecurranceRuleDataTokens.size() > 0){ DataLine += ";"; DataLine += RecurranceRuleDataTokens; } DataLine += ":"; DataLine += RecurranceRuleData; DataLine += "\n"; DataLineProcessed = OutputText(&DataLine); *SaveData += DataLineProcessed; DataLine.clear(); DataLineProcessed.clear(); } // Process the ATTACH values. if (AttachList.size() > 0){ for (int AttachListSeek = 0; AttachListSeek < AttachList.size(); AttachListSeek++){ DataLine += "ATTACH"; if (AttachListFormatType[AttachListSeek].size() > 0){ DataLine += ";FMTTYPE="; DataLine += AttachListFormatType[AttachListSeek]; } if (AttachListValue[AttachListSeek].size() > 0){ DataLine += ";VALUE="; DataLine += AttachListValue[AttachListSeek]; } if (AttachListEncoding[AttachListSeek].size() > 0){ DataLine += ";ENCODING="; DataLine += AttachListEncoding[AttachListSeek]; } if (AttachListTokens[AttachListSeek].size() > 0){ DataLine += ";"; DataLine += AttachListTokens[AttachListSeek]; } DataLine += ":"; DataLine += AttachList[AttachListSeek]; DataLine += "\n"; DataLineProcessed = OutputText(&DataLine); *SaveData += DataLineProcessed; DataLine.clear(); DataLineProcessed.clear(); } } // Process the ATTENDEE value. if (AttendeeList.size() > 0){ for (int AttendeeListSeek = 0; AttendeeListSeek < AttendeeList.size(); AttendeeListSeek++){ DataLine += "ATTENDEE"; if (AttendeeListMember[AttendeeListSeek].size() > 0){ DataLine += ";MEMBER=\""; DataLine += AttendeeListMember[AttendeeListSeek]; DataLine += "\""; } if (AttendeeListDelegatedFrom[AttendeeListSeek].size() > 0){ DataLine += ";DELEGATED-FROM=\""; DataLine += AttendeeListDelegatedFrom[AttendeeListSeek]; DataLine += "\""; } if (AttendeeListDelegatedTo[AttendeeListSeek].size() > 0){ DataLine += ";DELEGATED-TO=\""; DataLine += AttendeeListDelegatedTo[AttendeeListSeek]; DataLine += "\""; } if (AttendeeListRole[AttendeeListSeek].size() > 0){ DataLine += ";ROLE="; DataLine += AttendeeListRole[AttendeeListSeek]; } if (AttendeeListRSVP[AttendeeListSeek].size() > 0){ DataLine += ";RSVP="; DataLine += AttendeeListRSVP[AttendeeListSeek]; } if (AttendeeListDirectoryEntry[AttendeeListSeek].size() > 0){ DataLine += ";DIR=\""; DataLine += AttendeeListDirectoryEntry[AttendeeListSeek]; DataLine += "\""; } if (AttendeeListSentBy[AttendeeListSeek].size() > 0){ DataLine += ";SENT-BY=\""; DataLine += AttendeeListSentBy[AttendeeListSeek]; DataLine += "\""; } if (AttendeeListCommonName[AttendeeListSeek].size() > 0){ DataLine += ";CN=\""; DataLine += AttendeeListCommonName[AttendeeListSeek]; DataLine += "\""; } if (AttendeeListCalendarUserType[AttendeeListSeek].size() > 0){ DataLine += ";CUTYPE="; DataLine += AttendeeListCalendarUserType[AttendeeListSeek]; } if (AttendeeListParticipationStatus[AttendeeListSeek].size() > 0){ DataLine += ";PARTSTAT="; DataLine += AttendeeListParticipationStatus[AttendeeListSeek]; } if (AttendeeListLanguage[AttendeeListSeek].size() > 0){ DataLine += ";LANGUAGE="; DataLine += AttendeeListLanguage[AttendeeListSeek]; } if (AttendeeListTokens[AttendeeListSeek].size() > 0){ DataLine += ";"; DataLine += AttendeeListTokens[AttendeeListSeek]; } DataLine += ":"; DataLine += AttendeeList[AttendeeListSeek]; DataLine += "\n"; DataLineProcessed = OutputText(&DataLine); *SaveData += DataLineProcessed; DataLine.clear(); DataLineProcessed.clear(); } } // Process the CATEGORIES value. if (CategoriesList.size() > 0){ for (int CategoriesListSeek = 0; CategoriesListSeek < CategoriesList.size(); CategoriesListSeek++){ DataLine += "CATEGORIES"; if (CategoriesListLanguage[CategoriesListSeek].size() > 0){ DataLine += ";LANGUAGE="; DataLine += CategoriesListLanguage[CategoriesListSeek]; } if (CategoriesListTokens[CategoriesListSeek].size() > 0){ DataLine += ";"; DataLine += CategoriesListTokens[CategoriesListSeek]; } DataLine += ":"; DataLine += CategoriesList[CategoriesListSeek]; DataLine += "\n"; DataLineProcessed = OutputText(&DataLine); *SaveData += DataLineProcessed; DataLine.clear(); DataLineProcessed.clear(); } } // Process the COMMENT value. if (CommentList.size() > 0){ for (int CommentListSeek = 0; CommentListSeek < CommentList.size(); CommentListSeek++){ DataLine += "COMMENT"; if (CommentListAltRep[CommentListSeek].size() > 0){ DataLine += ";ALTREP=\""; DataLine += CommentListAltRep[CommentListSeek]; DataLine += "\""; } if (CommentListLanguage[CommentListSeek].size() > 0){ DataLine += ";LANGUAGE="; DataLine += CommentListLanguage[CommentListSeek]; } if (CommentListTokens[CommentListSeek].size() > 0){ DataLine += ";"; DataLine += CommentListTokens[CommentListSeek]; } DataLine += ":"; DataLine += CommentList[CommentListSeek]; DataLine += "\n"; DataLineProcessed = OutputText(&DataLine); *SaveData += DataLineProcessed; DataLine.clear(); DataLineProcessed.clear(); } } // Process the CONTACT value. if (ContactList.size() > 0){ for (int ContactListSeek = 0; ContactListSeek < ContactList.size(); ContactListSeek++){ DataLine += "CONTACT"; if (ContactListAltRep[ContactListSeek].size() > 0){ DataLine += ";ALTREP=\""; DataLine += ContactListAltRep[ContactListSeek]; DataLine += "\""; } if (ContactListLanguage[ContactListSeek].size() > 0){ DataLine += ";LANGUAGE="; DataLine += ContactListLanguage[ContactListSeek]; } if (ContactListTokens[ContactListSeek].size() > 0){ DataLine += ";"; DataLine += ContactListTokens[ContactListSeek]; } DataLine += ":"; DataLine += ContactList[ContactListSeek]; DataLine += "\n"; DataLineProcessed = OutputText(&DataLine); *SaveData += DataLineProcessed; DataLine.clear(); DataLineProcessed.clear(); } } // Process the DESCRIPTION values. if (DescriptionList.size() > 0){ for (int DescriptionListSeek = 0; DescriptionListSeek < DescriptionList.size() > 0; DescriptionListSeek++){ DataLine += "DESCRIPTION"; if (DescriptionListAltRep[DescriptionListSeek].size() > 0){ DataLine += ";ALTREP=\""; DataLine += DescriptionListAltRep[DescriptionListSeek]; DataLine += "\""; } if (DescriptionListLanguage[DescriptionListSeek].size() > 0){ DataLine += ";LANGUAGE="; DataLine += DescriptionListLanguage[DescriptionListSeek]; } if (DescriptionListTokens[DescriptionListSeek].size() > 0){ DataLine += ";"; DataLine += DescriptionListTokens[DescriptionListSeek]; } DataLine += ":"; DataLine += DescriptionList[DescriptionListSeek]; DataLine += "\n"; DataLineProcessed = OutputText(&DataLine); *SaveData += DataLineProcessed; DataLine.clear(); DataLineProcessed.clear(); } } // Process the EXDATE value. if (ExcludeDateData.size() > 0){ for (int ExcludeDateDataSeek = 0; ExcludeDateDataSeek < ExcludeDateData.size(); ExcludeDateDataSeek++){ DataLine += "EXDATE"; if (ExcludeDateDataTimeZoneParam[ExcludeDateDataSeek].size() > 0){ DataLine += ";TZID="; DataLine += ExcludeDateDataTimeZoneParam[ExcludeDateDataSeek]; } if (ExcludeDateDataValue[ExcludeDateDataSeek].size() > 0){ DataLine += ";VALUE="; DataLine += ExcludeDateDataValue[ExcludeDateDataSeek]; } if (ExcludeDateDataTokens[ExcludeDateDataSeek].size() > 0){ DataLine += ";"; DataLine += ExcludeDateDataTokens[ExcludeDateDataSeek]; } DataLine += ":"; DataLine += ExcludeDateData[ExcludeDateDataSeek]; DataLine += "\n"; DataLineProcessed = OutputText(&DataLine); *SaveData += DataLineProcessed; DataLine.clear(); DataLineProcessed.clear(); } } // Process the RELATED-TO value. if (RelatedToData.size() > 0){ for (int RequestToDataSeek = 0; RequestToDataSeek < RelatedToData.size(); RequestToDataSeek++){ DataLine += "RELATED-TO"; if (RelatedToDataRelationType[RequestToDataSeek].size() > 0){ DataLine += ";RELTYPE="; DataLine += RelatedToDataRelationType[RequestToDataSeek]; } if (RelatedToDataTokens[RequestToDataSeek].size() > 0){ DataLine += ";"; DataLine += RelatedToDataTokens[RequestToDataSeek]; } DataLine += ":"; DataLine += RelatedToData[RequestToDataSeek]; DataLine += "\n"; DataLineProcessed = OutputText(&DataLine); *SaveData += DataLineProcessed; DataLine.clear(); DataLineProcessed.clear(); } } // Process the RDATE value. if (RecurranceDateData.size() > 0){ for (int RecurranceDateDataSeek = 0; RecurranceDateDataSeek < RecurranceDateData.size(); RecurranceDateDataSeek++){ DataLine += "RDATE"; if (RecurranceDateDataValue[RecurranceDateDataSeek].size() > 0){ DataLine += ";VALUE="; DataLine += RecurranceDateDataValue[RecurranceDateDataSeek]; } if (RecurranceDateDataTimeZoneParam[RecurranceDateDataSeek].size() > 0){ DataLine += ";TZID="; DataLine += RecurranceDateDataTimeZoneParam[RecurranceDateDataSeek]; } if (RecurranceDateDataTokens[RecurranceDateDataSeek].size() > 0){ DataLine += ";"; DataLine += RecurranceDateDataTokens[RecurranceDateDataSeek]; } DataLine += ":"; DataLine += RecurranceDateData[RecurranceDateDataSeek]; DataLine += "\n"; DataLineProcessed = OutputText(&DataLine); *SaveData += DataLineProcessed; DataLine.clear(); DataLineProcessed.clear(); } } // Process the REQUEST-STATUS value. if (RequestStatusData.size() > 0){ for (int RequestStatusDataSeek = 0; RequestStatusDataSeek < RequestStatusData.size(); RequestStatusDataSeek++){ DataLine += "REQUEST-STATUS"; if (RequestStatusLanguage[RequestStatusDataSeek].size() > 0){ DataLine += ";LANGUAGE="; DataLine += RequestStatusLanguage[RequestStatusDataSeek]; } if (RequestStatusTokens[RequestStatusDataSeek].size() > 0){ DataLine += ";"; DataLine += RequestStatusTokens[RequestStatusDataSeek]; } DataLine += ":"; DataLine += RequestStatusData[RequestStatusDataSeek]; DataLine += "\n"; DataLineProcessed = OutputText(&DataLine); *SaveData += DataLineProcessed; DataLine.clear(); DataLineProcessed.clear(); } } // Process the X-Token values. if (XTokensData.size() > 0){ for (int XTokenSeek = 0; XTokenSeek < XTokensData.size(); XTokenSeek++){ DataLine += XTokensDataTokens[XTokenSeek]; DataLine += ":"; DataLine += XTokensData[XTokenSeek]; DataLine += "\n"; DataLineProcessed = OutputText(&DataLine); *SaveData += DataLineProcessed; DataLine.clear(); DataLineProcessed.clear(); } } *SaveData += "END:VJOURNAL\n"; }