1 // CalendarFreeBusy-Save.cpp - CalendarFreeBusy 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 "CalendarFreeBusy.h"
23 void CalendarFreeBusyObject::SaveObjectData(string *SaveData){
26 string DataLineProcessed = "";
28 *SaveData += "BEGIN:VFREEBUSY\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 CONTACT value.
88 if (ContactList.size() > 0){
90 if (ContactList[0].size() > 0){
92 DataLine += "CONTACT";
94 if (ContactListAltRep[0].size() > 0){
96 DataLine += ";ALTREP=\"";
97 DataLine += ContactListAltRep[0];
102 if (ContactListLanguage[0].size() > 0){
104 DataLine += ";LANGUAGE=";
105 DataLine += ContactListLanguage[0];
109 if (ContactListTokens[0].size() > 0){
112 DataLine += ContactListTokens[0];
117 DataLine += ContactList[0];
120 DataLineProcessed = OutputText(&DataLine);
122 *SaveData += DataLineProcessed;
125 DataLineProcessed.clear();
131 // Process the DTSTART.
133 if (DateTimeStartData.size() > 0){
135 DataLine += "DTSTART";
137 if (DateTimeStartDataValue.size() > 0){
139 DataLine += ";VALUE=";
140 DataLine += DateTimeStartDataValue;
144 if (DateTimeStartDataTimeZoneID.size() > 0){
146 DataLine += ";TZID=";
147 DataLine += DateTimeStartDataTimeZoneID;
151 if (DateTimeStartDataTokens.size() > 0){
154 DataLine += DateTimeStartDataTokens;
159 DataLine += DateTimeStartData;
162 DataLineProcessed = OutputText(&DataLine);
164 *SaveData += DataLineProcessed;
167 DataLineProcessed.clear();
171 // Process the DTEND.
173 if (DateTimeEndData.size() > 0){
177 if (DateTimeEndDataValue.size() > 0){
179 DataLine += ";VALUE=";
180 DataLine += DateTimeEndDataValue;
184 if (DateTimeEndDataTimeZoneID.size() > 0){
186 DataLine += ";TZID=";
187 DataLine += DateTimeEndDataTimeZoneID;
191 if (DateTimeEndDataTokens.size() > 0){
194 DataLine += DateTimeEndDataTokens;
199 DataLine += DateTimeEndData;
202 DataLineProcessed = OutputText(&DataLine);
204 *SaveData += DataLineProcessed;
207 DataLineProcessed.clear();
211 // Process the ORGANIZER value.
213 if (OrganiserData.size() > 0){
215 DataLine += "ORGANIZER";
217 if (OrganiserDataCommonName.size() > 0){
220 DataLine += OrganiserDataCommonName;
224 if (OrganiserDataDirectoryEntry.size() > 0){
226 DataLine += ";DIR=\"";
227 DataLine += OrganiserDataDirectoryEntry;
232 if (OrganiserDataSentByParam.size() > 0){
234 DataLine += ";SENT-BY=\"";
235 DataLine += OrganiserDataSentByParam;
240 if (OrganiserDataLanguage.size() > 0){
242 DataLine += ";LANGUAGE=";
243 DataLine += OrganiserDataLanguage;
247 if (OrganiserDataTokens.size() > 0){
250 DataLine += OrganiserDataTokens;
255 DataLine += OrganiserData;
258 DataLineProcessed = OutputText(&DataLine);
260 *SaveData += DataLineProcessed;
263 DataLineProcessed.clear();
267 // Process the URL value.
269 if (URLData.size() > 0){
273 if (URLDataTokens.size() > 0){
276 DataLine += URLDataTokens;
284 DataLineProcessed = OutputText(&DataLine);
286 *SaveData += DataLineProcessed;
289 DataLineProcessed.clear();
293 // Process the ATTENDEE value.
295 if (AttendeeList.size() > 0){
297 for (int AttendeeListSeek = 0; AttendeeListSeek < AttendeeList.size();
300 DataLine += "ATTENDEE";
302 if (AttendeeListMember[AttendeeListSeek].size() > 0){
304 DataLine += ";MEMBER=\"";
305 DataLine += AttendeeListMember[AttendeeListSeek];
310 if (AttendeeListDelegatedFrom[AttendeeListSeek].size() > 0){
312 DataLine += ";DELEGATED-FROM=\"";
313 DataLine += AttendeeListDelegatedFrom[AttendeeListSeek];
318 if (AttendeeListDelegatedTo[AttendeeListSeek].size() > 0){
320 DataLine += ";DELEGATED-TO=\"";
321 DataLine += AttendeeListDelegatedTo[AttendeeListSeek];
326 if (AttendeeListRole[AttendeeListSeek].size() > 0){
328 DataLine += ";ROLE=";
329 DataLine += AttendeeListRole[AttendeeListSeek];
333 if (AttendeeListRSVP[AttendeeListSeek].size() > 0){
335 DataLine += ";RSVP=";
336 DataLine += AttendeeListRSVP[AttendeeListSeek];
340 if (AttendeeListDirectoryEntry[AttendeeListSeek].size() > 0){
342 DataLine += ";DIR=\"";
343 DataLine += AttendeeListDirectoryEntry[AttendeeListSeek];
348 if (AttendeeListSentBy[AttendeeListSeek].size() > 0){
350 DataLine += ";SENT-BY=\"";
351 DataLine += AttendeeListSentBy[AttendeeListSeek];
356 if (AttendeeListCommonName[AttendeeListSeek].size() > 0){
358 DataLine += ";CN=\"";
359 DataLine += AttendeeListCommonName[AttendeeListSeek];
364 if (AttendeeListCalendarUserType[AttendeeListSeek].size() > 0){
366 DataLine += ";CUTYPE=";
367 DataLine += AttendeeListCalendarUserType[AttendeeListSeek];
371 if (AttendeeListParticipationStatus[AttendeeListSeek].size() > 0){
373 DataLine += ";PARTSTAT=";
374 DataLine += AttendeeListParticipationStatus[AttendeeListSeek];
378 if (AttendeeListLanguage[AttendeeListSeek].size() > 0){
380 DataLine += ";LANGUAGE=";
381 DataLine += AttendeeListLanguage[AttendeeListSeek];
385 if (AttendeeListTokens[AttendeeListSeek].size() > 0){
388 DataLine += AttendeeListTokens[AttendeeListSeek];
393 DataLine += AttendeeList[AttendeeListSeek];
396 DataLineProcessed = OutputText(&DataLine);
398 *SaveData += DataLineProcessed;
401 DataLineProcessed.clear();
407 // Process the COMMENT value.
409 if (CommentList.size() > 0){
411 for (int CommentListSeek = 0; CommentListSeek < CommentList.size();
414 DataLine += "COMMENT";
416 if (CommentListAltRep[CommentListSeek].size() > 0){
418 DataLine += ";ALTREP=\"";
419 DataLine += CommentListAltRep[CommentListSeek];
424 if (CommentListLanguage[CommentListSeek].size() > 0){
426 DataLine += ";LANGUAGE=";
427 DataLine += CommentListLanguage[CommentListSeek];
431 if (CommentListTokens[CommentListSeek].size() > 0){
434 DataLine += CommentListTokens[CommentListSeek];
439 DataLine += CommentList[CommentListSeek];
442 DataLineProcessed = OutputText(&DataLine);
444 *SaveData += DataLineProcessed;
447 DataLineProcessed.clear();
453 // Process the FREEBUSY value.
455 if (FreeBusyList.size() > 0){
457 for (int FreeBusyListSeek = 0; FreeBusyListSeek < FreeBusyList.size();
460 DataLine += "FREEBUSY";
462 if (FreeBusyListType[FreeBusyListSeek].size() > 0){
464 DataLine += ";FBTYPE=";
465 DataLine += FreeBusyListType[FreeBusyListSeek];
469 if (FreeBusyListTokens[FreeBusyListSeek].size() > 0){
472 DataLine += FreeBusyListTokens[FreeBusyListSeek];
477 DataLine += FreeBusyList[FreeBusyListSeek];
480 DataLineProcessed = OutputText(&DataLine);
482 *SaveData += DataLineProcessed;
485 DataLineProcessed.clear();
491 // Process the REQUEST-STATUS value.
493 if (RequestStatusData.size() > 0){
495 for (int RequestStatusDataSeek = 0; RequestStatusDataSeek < RequestStatusData.size();
496 RequestStatusDataSeek++){
498 DataLine += "REQUEST-STATUS";
500 if (RequestStatusLanguage[RequestStatusDataSeek].size() > 0){
502 DataLine += ";LANGUAGE=";
503 DataLine += RequestStatusLanguage[RequestStatusDataSeek];
507 if (RequestStatusTokens[RequestStatusDataSeek].size() > 0){
510 DataLine += RequestStatusTokens[RequestStatusDataSeek];
515 DataLine += RequestStatusData[RequestStatusDataSeek];
518 DataLineProcessed = OutputText(&DataLine);
520 *SaveData += DataLineProcessed;
523 DataLineProcessed.clear();
529 // Process the X-Token values.
531 if (XTokensData.size() > 0){
533 for (int XTokenSeek = 0; XTokenSeek < XTokensData.size();
536 DataLine += XTokensDataTokens[XTokenSeek];
538 DataLine += XTokensData[XTokenSeek];
541 DataLineProcessed = OutputText(&DataLine);
543 *SaveData += DataLineProcessed;
546 DataLineProcessed.clear();
552 *SaveData += "END:VFREEBUSY\n";