// Calendartimezone-Save.cpp - Calendartimezone 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 "Calendartimezone.h" using namespace std; void CalendartimezoneObject::SaveObjectData(string *saveData){ string dataLine = ""; string dataLineProcessed = ""; *saveData += "BEGIN:VTIMEZONE\n"; // Process the TZID. if (timeZoneData.size() > 0){ if (timeZoneDataTokens.size() > 0){ dataLine += "TZID;"; dataLine += timeZoneDataTokens; } else { dataLine += "TZID"; } dataLine += ":"; dataLine += timeZoneData; 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 TZURL value. if (timeZoneURLData.size() > 0){ if (timeZoneURLTokens.size() > 0){ dataLine += "TZURL;"; dataLine += timeZoneURLTokens; } else { dataLine += "TZURL"; } dataLine += ":"; dataLine += timeZoneURLData; dataLine += "\n"; dataLineProcessed = OutputText(&dataLine); *saveData += dataLineProcessed; dataLine.clear(); dataLineProcessed.clear(); } // Process Standard timezones. if (timezoneStandardCollection.size() > 0){ for (int timezoneStandardSeek = 0; timezoneStandardSeek < timezoneStandardCollection.size(); timezoneStandardSeek++){ *saveData += "BEGIN:STANDARD\n"; // Process the DTSTART value. if (timezoneStandardCollection[timezoneStandardSeek].dateTimeStartData.size() > 0){ if (timezoneStandardCollection[timezoneStandardSeek].dateTimeStartTokens.size() > 0){ dataLine += "DTSTART;"; dataLine += timezoneStandardCollection[timezoneStandardSeek].dateTimeStartTokens; } else { dataLine += "DTSTART"; } dataLine += ":"; dataLine += timezoneStandardCollection[timezoneStandardSeek].dateTimeStartData; dataLine += "\n"; dataLineProcessed = OutputText(&dataLine); *saveData += dataLineProcessed; dataLine.clear(); dataLineProcessed.clear(); } // Process the TZOFFSETFROM value. if (timezoneStandardCollection[timezoneStandardSeek].timeZoneOffsetFromData.size() > 0){ if (timezoneStandardCollection[timezoneStandardSeek].timeZoneOffsetFromTokens.size() > 0){ dataLine += "TZOFFSETFROM;"; dataLine += timezoneStandardCollection[timezoneStandardSeek].timeZoneOffsetFromTokens; } else { dataLine += "TZOFFSETFROM"; } dataLine += ":"; dataLine += timezoneStandardCollection[timezoneStandardSeek].timeZoneOffsetFromData; dataLine += "\n"; dataLineProcessed = OutputText(&dataLine); *saveData += dataLineProcessed; dataLine.clear(); dataLineProcessed.clear(); } // Process the TZOFFSETTO value. if (timezoneStandardCollection[timezoneStandardSeek].timeZoneOffsetToData.size() > 0){ if (timezoneStandardCollection[timezoneStandardSeek].timeZoneOffsetToTokens.size() > 0){ dataLine += "TZOFFSETTO;"; dataLine += timezoneStandardCollection[timezoneStandardSeek].timeZoneOffsetToTokens; } else { dataLine += "TZOFFSETTO"; } dataLine += ":"; dataLine += timezoneStandardCollection[timezoneStandardSeek].timeZoneOffsetToData; dataLine += "\n"; dataLineProcessed = OutputText(&dataLine); *saveData += dataLineProcessed; dataLine.clear(); dataLineProcessed.clear(); } // Process the RRULE value. if (timezoneStandardCollection[timezoneStandardSeek].recurranceRuleData.size() > 0){ if (timezoneStandardCollection[timezoneStandardSeek].recurranceRuleDataTokens.size() > 0){ dataLine += "RRULE;"; dataLine += timezoneStandardCollection[timezoneStandardSeek].recurranceRuleDataTokens; } else { dataLine += "RRULE"; } dataLine += ":"; dataLine += timezoneStandardCollection[timezoneStandardSeek].recurranceRuleData; dataLine += "\n"; dataLineProcessed = OutputText(&dataLine); *saveData += dataLineProcessed; dataLine.clear(); dataLineProcessed.clear(); } // Process the COMMENT value. if (timezoneStandardCollection[timezoneStandardSeek].commentList.size() > 0){ for (int commentListSeek = 0; commentListSeek < timezoneStandardCollection[timezoneStandardSeek].commentList.size(); commentListSeek++){ dataLine += "COMMENT"; if (timezoneStandardCollection[timezoneStandardSeek].commentListAltRep[commentListSeek].size() > 0){ dataLine += ";ALTREP=\""; dataLine += timezoneStandardCollection[timezoneStandardSeek].commentListAltRep[commentListSeek]; dataLine += "\""; } if (timezoneStandardCollection[timezoneStandardSeek].commentListLanguage[commentListSeek].size() > 0){ dataLine += ";LANGUAGE="; dataLine += timezoneStandardCollection[timezoneStandardSeek].commentListLanguage[commentListSeek]; } if (timezoneStandardCollection[timezoneStandardSeek].commentListTokens[commentListSeek].size() > 0){ dataLine += ";"; dataLine += timezoneStandardCollection[timezoneStandardSeek].commentListTokens[commentListSeek]; } dataLine += ":"; dataLine += timezoneStandardCollection[timezoneStandardSeek].commentList[commentListSeek]; dataLine += "\n"; dataLineProcessed = OutputText(&dataLine); *saveData += dataLineProcessed; dataLine.clear(); dataLineProcessed.clear(); } } // Process the RDATE value. if (timezoneStandardCollection[timezoneStandardSeek].recurranceDateData.size() > 0){ for (int recurranceDataSeek = 0; recurranceDataSeek < timezoneStandardCollection[timezoneStandardSeek].recurranceDateData.size(); recurranceDataSeek++){ dataLine += "RDATE"; if (timezoneStandardCollection[timezoneStandardSeek].recurranceDateDataValue[recurranceDataSeek].size() > 0){ dataLine += ";VALUE="; dataLine += timezoneStandardCollection[timezoneStandardSeek].recurranceDateDataValue[recurranceDataSeek]; } if (timezoneStandardCollection[timezoneStandardSeek].recurranceDateDataTimeZoneParam[recurranceDataSeek].size() > 0){ dataLine += ";TZID="; dataLine += timezoneStandardCollection[timezoneStandardSeek].recurranceDateDataTimeZoneParam[recurranceDataSeek]; } if (timezoneStandardCollection[timezoneStandardSeek].recurranceDateDataTokens[recurranceDataSeek].size() > 0){ dataLine += ";"; dataLine += timezoneStandardCollection[timezoneStandardSeek].recurranceDateDataTokens[recurranceDataSeek]; } dataLine += ":"; dataLine += timezoneStandardCollection[timezoneStandardSeek].recurranceDateData[recurranceDataSeek]; dataLine += "\n"; dataLineProcessed = OutputText(&dataLine); *saveData += dataLineProcessed; dataLine.clear(); dataLineProcessed.clear(); } } // Process the TZNAME value. if (timezoneStandardCollection[timezoneStandardSeek].timeZoneNameData.size() > 0){ for (int timezoneNameSeek = 0; timezoneNameSeek < timezoneStandardCollection[timezoneStandardSeek].timeZoneNameData.size(); timezoneNameSeek++){ dataLine += "TZNAME"; if (timezoneStandardCollection[timezoneStandardSeek].timeZoneNameLanguage[timezoneNameSeek].size() > 0){ dataLine += ";LANGUAGE="; dataLine += timezoneStandardCollection[timezoneStandardSeek].timeZoneNameLanguage[timezoneNameSeek]; } if (timezoneStandardCollection[timezoneStandardSeek].timeZoneNameTokens[timezoneNameSeek].size() > 0){ dataLine += ";"; dataLine += timezoneStandardCollection[timezoneStandardSeek].timeZoneNameTokens[timezoneNameSeek]; } dataLine += ":"; dataLine += timezoneStandardCollection[timezoneStandardSeek].timeZoneNameData[timezoneNameSeek]; dataLine += "\n"; dataLineProcessed = OutputText(&dataLine); *saveData += dataLineProcessed; dataLine.clear(); dataLineProcessed.clear(); } } // Process data from X-* if (timezoneStandardCollection[timezoneStandardSeek].xTokensData.size() > 0){ for (int timezoneXTokenSeek = 0; timezoneXTokenSeek < timezoneStandardCollection[timezoneStandardSeek].xTokensData.size(); timezoneXTokenSeek++){ dataLine += timezoneStandardCollection[timezoneStandardSeek].xTokensDataTokens[timezoneXTokenSeek]; dataLine += ":"; dataLine += timezoneStandardCollection[timezoneStandardSeek].xTokensData[timezoneXTokenSeek]; dataLine += "\n"; dataLineProcessed = OutputText(&dataLine); *saveData += dataLineProcessed; dataLine.clear(); dataLineProcessed.clear(); } } *saveData += "END:STANDARD\n"; } } // Process Daylight timezones. if (timezoneDaylightCollection.size() > 0){ for (int timezoneDaylightSeek = 0; timezoneDaylightSeek < timezoneDaylightCollection.size(); timezoneDaylightSeek++){ *saveData += "BEGIN:DAYLIGHT\n"; // Process the DTSTART value. if (timezoneDaylightCollection[timezoneDaylightSeek].dateTimeStartData.size() > 0){ if (timezoneStandardCollection[timezoneDaylightSeek].dateTimeStartTokens.size() > 0){ dataLine += "DTSTART;"; dataLine += timezoneDaylightCollection[timezoneDaylightSeek].dateTimeStartTokens; } else { dataLine += "DTSTART"; } dataLine += ":"; dataLine += timezoneDaylightCollection[timezoneDaylightSeek].dateTimeStartData; dataLine += "\n"; dataLineProcessed = OutputText(&dataLine); *saveData += dataLineProcessed; dataLine.clear(); dataLineProcessed.clear(); } // Process the TZOFFSETFROM value. if (timezoneDaylightCollection[timezoneDaylightSeek].timeZoneOffsetFromData.size() > 0){ if (timezoneDaylightCollection[timezoneDaylightSeek].timeZoneOffsetFromTokens.size() > 0){ dataLine += "TZOFFSETFROM;"; dataLine += timezoneDaylightCollection[timezoneDaylightSeek].timeZoneOffsetFromTokens; } else { dataLine += "TZOFFSETFROM"; } dataLine += ":"; dataLine += timezoneDaylightCollection[timezoneDaylightSeek].timeZoneOffsetFromData; dataLine += "\n"; dataLineProcessed = OutputText(&dataLine); *saveData += dataLineProcessed; dataLine.clear(); dataLineProcessed.clear(); } // Process the TZOFFSETTO value. if (timezoneDaylightCollection[timezoneDaylightSeek].timeZoneOffsetToData.size() > 0){ if (timezoneDaylightCollection[timezoneDaylightSeek].timeZoneOffsetToTokens.size() > 0){ dataLine += "TZOFFSETTO;"; dataLine += timezoneDaylightCollection[timezoneDaylightSeek].timeZoneOffsetToTokens; } else { dataLine += "TZOFFSETTO"; } dataLine += ":"; dataLine += timezoneDaylightCollection[timezoneDaylightSeek].timeZoneOffsetToData; dataLine += "\n"; dataLineProcessed = OutputText(&dataLine); *saveData += dataLineProcessed; dataLine.clear(); dataLineProcessed.clear(); } // Process the RRULE value. if (timezoneDaylightCollection[timezoneDaylightSeek].recurranceRuleData.size() > 0){ if (timezoneDaylightCollection[timezoneDaylightSeek].recurranceRuleDataTokens.size() > 0){ dataLine += "RRULE;"; dataLine += timezoneDaylightCollection[timezoneDaylightSeek].recurranceRuleDataTokens; } else { dataLine += "RRULE"; } dataLine += ":"; dataLine += timezoneDaylightCollection[timezoneDaylightSeek].recurranceRuleData; dataLine += "\n"; dataLineProcessed = OutputText(&dataLine); *saveData += dataLineProcessed; dataLine.clear(); dataLineProcessed.clear(); } // Process the COMMENT value. if (timezoneDaylightCollection[timezoneDaylightSeek].commentList.size() > 0){ for (int commentListSeek = 0; commentListSeek < timezoneDaylightCollection[timezoneDaylightSeek].commentList.size(); commentListSeek++){ dataLine += "COMMENT"; if (timezoneDaylightCollection[timezoneDaylightSeek].commentListAltRep[commentListSeek].size() > 0){ dataLine += ";ALTREP=\""; dataLine += timezoneDaylightCollection[timezoneDaylightSeek].commentListAltRep[commentListSeek]; dataLine += "\""; } if (timezoneDaylightCollection[timezoneDaylightSeek].commentListLanguage[commentListSeek].size() > 0){ dataLine += ";LANGUAGE="; dataLine += timezoneDaylightCollection[timezoneDaylightSeek].commentListLanguage[commentListSeek]; } if (timezoneDaylightCollection[timezoneDaylightSeek].commentListTokens[commentListSeek].size() > 0){ dataLine += ";"; dataLine += timezoneDaylightCollection[timezoneDaylightSeek].commentListTokens[commentListSeek]; } dataLine += ":"; dataLine += timezoneDaylightCollection[timezoneDaylightSeek].commentList[commentListSeek]; dataLine += "\n"; dataLineProcessed = OutputText(&dataLine); *saveData += dataLineProcessed; dataLine.clear(); dataLineProcessed.clear(); } } // Process the RDATE value. if (timezoneDaylightCollection[timezoneDaylightSeek].recurranceDateData.size() > 0){ for (int recurranceDataSeek = 0; recurranceDataSeek < timezoneDaylightCollection[timezoneDaylightSeek].recurranceDateData.size(); recurranceDataSeek++){ dataLine += "RDATE"; if (timezoneDaylightCollection[timezoneDaylightSeek].recurranceDateDataValue[recurranceDataSeek].size() > 0){ dataLine += ";VALUE="; dataLine += timezoneDaylightCollection[timezoneDaylightSeek].recurranceDateDataValue[recurranceDataSeek]; } if (timezoneDaylightCollection[timezoneDaylightSeek].recurranceDateDataTimeZoneParam[recurranceDataSeek].size() > 0){ dataLine += ";TZID="; dataLine += timezoneDaylightCollection[timezoneDaylightSeek].recurranceDateDataTimeZoneParam[recurranceDataSeek]; } if (timezoneDaylightCollection[timezoneDaylightSeek].recurranceDateDataTokens[recurranceDataSeek].size() > 0){ dataLine += ";"; dataLine += timezoneDaylightCollection[timezoneDaylightSeek].recurranceDateDataTokens[recurranceDataSeek]; } dataLine += ":"; dataLine += timezoneDaylightCollection[timezoneDaylightSeek].recurranceDateData[recurranceDataSeek]; dataLine += "\n"; dataLineProcessed = OutputText(&dataLine); *saveData += dataLineProcessed; dataLine.clear(); dataLineProcessed.clear(); } } // Process the TZNAME value. if (timezoneDaylightCollection[timezoneDaylightSeek].timeZoneNameData.size() > 0){ for (int timezoneNameSeek = 0; timezoneNameSeek < timezoneDaylightCollection[timezoneDaylightSeek].timeZoneNameData.size(); timezoneNameSeek++){ dataLine += "TZNAME"; if (timezoneDaylightCollection[timezoneDaylightSeek].timeZoneNameLanguage[timezoneNameSeek].size() > 0){ dataLine += ";LANGUAGE="; dataLine += timezoneDaylightCollection[timezoneDaylightSeek].timeZoneNameLanguage[timezoneNameSeek]; } if (timezoneDaylightCollection[timezoneDaylightSeek].timeZoneNameTokens[timezoneNameSeek].size() > 0){ dataLine += ";"; dataLine += timezoneDaylightCollection[timezoneDaylightSeek].timeZoneNameTokens[timezoneNameSeek]; } dataLine += ":"; dataLine += timezoneDaylightCollection[timezoneDaylightSeek].timeZoneNameData[timezoneNameSeek]; dataLine += "\n"; dataLineProcessed = OutputText(&dataLine); *saveData += dataLineProcessed; dataLine.clear(); dataLineProcessed.clear(); } } // Process data from X-* if (timezoneDaylightCollection[timezoneDaylightSeek].xTokensData.size() > 0){ for (int timezoneXTokenSeek = 0; timezoneXTokenSeek < timezoneDaylightCollection[timezoneDaylightSeek].xTokensData.size(); timezoneXTokenSeek++){ dataLine += timezoneDaylightCollection[timezoneDaylightSeek].xTokensDataTokens[timezoneXTokenSeek]; dataLine += ":"; dataLine += timezoneDaylightCollection[timezoneDaylightSeek].xTokensData[timezoneXTokenSeek]; dataLine += "\n"; dataLineProcessed = OutputText(&dataLine); *saveData += dataLineProcessed; dataLine.clear(); dataLineProcessed.clear(); } } *saveData += "END:DAYLIGHT\n"; } } *saveData += "END:VTIMEZONE\n"; }