1 // CalendarObject-Save.cpp - CalendarObject 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 "CalendarObject.h"
20 #include "../../common/file.h"
24 CalendarObjectSaveResult CalendarObject::SaveFile(string saveFilename){
27 string receivedStringData = "";
33 fileStream.open(saveFilename, ofstream::out);
37 wstring saveFilename_utf16;
39 int len = MultiByteToWideChar(CP_UTF8, 0, &saveFilename[0], (int)saveFilename.size(), NULL, 0);
43 saveFilename_utf16.resize(len);
44 MultiByteToWideChar(CP_UTF8, 0, &saveFilename[0], (int)saveFilename.size(), &saveFilename_utf16[0], len);
47 fileStream.open(saveFilename_utf16, ofstream::out);
51 if (fileStream.rdstate() & ofstream::failbit){
52 return CALENDAROBJECTSAVE_CANNOTOPEN;
55 if (fileStream.rdstate() & ofstream::badbit){
56 return CALENDAROBJECTSAVE_CANNOTOPEN;
59 // Process the data into a string.
61 CalendarObjectSaveResult saveResult = CALENDAROBJECTSAVE_UNITTESTFAIL;
62 string saveStringData;
64 saveResult = SaveString(&saveStringData);
66 //fileStream.write(saveStringData.c_str(), saveStringData.size());
68 fileStream << saveStringData.c_str();
76 CalendarObjectSaveResult CalendarObject::SaveString(string *saveStringData){
78 *saveStringData += "BEGIN:VCALENDAR\n";
79 *saveStringData += "VERSION:2.0\n";
81 // Check if METHOD has a value and print it if it does (and
82 // any token data if there).
84 if (methodData.size() > 0){
86 if (methodTokens.size() > 0){
88 *saveStringData += "METHOD;";
89 *saveStringData += methodTokens;
93 *saveStringData += "METHOD";
97 *saveStringData += ":";
98 *saveStringData += methodData;
99 *saveStringData += "\n";
103 // Check if CALSCALE has a value and print it if it does (and
104 // any token data if there).
106 if (calendarScaleData.size() > 0){
108 if (calendarScaleTokens.size() > 0){
110 *saveStringData += "CALSCALE;";
111 *saveStringData += calendarScaleTokens;
115 *saveStringData += "CALSCALE";
119 *saveStringData += ":";
120 *saveStringData += calendarScaleData;
121 *saveStringData += "\n";
125 #if defined(XESTIACAL_UNITTEST)
127 *saveStringData += "PRODID:-//Xestia//Calendar Unit Testing//KW\n";
131 *saveStringData += "PRODID:-//Xestia//Calendar Version ";
132 *saveStringData += XSDCAL_VERSION;
133 *saveStringData += "//KW\n";
137 SaveObjectData(saveStringData);
139 *saveStringData += "END:VCALENDAR";
141 return CALENDAROBJECTSAVE_OK;