Home | News | Projects | Releases
Bugs | RFE | Repositories | Help
Win32: implement further UTF8 support
[xestiacalendar/.git] / source / objects / calendarobject / CalendarObject-Save.cpp
index a770ba8..0d72b46 100644 (file)
 
 using namespace std;
 
-CalendarObjectSaveResult CalendarObject::SaveFile(string SaveFilename){
+CalendarObjectSaveResult CalendarObject::SaveFile(string saveFilename){
 
-       ofstream FileStream;
-       string ReceivedStringData = "";
+       ofstream fileStream;
+       string receivedStringData = "";
        
        // Open the file.
        
-       FileStream.open(SaveFilename, ofstream::out);
+#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){
+       if (fileStream.rdstate() & ofstream::failbit){
                return CALENDAROBJECTSAVE_CANNOTOPEN;
        }
 
-       if (FileStream.rdstate() & ofstream::badbit){
+       if (fileStream.rdstate() & ofstream::badbit){
                return CALENDAROBJECTSAVE_CANNOTOPEN;
        }
        
        // Process the data into a string.
        
-       CalendarObjectSaveResult SaveResult = CALENDAROBJECTSAVE_UNITTESTFAIL;
-       string SaveStringData;
+       CalendarObjectSaveResult saveResult = CALENDAROBJECTSAVE_UNITTESTFAIL;
+       string saveStringData;
        
-       SaveResult = SaveString(&SaveStringData);
+       saveResult = SaveString(&saveStringData);
        
-       FileStream.write(SaveStringData.c_str(), SaveStringData.size());
+       //fileStream.write(saveStringData.c_str(), saveStringData.size());
        
-       FileStream.close();
+       fileStream << saveStringData.c_str();
+
+       fileStream.close();
        
-       return SaveResult;
+       return saveResult;
        
 }
 
-CalendarObjectSaveResult CalendarObject::SaveString(string *SaveStringData){
+CalendarObjectSaveResult CalendarObject::SaveString(string *saveStringData){
 
-       *SaveStringData += "BEGIN:VCALENDAR\n";
-       *SaveStringData += "VERSION:2.0\n";
+       *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 (methodData.size() > 0){
                
-               if (MethodTokens.size() > 0){
+               if (methodTokens.size() > 0){
                
-                       *SaveStringData += "METHOD;";
-                       *SaveStringData += MethodTokens;
+                       *saveStringData += "METHOD;";
+                       *saveStringData += methodTokens;
                        
                } else {
 
-                       *SaveStringData += "METHOD";
+                       *saveStringData += "METHOD";
                        
                }
 
-               *SaveStringData += ":";
-               *SaveStringData += MethodData;
-               *SaveStringData += "\n";
+               *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 (calendarScaleData.size() > 0){
                
-               if (CalendarScaleTokens.size() > 0){
+               if (calendarScaleTokens.size() > 0){
                
-                       *SaveStringData += "CALSCALE;";
-                       *SaveStringData += CalendarScaleTokens;
+                       *saveStringData += "CALSCALE;";
+                       *saveStringData += calendarScaleTokens;
                        
                } else {
 
-                       *SaveStringData += "CALSCALE";
+                       *saveStringData += "CALSCALE";
                        
                }
 
-               *SaveStringData += ":";
-               *SaveStringData += CalendarScaleData;
-               *SaveStringData += "\n";
+               *saveStringData += ":";
+               *saveStringData += calendarScaleData;
+               *saveStringData += "\n";
                
        }
        
 #if defined(XESTIACAL_UNITTEST)
        
-       *SaveStringData += "PRODID:-//Xestia//Calendar Unit Testing//KW\n";
+       *saveStringData += "PRODID:-//Xestia//Calendar Unit Testing//KW\n";
        
 #else
 
-       *SaveStringData += "PRODID:-//Xestia//Calendar Version ";
-       *SaveStringData += XSDCAL_VERSION;
-       *SaveStringData += "//KW\n";
+       *saveStringData += "PRODID:-//Xestia//Calendar Version ";
+       *saveStringData += XSDCAL_VERSION;
+       *saveStringData += "//KW\n";
        
 #endif
        
-       SaveObjectData(SaveStringData);
+       SaveObjectData(saveStringData);
        
-       *SaveStringData += "END:VCALENDAR";
+       *saveStringData += "END:VCALENDAR";
        
        return CALENDAROBJECTSAVE_OK;
 
Xestia Software Development
Yn Maystri
© 2006 - 2019 Xestia Software Development
Software

Xestia Address Book
Xestia Calendar
Development

Xestia Gelforn
Everything else

About
News
Privacy Policy