1 // Calendartimezone-Save.cpp - Calendartimezone 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 "CalendarTimezone.h"
23 void CalendarTimezoneObject::SaveObjectData(string *saveData){
26 string dataLineProcessed = "";
28 *saveData += "BEGIN:VTIMEZONE\n";
32 if (timeZoneData.size() > 0){
34 if (timeZoneDataTokens.size() > 0){
37 dataLine += timeZoneDataTokens;
46 dataLine += timeZoneData;
49 dataLineProcessed = OutputText(&dataLine);
51 *saveData += dataLineProcessed;
54 dataLineProcessed.clear();
58 // Process the LAST-MODIFIED value.
60 if (lastModifiedData.size() > 0){
62 if (lastModifiedTokens.size() > 0){
64 dataLine += "LAST-MODIFIED;";
65 dataLine += lastModifiedTokens;
69 dataLine += "LAST-MODIFIED";
74 dataLine += lastModifiedData;
77 dataLineProcessed = OutputText(&dataLine);
79 *saveData += dataLineProcessed;
82 dataLineProcessed.clear();
86 // Process the TZURL value.
88 if (timeZoneURLData.size() > 0){
90 if (timeZoneURLTokens.size() > 0){
93 dataLine += timeZoneURLTokens;
102 dataLine += timeZoneURLData;
105 dataLineProcessed = OutputText(&dataLine);
107 *saveData += dataLineProcessed;
110 dataLineProcessed.clear();
114 // Process Standard timezones.
116 if (timezoneStandardCollection.size() > 0){
118 for (int timezoneStandardSeek = 0; timezoneStandardSeek < timezoneStandardCollection.size();
119 timezoneStandardSeek++){
121 *saveData += "BEGIN:STANDARD\n";
123 // Process the DTSTART value.
125 if (timezoneStandardCollection[timezoneStandardSeek].dateTimeStartData.size() > 0){
127 if (timezoneStandardCollection[timezoneStandardSeek].dateTimeStartTokens.size() > 0){
129 dataLine += "DTSTART;";
130 dataLine += timezoneStandardCollection[timezoneStandardSeek].dateTimeStartTokens;
134 dataLine += "DTSTART";
139 dataLine += timezoneStandardCollection[timezoneStandardSeek].dateTimeStartData;
142 dataLineProcessed = OutputText(&dataLine);
144 *saveData += dataLineProcessed;
147 dataLineProcessed.clear();
151 // Process the TZOFFSETFROM value.
153 if (timezoneStandardCollection[timezoneStandardSeek].timeZoneOffsetFromData.size() > 0){
155 if (timezoneStandardCollection[timezoneStandardSeek].timeZoneOffsetFromTokens.size() > 0){
157 dataLine += "TZOFFSETFROM;";
158 dataLine += timezoneStandardCollection[timezoneStandardSeek].timeZoneOffsetFromTokens;
162 dataLine += "TZOFFSETFROM";
167 dataLine += timezoneStandardCollection[timezoneStandardSeek].timeZoneOffsetFromData;
170 dataLineProcessed = OutputText(&dataLine);
172 *saveData += dataLineProcessed;
175 dataLineProcessed.clear();
179 // Process the TZOFFSETTO value.
181 if (timezoneStandardCollection[timezoneStandardSeek].timeZoneOffsetToData.size() > 0){
183 if (timezoneStandardCollection[timezoneStandardSeek].timeZoneOffsetToTokens.size() > 0){
185 dataLine += "TZOFFSETTO;";
186 dataLine += timezoneStandardCollection[timezoneStandardSeek].timeZoneOffsetToTokens;
190 dataLine += "TZOFFSETTO";
195 dataLine += timezoneStandardCollection[timezoneStandardSeek].timeZoneOffsetToData;
198 dataLineProcessed = OutputText(&dataLine);
200 *saveData += dataLineProcessed;
203 dataLineProcessed.clear();
207 // Process the RRULE value.
209 if (timezoneStandardCollection[timezoneStandardSeek].recurranceRuleData.size() > 0){
211 if (timezoneStandardCollection[timezoneStandardSeek].recurranceRuleDataTokens.size() > 0){
213 dataLine += "RRULE;";
214 dataLine += timezoneStandardCollection[timezoneStandardSeek].recurranceRuleDataTokens;
223 dataLine += timezoneStandardCollection[timezoneStandardSeek].recurranceRuleData;
226 dataLineProcessed = OutputText(&dataLine);
228 *saveData += dataLineProcessed;
231 dataLineProcessed.clear();
235 // Process the COMMENT value.
237 if (timezoneStandardCollection[timezoneStandardSeek].commentList.size() > 0){
239 for (int commentListSeek = 0; commentListSeek < timezoneStandardCollection[timezoneStandardSeek].commentList.size();
242 dataLine += "COMMENT";
244 if (timezoneStandardCollection[timezoneStandardSeek].commentListAltRep[commentListSeek].size() > 0){
246 dataLine += ";ALTREP=\"";
247 dataLine += timezoneStandardCollection[timezoneStandardSeek].commentListAltRep[commentListSeek];
252 if (timezoneStandardCollection[timezoneStandardSeek].commentListLanguage[commentListSeek].size() > 0){
254 dataLine += ";LANGUAGE=";
255 dataLine += timezoneStandardCollection[timezoneStandardSeek].commentListLanguage[commentListSeek];
259 if (timezoneStandardCollection[timezoneStandardSeek].commentListTokens[commentListSeek].size() > 0){
262 dataLine += timezoneStandardCollection[timezoneStandardSeek].commentListTokens[commentListSeek];
267 dataLine += timezoneStandardCollection[timezoneStandardSeek].commentList[commentListSeek];
270 dataLineProcessed = OutputText(&dataLine);
272 *saveData += dataLineProcessed;
275 dataLineProcessed.clear();
281 // Process the RDATE value.
283 if (timezoneStandardCollection[timezoneStandardSeek].recurranceDateData.size() > 0){
285 for (int recurranceDataSeek = 0; recurranceDataSeek < timezoneStandardCollection[timezoneStandardSeek].recurranceDateData.size();
286 recurranceDataSeek++){
290 if (timezoneStandardCollection[timezoneStandardSeek].recurranceDateDataValue[recurranceDataSeek].size() > 0){
292 dataLine += ";VALUE=";
293 dataLine += timezoneStandardCollection[timezoneStandardSeek].recurranceDateDataValue[recurranceDataSeek];
297 if (timezoneStandardCollection[timezoneStandardSeek].recurranceDateDataTimeZoneParam[recurranceDataSeek].size() > 0){
299 dataLine += ";TZID=";
300 dataLine += timezoneStandardCollection[timezoneStandardSeek].recurranceDateDataTimeZoneParam[recurranceDataSeek];
304 if (timezoneStandardCollection[timezoneStandardSeek].recurranceDateDataTokens[recurranceDataSeek].size() > 0){
307 dataLine += timezoneStandardCollection[timezoneStandardSeek].recurranceDateDataTokens[recurranceDataSeek];
312 dataLine += timezoneStandardCollection[timezoneStandardSeek].recurranceDateData[recurranceDataSeek];
315 dataLineProcessed = OutputText(&dataLine);
317 *saveData += dataLineProcessed;
320 dataLineProcessed.clear();
326 // Process the TZNAME value.
328 if (timezoneStandardCollection[timezoneStandardSeek].timeZoneNameData.size() > 0){
330 for (int timezoneNameSeek = 0; timezoneNameSeek < timezoneStandardCollection[timezoneStandardSeek].timeZoneNameData.size();
333 dataLine += "TZNAME";
335 if (timezoneStandardCollection[timezoneStandardSeek].timeZoneNameLanguage[timezoneNameSeek].size() > 0){
337 dataLine += ";LANGUAGE=";
338 dataLine += timezoneStandardCollection[timezoneStandardSeek].timeZoneNameLanguage[timezoneNameSeek];
342 if (timezoneStandardCollection[timezoneStandardSeek].timeZoneNameTokens[timezoneNameSeek].size() > 0){
345 dataLine += timezoneStandardCollection[timezoneStandardSeek].timeZoneNameTokens[timezoneNameSeek];
350 dataLine += timezoneStandardCollection[timezoneStandardSeek].timeZoneNameData[timezoneNameSeek];
353 dataLineProcessed = OutputText(&dataLine);
355 *saveData += dataLineProcessed;
358 dataLineProcessed.clear();
364 // Process data from X-*
366 if (timezoneStandardCollection[timezoneStandardSeek].xTokensData.size() > 0){
368 for (int timezoneXTokenSeek = 0; timezoneXTokenSeek < timezoneStandardCollection[timezoneStandardSeek].xTokensData.size();
369 timezoneXTokenSeek++){
371 dataLine += timezoneStandardCollection[timezoneStandardSeek].xTokensDataTokens[timezoneXTokenSeek];
373 dataLine += timezoneStandardCollection[timezoneStandardSeek].xTokensData[timezoneXTokenSeek];
376 dataLineProcessed = OutputText(&dataLine);
378 *saveData += dataLineProcessed;
381 dataLineProcessed.clear();
387 *saveData += "END:STANDARD\n";
393 // Process Daylight timezones.
395 if (timezoneDaylightCollection.size() > 0){
397 for (int timezoneDaylightSeek = 0; timezoneDaylightSeek < timezoneDaylightCollection.size();
398 timezoneDaylightSeek++){
400 *saveData += "BEGIN:DAYLIGHT\n";
402 // Process the DTSTART value.
404 if (timezoneDaylightCollection[timezoneDaylightSeek].dateTimeStartData.size() > 0){
406 if (timezoneStandardCollection[timezoneDaylightSeek].dateTimeStartTokens.size() > 0){
408 dataLine += "DTSTART;";
409 dataLine += timezoneDaylightCollection[timezoneDaylightSeek].dateTimeStartTokens;
413 dataLine += "DTSTART";
418 dataLine += timezoneDaylightCollection[timezoneDaylightSeek].dateTimeStartData;
421 dataLineProcessed = OutputText(&dataLine);
423 *saveData += dataLineProcessed;
426 dataLineProcessed.clear();
430 // Process the TZOFFSETFROM value.
432 if (timezoneDaylightCollection[timezoneDaylightSeek].timeZoneOffsetFromData.size() > 0){
434 if (timezoneDaylightCollection[timezoneDaylightSeek].timeZoneOffsetFromTokens.size() > 0){
436 dataLine += "TZOFFSETFROM;";
437 dataLine += timezoneDaylightCollection[timezoneDaylightSeek].timeZoneOffsetFromTokens;
441 dataLine += "TZOFFSETFROM";
446 dataLine += timezoneDaylightCollection[timezoneDaylightSeek].timeZoneOffsetFromData;
449 dataLineProcessed = OutputText(&dataLine);
451 *saveData += dataLineProcessed;
454 dataLineProcessed.clear();
458 // Process the TZOFFSETTO value.
460 if (timezoneDaylightCollection[timezoneDaylightSeek].timeZoneOffsetToData.size() > 0){
462 if (timezoneDaylightCollection[timezoneDaylightSeek].timeZoneOffsetToTokens.size() > 0){
464 dataLine += "TZOFFSETTO;";
465 dataLine += timezoneDaylightCollection[timezoneDaylightSeek].timeZoneOffsetToTokens;
469 dataLine += "TZOFFSETTO";
474 dataLine += timezoneDaylightCollection[timezoneDaylightSeek].timeZoneOffsetToData;
477 dataLineProcessed = OutputText(&dataLine);
479 *saveData += dataLineProcessed;
482 dataLineProcessed.clear();
486 // Process the RRULE value.
488 if (timezoneDaylightCollection[timezoneDaylightSeek].recurranceRuleData.size() > 0){
490 if (timezoneDaylightCollection[timezoneDaylightSeek].recurranceRuleDataTokens.size() > 0){
492 dataLine += "RRULE;";
493 dataLine += timezoneDaylightCollection[timezoneDaylightSeek].recurranceRuleDataTokens;
502 dataLine += timezoneDaylightCollection[timezoneDaylightSeek].recurranceRuleData;
505 dataLineProcessed = OutputText(&dataLine);
507 *saveData += dataLineProcessed;
510 dataLineProcessed.clear();
514 // Process the COMMENT value.
516 if (timezoneDaylightCollection[timezoneDaylightSeek].commentList.size() > 0){
518 for (int commentListSeek = 0; commentListSeek < timezoneDaylightCollection[timezoneDaylightSeek].commentList.size();
521 dataLine += "COMMENT";
523 if (timezoneDaylightCollection[timezoneDaylightSeek].commentListAltRep[commentListSeek].size() > 0){
525 dataLine += ";ALTREP=\"";
526 dataLine += timezoneDaylightCollection[timezoneDaylightSeek].commentListAltRep[commentListSeek];
531 if (timezoneDaylightCollection[timezoneDaylightSeek].commentListLanguage[commentListSeek].size() > 0){
533 dataLine += ";LANGUAGE=";
534 dataLine += timezoneDaylightCollection[timezoneDaylightSeek].commentListLanguage[commentListSeek];
538 if (timezoneDaylightCollection[timezoneDaylightSeek].commentListTokens[commentListSeek].size() > 0){
541 dataLine += timezoneDaylightCollection[timezoneDaylightSeek].commentListTokens[commentListSeek];
546 dataLine += timezoneDaylightCollection[timezoneDaylightSeek].commentList[commentListSeek];
549 dataLineProcessed = OutputText(&dataLine);
551 *saveData += dataLineProcessed;
554 dataLineProcessed.clear();
560 // Process the RDATE value.
562 if (timezoneDaylightCollection[timezoneDaylightSeek].recurranceDateData.size() > 0){
564 for (int recurranceDataSeek = 0; recurranceDataSeek < timezoneDaylightCollection[timezoneDaylightSeek].recurranceDateData.size();
565 recurranceDataSeek++){
569 if (timezoneDaylightCollection[timezoneDaylightSeek].recurranceDateDataValue[recurranceDataSeek].size() > 0){
571 dataLine += ";VALUE=";
572 dataLine += timezoneDaylightCollection[timezoneDaylightSeek].recurranceDateDataValue[recurranceDataSeek];
576 if (timezoneDaylightCollection[timezoneDaylightSeek].recurranceDateDataTimeZoneParam[recurranceDataSeek].size() > 0){
578 dataLine += ";TZID=";
579 dataLine += timezoneDaylightCollection[timezoneDaylightSeek].recurranceDateDataTimeZoneParam[recurranceDataSeek];
583 if (timezoneDaylightCollection[timezoneDaylightSeek].recurranceDateDataTokens[recurranceDataSeek].size() > 0){
586 dataLine += timezoneDaylightCollection[timezoneDaylightSeek].recurranceDateDataTokens[recurranceDataSeek];
591 dataLine += timezoneDaylightCollection[timezoneDaylightSeek].recurranceDateData[recurranceDataSeek];
594 dataLineProcessed = OutputText(&dataLine);
596 *saveData += dataLineProcessed;
599 dataLineProcessed.clear();
605 // Process the TZNAME value.
607 if (timezoneDaylightCollection[timezoneDaylightSeek].timeZoneNameData.size() > 0){
609 for (int timezoneNameSeek = 0; timezoneNameSeek < timezoneDaylightCollection[timezoneDaylightSeek].timeZoneNameData.size();
612 dataLine += "TZNAME";
614 if (timezoneDaylightCollection[timezoneDaylightSeek].timeZoneNameLanguage[timezoneNameSeek].size() > 0){
616 dataLine += ";LANGUAGE=";
617 dataLine += timezoneDaylightCollection[timezoneDaylightSeek].timeZoneNameLanguage[timezoneNameSeek];
621 if (timezoneDaylightCollection[timezoneDaylightSeek].timeZoneNameTokens[timezoneNameSeek].size() > 0){
624 dataLine += timezoneDaylightCollection[timezoneDaylightSeek].timeZoneNameTokens[timezoneNameSeek];
629 dataLine += timezoneDaylightCollection[timezoneDaylightSeek].timeZoneNameData[timezoneNameSeek];
632 dataLineProcessed = OutputText(&dataLine);
634 *saveData += dataLineProcessed;
637 dataLineProcessed.clear();
643 // Process data from X-*
645 if (timezoneDaylightCollection[timezoneDaylightSeek].xTokensData.size() > 0){
647 for (int timezoneXTokenSeek = 0; timezoneXTokenSeek < timezoneDaylightCollection[timezoneDaylightSeek].xTokensData.size();
648 timezoneXTokenSeek++){
650 dataLine += timezoneDaylightCollection[timezoneDaylightSeek].xTokensDataTokens[timezoneXTokenSeek];
652 dataLine += timezoneDaylightCollection[timezoneDaylightSeek].xTokensData[timezoneXTokenSeek];
655 dataLineProcessed = OutputText(&dataLine);
657 *saveData += dataLineProcessed;
660 dataLineProcessed.clear();
666 *saveData += "END:DAYLIGHT\n";
672 *saveData += "END:VTIMEZONE\n";