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