[colobot] 34/390: Saving colobot.ini through physfs

Didier Raboud odyx at moszumanska.debian.org
Fri Jun 12 14:21:25 UTC 2015


This is an automated email from the git hooks/post-receive script.

odyx pushed a commit to branch upstream/latest
in repository colobot.

commit 9a3cd67c3bb2f7d0d4b83f6a5ac8bbcfedf4207b
Author: krzys-h <krzys_h at interia.pl>
Date:   Thu Jul 24 23:38:13 2014 +0200

    Saving colobot.ini through physfs
---
 src/app/main.cpp                            |  4 ++++
 src/app/system.cpp                          |  4 ++--
 src/app/system.h                            |  4 ++--
 src/app/system_linux.cpp                    | 24 +++++++++++------------
 src/app/system_linux.h                      |  2 +-
 src/app/system_macosx.cpp                   | 11 ++++++-----
 src/app/system_macosx.h                     |  2 +-
 src/app/system_windows.cpp                  | 16 +++++++--------
 src/app/system_windows.h                    |  2 +-
 src/common/profile.cpp                      | 30 +++++++++++++++++++----------
 src/common/resources/outputstreambuffer.cpp |  1 +
 src/common/resources/resourcemanager.cpp    | 23 +++++++++++-----------
 12 files changed, 70 insertions(+), 53 deletions(-)

diff --git a/src/app/main.cpp b/src/app/main.cpp
index 6ba8da2..294b306 100644
--- a/src/app/main.cpp
+++ b/src/app/main.cpp
@@ -102,6 +102,9 @@ int SDL_MAIN_FUNC(int argc, char *argv[])
     {
         return app->GetExitCode();
     }
+    
+    manager.SetSaveLocation(systemUtils->GetSaveDir());
+    manager.AddLocation(systemUtils->GetSaveDir(), true);
 
     int code = 0;
 
@@ -121,6 +124,7 @@ int SDL_MAIN_FUNC(int argc, char *argv[])
 
     delete app;
     delete systemUtils;
+    //delete manager;
 
     logger.Info("Exiting with code %d\n", code);
     return code;
diff --git a/src/app/system.cpp b/src/app/system.cpp
index b2e6b47..66d08e5 100644
--- a/src/app/system.cpp
+++ b/src/app/system.cpp
@@ -192,7 +192,7 @@ float CSystemUtils::TimeStampDiff(SystemTimeStamp *before, SystemTimeStamp *afte
     return result;
 }
 
-std::string CSystemUtils::GetProfileFileLocation()
+std::string CSystemUtils::GetSaveDir()
 {
-    return std::string("colobot.ini");
+    return std::string("save");
 }
diff --git a/src/app/system.h b/src/app/system.h
index 01f2672..6d2fe58 100644
--- a/src/app/system.h
+++ b/src/app/system.h
@@ -130,8 +130,8 @@ public:
     /** The difference is \a after - \a before. */
     virtual long long TimeStampExactDiff(SystemTimeStamp *before, SystemTimeStamp *after) = 0;
 
-    //! Returns the profile (colobot.ini) file location
-    virtual std::string GetProfileFileLocation();
+    //! Returns the save dir location
+    virtual std::string GetSaveDir();
 };
 
 //! Global function to get CSystemUtils instance
diff --git a/src/app/system_linux.cpp b/src/app/system_linux.cpp
index e584cd1..485d7c2 100644
--- a/src/app/system_linux.cpp
+++ b/src/app/system_linux.cpp
@@ -95,29 +95,29 @@ long long CSystemUtilsLinux::TimeStampExactDiff(SystemTimeStamp *before, SystemT
            (after->clockTime.tv_sec  - before->clockTime.tv_sec) * 1000000000ll;
 }
 
-std::string CSystemUtilsLinux::GetProfileFileLocation()
+std::string CSystemUtilsLinux::GetSaveDir()
 {
-    std::string profileFile;
-
-    // Determine profileFile according to XDG Base Directory Specification
-    char* envXDG_CONFIG_HOME = getenv("XDG_CONFIG_HOME");
-    if (envXDG_CONFIG_HOME == NULL)
+    std::string savegameDir;
+    
+    // Determine savegame dir according to XDG Base Directory Specification
+    char *envXDG_DATA_HOME = getenv("XDG_CONFIG_DATA");
+    if (envXDG_DATA_HOME == NULL)
     {
         char *envHOME = getenv("HOME");
         if (envHOME == NULL)
         {
-            profileFile = "colobot.ini";
+            savegameDir = "/tmp/colobot-save";
         }
         else
         {
-            profileFile = std::string(envHOME) + "/.config/colobot.ini";
+            savegameDir = std::string(envHOME) + "/.local/share/colobot";
         }
     }
     else
     {
-        profileFile = std::string(envXDG_CONFIG_HOME) + "/colobot.ini";
+        savegameDir = std::string(envXDG_DATA_HOME) + "/colobot";
     }
-    GetLogger()->Trace("Profile configuration is %s\n", profileFile.c_str());
-
-    return profileFile;
+    GetLogger()->Trace("Saved game files are going to %s\n", savegameDir.c_str());
+    
+    return savegameDir;
 }
diff --git a/src/app/system_linux.h b/src/app/system_linux.h
index ad26454..f9cce05 100644
--- a/src/app/system_linux.h
+++ b/src/app/system_linux.h
@@ -46,7 +46,7 @@ public:
     virtual long long GetTimeStampExactResolution() override;
     virtual long long TimeStampExactDiff(SystemTimeStamp *before, SystemTimeStamp *after) override;
 
-    virtual std::string GetProfileFileLocation() override;
+    virtual std::string GetSaveDir() override;
 
 private:
     bool m_zenityAvailable;
diff --git a/src/app/system_macosx.cpp b/src/app/system_macosx.cpp
index 38885eb..473a10c 100644
--- a/src/app/system_macosx.cpp
+++ b/src/app/system_macosx.cpp
@@ -87,10 +87,11 @@ void CSystemUtilsMacOSX::Init()
     m_dataPath += "/Contents/Resources";
 }
 
-std::string CSystemUtilsMacOSX::GetProfileFileLocation()
+std::string CSystemUtilsMacOSX::GetSaveDir()
 {
-    std::string profileFile = m_ASPath + "/colobot.ini";
-
-    GetLogger()->Trace("Profile file is %s\n", profileFile.c_str());
-    return profileFile;
+    std::string savegameDir = m_ASPath;
+    boost::filesystem::create_directories(savegameDir.c_str());
+    GetLogger()->Trace("Saved game files are going to %s\n", savegameDir.c_str());
+    
+    return savegameDir;
 }
diff --git a/src/app/system_macosx.h b/src/app/system_macosx.h
index 7360af1..6423320 100644
--- a/src/app/system_macosx.h
+++ b/src/app/system_macosx.h
@@ -28,7 +28,7 @@ class CSystemUtilsMacOSX : public CSystemUtilsOther
 public:
     virtual void Init() override;
 
-    virtual std::string GetProfileFileLocation() override;
+    virtual std::string GetSaveDir() override;
 private:
     std::string m_ASPath;
     std::string m_dataPath;
diff --git a/src/app/system_windows.cpp b/src/app/system_windows.cpp
index ffaa18a..e35f83f 100644
--- a/src/app/system_windows.cpp
+++ b/src/app/system_windows.cpp
@@ -111,20 +111,20 @@ std::wstring CSystemUtilsWindows::UTF8_Decode(const std::string& str)
 
 }
 
-std::string CSystemUtilsWindows::GetProfileFileLocation()
+std::string CSystemUtilsWindows::GetSaveDir()
 {
-    std::string profileFile;
-
+    std::string savegameDir;
+    
     char* envUSERPROFILE = getenv("USERPROFILE");
     if (envUSERPROFILE == NULL)
     {
-        profileFile = "colobot.ini";
+        savegameDir = "save";
     }
     else
     {
-        profileFile = std::string(envUSERPROFILE) + "\\colobot\\colobot.ini";
+        savegameDir = std::string(envUSERPROFILE) + "\\colobot";
     }
-    GetLogger()->Trace("Profile configuration is %s\n", profileFile.c_str());
-
-    return profileFile;
+    GetLogger()->Trace("Saved game files are going to %s\n", savegameDir.c_str());
+    
+    return savegameDir;
 }
diff --git a/src/app/system_windows.h b/src/app/system_windows.h
index 0a41c1a..618caf9 100644
--- a/src/app/system_windows.h
+++ b/src/app/system_windows.h
@@ -44,7 +44,7 @@ public:
     virtual long long GetTimeStampExactResolution() override;
     virtual long long TimeStampExactDiff(SystemTimeStamp *before, SystemTimeStamp *after) override;
 
-    virtual std::string GetProfileFileLocation() override;
+    virtual std::string GetSaveDir() override;
 
 private:
     std::string UTF8_Encode(const std::wstring &wstr);
diff --git a/src/common/profile.cpp b/src/common/profile.cpp
index ee3e873..9947769 100644
--- a/src/common/profile.cpp
+++ b/src/common/profile.cpp
@@ -18,6 +18,8 @@
 #include "common/profile.h"
 
 #include "common/logger.h"
+#include "common/resources/inputstream.h"
+#include "common/resources/outputstream.h"
 
 #include "app/system.h"
 
@@ -47,11 +49,15 @@ bool CProfile::InitCurrentDirectory()
 {
     try
     {
-        #if DEV_BUILD
-        bp::ini_parser::read_ini("colobot.ini", m_propertyTree);
-        #else
-        bp::ini_parser::read_ini(GetSystemUtils()->GetProfileFileLocation(), m_propertyTree);
-        #endif
+        CInputStream stream;
+        stream.open("colobot.ini");
+        if(stream.is_open()) {
+            bp::ini_parser::read_ini(stream, m_propertyTree);
+        } else {
+            GetLogger()->Error("Error on parsing profile: failed to open file\n");
+            return false;
+        }
+        stream.close();
     }
     catch (std::exception & e)
     {
@@ -67,11 +73,15 @@ bool CProfile::SaveCurrentDirectory()
     {
         try
         {
-            #if DEV_BUILD
-            bp::ini_parser::write_ini("colobot.ini", m_propertyTree);
-            #else
-            bp::ini_parser::write_ini(GetSystemUtils()->GetProfileFileLocation(), m_propertyTree);
-            #endif
+            COutputStream stream;
+            stream.open("colobot.ini");
+            if(stream.is_open()) {
+                bp::ini_parser::write_ini(stream, m_propertyTree);
+            } else {
+                GetLogger()->Error("Error on storing profile: failed to open file\n");
+                return false;
+            }
+            stream.close();
         }
         catch (std::exception & e)
         {
diff --git a/src/common/resources/outputstreambuffer.cpp b/src/common/resources/outputstreambuffer.cpp
index e611d13..22ed7cb 100644
--- a/src/common/resources/outputstreambuffer.cpp
+++ b/src/common/resources/outputstreambuffer.cpp
@@ -43,6 +43,7 @@ void COutputStreamBuffer::open(const std::string &filename)
 
 void COutputStreamBuffer::close()
 {
+    sync();
     if (is_open())
         PHYSFS_close(m_file);
 }
diff --git a/src/common/resources/resourcemanager.cpp b/src/common/resources/resourcemanager.cpp
index 5e8627d..be5baa8 100644
--- a/src/common/resources/resourcemanager.cpp
+++ b/src/common/resources/resourcemanager.cpp
@@ -18,15 +18,16 @@
 #include "common/resources/resourcemanager.h"
 
 #include "common/config.h"
+#include "common/logger.h"
 
 #include <physfs.h>
 
 
 CResourceManager::CResourceManager(const char *argv0)
 {
-    if (PHYSFS_init(argv0))
+    if (!PHYSFS_init(argv0))
     {
-        // TODO error
+        CLogger::GetInstancePointer()->Error("Error while initializing physfs\n");
     }
 }
 
@@ -35,9 +36,9 @@ CResourceManager::~CResourceManager()
 {
     if (PHYSFS_isInit())
     {
-        if (PHYSFS_deinit())
+        if (!PHYSFS_deinit())
         {
-            // TODO error
+            CLogger::GetInstancePointer()->Error("Error while deinitializing physfs\n");
         }
     }
 }
@@ -47,9 +48,9 @@ bool CResourceManager::AddLocation(const std::string &location, bool prepend)
 {
     if (PHYSFS_isInit())
     {
-        if (PHYSFS_mount(location.c_str(), nullptr, prepend ? 0 : 1))
+        if (!PHYSFS_mount(location.c_str(), nullptr, prepend ? 0 : 1))
         {
-            // TODO error
+            CLogger::GetInstancePointer()->Error("Error while mounting \"%s\"\n", location.c_str());
         }
     }
     
@@ -61,9 +62,9 @@ bool CResourceManager::RemoveLocation(const std::string &location)
 {
     if (PHYSFS_isInit())
     {
-        if (PHYSFS_removeFromSearchPath(location.c_str()))
+        if (!PHYSFS_removeFromSearchPath(location.c_str()))
         {
-            // TODO error
+            CLogger::GetInstancePointer()->Error("Error while unmounting \"%s\"\n", location.c_str());
         }
     }
     
@@ -75,9 +76,9 @@ bool CResourceManager::SetSaveLocation(const std::string &location)
 {
     if (PHYSFS_isInit())
     {
-        if (PHYSFS_setWriteDir(location.c_str()))
+        if (!PHYSFS_setWriteDir(location.c_str()))
         {
-            // TODO error
+            CLogger::GetInstancePointer()->Error("Error while setting save location to \"%s\"\n", location.c_str());
         }
     }
     
@@ -96,7 +97,7 @@ SDL_RWops* CResourceManager::GetSDLFileHandler(const std::string &filename)
     SDL_RWops *handler = SDL_AllocRW();
     if (!handler)
     {
-        // TODO error
+        CLogger::GetInstancePointer()->Error("Unable to allocate SDL_RWops for \"%s\"\n", filename.c_str());
         return nullptr;
     }
     

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/colobot.git



More information about the Pkg-games-commits mailing list