// CalendarObject-Save.cpp - CalendarObject 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 "CalendarObject.h" #include "../../common/file.h" using namespace std; CalendarObjectSaveResult CalendarObject::SaveFile(string saveFilename){ ofstream fileStream; string receivedStringData = ""; // Open the file. #ifndef WIN32 fileStream.open(saveFilename, ofstream::out); #else wstring saveFilename_utf16; int len = MultiByteToWideChar(CP_UTF8, 0, &saveFilename[0], (int)saveFilename.size(), NULL, 0); if (len > 0) { saveFilename_utf16.resize(len); MultiByteToWideChar(CP_UTF8, 0, &saveFilename[0], (int)saveFilename.size(), &saveFilename_utf16[0], len); } fileStream.open(saveFilename_utf16, ofstream::out); #endif if (fileStream.rdstate() & ofstream::failbit){ return CALENDAROBJECTSAVE_CANNOTOPEN; } if (fileStream.rdstate() & ofstream::badbit){ return CALENDAROBJECTSAVE_CANNOTOPEN; } // Process the data into a string. CalendarObjectSaveResult saveResult = CALENDAROBJECTSAVE_UNITTESTFAIL; string saveStringData; saveResult = SaveString(&saveStringData); //fileStream.write(saveStringData.c_str(), saveStringData.size()); fileStream << saveStringData.c_str(); fileStream.close(); return saveResult; } CalendarObjectSaveResult CalendarObject::SaveString(string *saveStringData){ *saveStringData += "BEGIN:VCALENDAR\n"; *saveStringData += "VERSION:2.0\n"; // Check if METHOD has a value and print it if it does (and // any token data if there). if (methodData.size() > 0){ if (methodTokens.size() > 0){ *saveStringData += "METHOD;"; *saveStringData += methodTokens; } else { *saveStringData += "METHOD"; } *saveStringData += ":"; *saveStringData += methodData; *saveStringData += "\n"; } // Check if CALSCALE has a value and print it if it does (and // any token data if there). if (calendarScaleData.size() > 0){ if (calendarScaleTokens.size() > 0){ *saveStringData += "CALSCALE;"; *saveStringData += calendarScaleTokens; } else { *saveStringData += "CALSCALE"; } *saveStringData += ":"; *saveStringData += calendarScaleData; *saveStringData += "\n"; } #if defined(XESTIACAL_UNITTEST) *saveStringData += "PRODID:-//Xestia//Calendar Unit Testing//KW\n"; #else *saveStringData += "PRODID:-//Xestia//Calendar Version "; *saveStringData += XSDCAL_VERSION; *saveStringData += "//KW\n"; #endif SaveObjectData(saveStringData); *saveStringData += "END:VCALENDAR"; return CALENDAROBJECTSAVE_OK; }