+// 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 <http://www.gnu.org/licenses/>
+
#include "CalendarTimezone.h"
using namespace std;
-void CalendarTimezoneObject::SaveObjectData(string *SaveData){
+void CalendarTimezoneObject::SaveObjectData(string *saveData){
- string DataLine = "";
- string DataLineProcessed = "";
+ string dataLine = "";
+ string dataLineProcessed = "";
- *SaveData += "BEGIN:VTIMEZONE\n";
+ *saveData += "BEGIN:VTIMEZONE\n";
// Process the TZID.
- if (TimeZoneData.size() > 0){
+ if (timeZoneData.size() > 0){
- if (TimeZoneDataTokens.size() > 0){
+ if (timeZoneDataTokens.size() > 0){
- DataLine += "TZID;";
- DataLine += TimeZoneDataTokens;
+ dataLine += "TZID;";
+ dataLine += timeZoneDataTokens;
} else {
- DataLine += "TZID";
+ dataLine += "TZID";
}
- DataLine += ":";
- DataLine += TimeZoneData;
- DataLine += "\n";
+ dataLine += ":";
+ dataLine += timeZoneData;
+ dataLine += "\n";
- DataLineProcessed = OutputText(&DataLine);
+ dataLineProcessed = OutputText(&dataLine);
- *SaveData += DataLineProcessed;
+ *saveData += dataLineProcessed;
- DataLine.clear();
- DataLineProcessed.clear();
+ dataLine.clear();
+ dataLineProcessed.clear();
}
// Process the LAST-MODIFIED value.
- if (LastModifiedData.size() > 0){
+ if (lastModifiedData.size() > 0){
- if (LastModifiedTokens.size() > 0){
+ if (lastModifiedTokens.size() > 0){
- DataLine += "LAST-MODIFIED;";
- DataLine += LastModifiedTokens;
+ dataLine += "LAST-MODIFIED;";
+ dataLine += lastModifiedTokens;
} else {
- DataLine += "LAST-MODIFIED";
+ dataLine += "LAST-MODIFIED";
}
- DataLine += ":";
- DataLine += LastModifiedData;
- DataLine += "\n";
+ 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;
- DataLineProcessed = OutputText(&DataLine);
+ dataLine.clear();
+ dataLineProcessed.clear();
+
+ }
+
+ // Process the COMMENT value.
+
+ if (timezoneStandardCollection[timezoneStandardSeek].commentList.size() > 0){
- *SaveData += DataLineProcessed;
+ 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();
+
+ }
- 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";
+ *saveData += "END:VTIMEZONE\n";
}
\ No newline at end of file