X-Git-Url: http://Server1/repobrowser/?p=xestiacalendar%2F.git;a=blobdiff_plain;f=source%2Fobjects%2Fcalendarobject%2FCalendarObject-Save.cpp;h=41cdc2759886753c933834d08875e50cf4d65860;hp=a1043845a2b2375a3862b4e62c67b35d6832fdd2;hb=0c44eca2593eb8434505dbc17d385f7ea2619576;hpb=a54315de01abd57cf93870f550d27c46c2971446 diff --git a/source/objects/calendarobject/CalendarObject-Save.cpp b/source/objects/calendarobject/CalendarObject-Save.cpp index a104384..41cdc27 100644 --- a/source/objects/calendarobject/CalendarObject-Save.cpp +++ b/source/objects/calendarobject/CalendarObject-Save.cpp @@ -1,16 +1,143 @@ +// 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::SaveString(string *SaveStringData){ +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::SaveFile(string SaveFilename){ +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"; + + } -} \ No newline at end of file + *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; + +}