[colobot] 101/390: Fixed save directories in things not yet refactored to use PHYSFS

Didier Raboud odyx at moszumanska.debian.org
Fri Jun 12 14:21:34 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 c0ac60e4facfc9d7a588dd2a23fe548b7212975b
Author: krzys-h <krzys_h at interia.pl>
Date:   Mon Oct 20 21:15:39 2014 +0200

    Fixed save directories in things not yet refactored to use PHYSFS
---
 src/common/resources/resourcemanager.cpp |  8 ++++++
 src/common/resources/resourcemanager.h   |  1 +
 src/object/robotmain.cpp                 | 10 ++++++--
 src/object/robotmain.h                   |  1 +
 src/ui/maindialog.cpp                    | 42 ++++++++++++++++++--------------
 src/ui/maindialog.h                      |  3 ++-
 src/ui/studio.cpp                        |  2 +-
 7 files changed, 45 insertions(+), 22 deletions(-)

diff --git a/src/common/resources/resourcemanager.cpp b/src/common/resources/resourcemanager.cpp
index 21aceec..42f9634 100644
--- a/src/common/resources/resourcemanager.cpp
+++ b/src/common/resources/resourcemanager.cpp
@@ -97,6 +97,14 @@ bool CResourceManager::SetSaveLocation(const std::string &location)
     return false;
 }
 
+std::string CResourceManager::GetSaveLocation()
+{
+    if(PHYSFS_isInit()) {
+        return PHYSFS_getWriteDir();
+    }
+    return "";
+}
+
 
 SDL_RWops* CResourceManager::GetSDLFileHandler(const std::string &filename)
 {
diff --git a/src/common/resources/resourcemanager.h b/src/common/resources/resourcemanager.h
index e949746..730cf3e 100644
--- a/src/common/resources/resourcemanager.h
+++ b/src/common/resources/resourcemanager.h
@@ -35,6 +35,7 @@ public:
     static bool RemoveLocation(const std::string &location);
 
     static bool SetSaveLocation(const std::string &location);
+    static std::string GetSaveLocation();
 
     static SDL_RWops* GetSDLFileHandler(const std::string &filename);
     static CSNDFile* GetSNDFileHandler(const std::string &filename);
diff --git a/src/object/robotmain.cpp b/src/object/robotmain.cpp
index 91e2d61..6ca1da1 100644
--- a/src/object/robotmain.cpp
+++ b/src/object/robotmain.cpp
@@ -5427,7 +5427,7 @@ void CRobotMain::LoadOneScript(CObject *obj, int &nbError)
 
         char filename[MAX_FNAME];
         sprintf(filename, "%s/%s/%c%.3d%.3d%.1d.txt",
-                    GetSavegameDir(), m_gamerName.c_str(), name[0], rank, objRank, i);
+                    GetPHYSFSSavegameDir(), m_gamerName.c_str(), name[0], rank, objRank, i);
         brain->ReadProgram(i, filename);
         if (!brain->GetCompile(i)) nbError++;
     }
@@ -5497,7 +5497,7 @@ void CRobotMain::SaveOneScript(CObject *obj)
     {
         char filename[MAX_FNAME];
         sprintf(filename, "%s/%s/%c%.3d%.3d%.1d.txt",
-                    GetSavegameDir(), m_gamerName.c_str(), name[0], rank, objRank, i);
+                    GetPHYSFSSavegameDir(), m_gamerName.c_str(), name[0], rank, objRank, i);
         brain->WriteProgram(i, filename);
     }
 }
@@ -6623,6 +6623,12 @@ bool CRobotMain::GetRadar()
     return false;
 }
 
+//TODO: Use PHYSFS everywhere
+const char* CRobotMain::GetPHYSFSSavegameDir()
+{
+    return m_dialog->GetPHYSFSSavegameDir().c_str();
+}
+
 const char* CRobotMain::GetSavegameDir()
 {
     return m_dialog->GetSavegameDir().c_str();
diff --git a/src/object/robotmain.h b/src/object/robotmain.h
index 882265c..a55318d 100644
--- a/src/object/robotmain.h
+++ b/src/object/robotmain.h
@@ -329,6 +329,7 @@ public:
     bool        GetSceneSoluce();
     bool        GetShowAll();
     bool        GetRadar();
+    const char* GetPHYSFSSavegameDir();
     const char* GetSavegameDir();
     const char* GetPublicDir();
     const char* GetFilesDir();
diff --git a/src/ui/maindialog.cpp b/src/ui/maindialog.cpp
index dec4586..3857d2e 100644
--- a/src/ui/maindialog.cpp
+++ b/src/ui/maindialog.cpp
@@ -182,8 +182,8 @@ CMainDialog::CMainDialog()
     }
 
     m_savegameDir = "savegame";
-    m_publicDir = "program";
-    m_filesDir = m_savegameDir;
+    m_publicDir = CResourceManager::GetSaveLocation()+"/program"; //TODO: Refactor to use PHYSFS
+    m_filesDir = CResourceManager::GetSaveLocation()+"/files"; //TODO: Refactor to use PHYSFS
 
     m_setupFull = m_app->GetVideoConfig().fullScreen;
 
@@ -3311,13 +3311,13 @@ void CMainDialog::ReadNameList()
 
     try
     {
-        if (! fs::exists(m_savegameDir) && fs::is_directory(m_savegameDir))
+        if (! fs::exists(GetSavegameDir()) && fs::is_directory(GetSavegameDir()))
         {
             GetLogger()->Error("Savegame dir does not exist %s\n",dir);
         }
         else
         {
-            fs::directory_iterator dirIt(m_savegameDir), dirEndIt;
+            fs::directory_iterator dirIt(GetSavegameDir()), dirEndIt;
 
             for (; dirIt != dirEndIt; ++dirIt)
             {
@@ -3563,15 +3563,15 @@ void CMainDialog::NameCreate()
     }
 
 
-    if(!CResourceManager::DirectoryExists(m_savegameDir))
-        CResourceManager::CreateDirectory(m_savegameDir);
+    if(!CResourceManager::DirectoryExists(GetPHYSFSSavegameDir()))
+        CResourceManager::CreateDirectory(GetPHYSFSSavegameDir());
     
-    dir = m_savegameDir + "/" + name;
+    dir = GetSavegameDir() + "/" + name;
     if (!fs::exists(dir))
     {
         fs::create_directories(dir);
-        if(!CResourceManager::DirectoryExists(dir))
-            CResourceManager::CreateDirectory(dir);
+        if(!CResourceManager::DirectoryExists(GetPHYSFSSavegameDir()+"/"+name))
+            CResourceManager::CreateDirectory(GetPHYSFSSavegameDir()+"/"+name);
     }
     else
     {
@@ -3638,7 +3638,7 @@ void CMainDialog::NameDelete()
     gamer = pl->GetItemName(sel);
 
     // Deletes all the contents of the file.
-    sprintf(dir, "%s/%s", m_savegameDir.c_str(), gamer);
+    sprintf(dir, "%s/%s", GetSavegameDir().c_str(), gamer);
     if ( !RemoveDir(dir) )
     {
         m_sound->Play(SOUND_TZOING);
@@ -3951,7 +3951,7 @@ bool CMainDialog::IsIOReadScene()
 {
     fs::directory_iterator end_iter;
 
-    fs::path saveDir(m_savegameDir + "/" + m_main->GetGamerName());
+    fs::path saveDir(GetSavegameDir() + "/" + m_main->GetGamerName());
     if (fs::exists(saveDir) && fs::is_directory(saveDir))
     {
         for( fs::directory_iterator dir_iter(saveDir) ; dir_iter != end_iter ; ++dir_iter)
@@ -4048,7 +4048,7 @@ void CMainDialog::IOReadList()
 
     pl->Flush();
 
-    fs::path saveDir(m_savegameDir + "/" + m_main->GetGamerName());
+    fs::path saveDir(GetSavegameDir() + "/" + m_main->GetGamerName());
     m_saveList.clear();
 
     if (fs::exists(saveDir) && fs::is_directory(saveDir))
@@ -4225,7 +4225,7 @@ bool CMainDialog::IOWriteScene()
     pe->GetText(info, 100);
     if (static_cast<unsigned int>(sel) >= m_saveList.size())
     {
-        dir = fs::path(m_savegameDir) / m_main->GetGamerName() / ("save" + clearName(info));
+        dir = fs::path(GetSavegameDir()) / m_main->GetGamerName() / ("save" + clearName(info));
     }
     else
     {
@@ -6001,7 +6001,13 @@ bool CMainDialog::GetSceneSoluce()
 
 // Returns the name of the folder to save.
 
-std::string & CMainDialog::GetSavegameDir()
+std::string CMainDialog::GetSavegameDir()
+{
+    return CResourceManager::GetSaveLocation()+"/"+m_savegameDir;
+}
+
+//TODO: Use PHYSFS everywhere
+std::string & CMainDialog::GetPHYSFSSavegameDir()
 {
     return m_savegameDir;
 }
@@ -6059,7 +6065,7 @@ void CMainDialog::WriteGamerPerso(char *gamer)
     char    filename[100];
     char    line[100];
 
-    sprintf(filename, "%s/%s/face.gam", m_savegameDir.c_str(), gamer);
+    sprintf(filename, "%s/%s/face.gam", GetSavegameDir().c_str(), gamer);
     file = fopen(filename, "w");
     if ( file == NULL )  return;
 
@@ -6092,7 +6098,7 @@ void CMainDialog::ReadGamerPerso(char *gamer)
     m_perso.face = 0;
     DefPerso();
 
-    sprintf(filename, "%s/%s/face.gam", m_savegameDir.c_str(), gamer);
+    sprintf(filename, "%s/%s/face.gam", GetSavegameDir().c_str(), gamer);
     file = fopen(filename, "r");
     if ( file == NULL )  return;
 
@@ -6201,7 +6207,7 @@ bool CMainDialog::ReadGamerInfo()
         m_sceneInfo[i].bPassed = false;
     }
 
-    sprintf(line, "%s/%s/%s.gam", m_savegameDir.c_str(), m_main->GetGamerName(), m_sceneName);
+    sprintf(line, "%s/%s/%s.gam", GetSavegameDir().c_str(), m_main->GetGamerName(), m_sceneName);
     file = fopen(line, "r");
     if ( file == NULL )  return false;
 
@@ -6237,7 +6243,7 @@ bool CMainDialog::WriteGamerInfo()
     char    line[100];
     int     i;
 
-    sprintf(line, "%s/%s/%s.gam", m_savegameDir.c_str(), m_main->GetGamerName(), m_sceneName);
+    sprintf(line, "%s/%s/%s.gam", GetSavegameDir().c_str(), m_main->GetGamerName(), m_sceneName);
     file = fopen(line, "w");
     if ( file == NULL )  return false;
 
diff --git a/src/ui/maindialog.h b/src/ui/maindialog.h
index 390aa31..1ff9045 100644
--- a/src/ui/maindialog.h
+++ b/src/ui/maindialog.h
@@ -91,7 +91,8 @@ public:
     int           GetSceneRank();
     const char*   GetSceneDir();
     bool          GetSceneSoluce();
-    std::string & GetSavegameDir();
+    std::string   GetSavegameDir();
+    std::string & GetPHYSFSSavegameDir();
     std::string & GetPublicDir();
 
     bool    GetTooltip();
diff --git a/src/ui/studio.cpp b/src/ui/studio.cpp
index abe4e5c..01ffd6a 100644
--- a/src/ui/studio.cpp
+++ b/src/ui/studio.cpp
@@ -1533,7 +1533,7 @@ std::string CStudio::SearchDirectory(bool bCreate)
     }
     else
     {
-        sprintf(dir, "%s/%s/Program/", m_main->GetSavegameDir(), m_main->GetGamerName());
+        sprintf(dir, "%s/%s/Program/", m_main->GetPHYSFSSavegameDir(), m_main->GetGamerName());
     }
 
     fs::path path = fs::path(dir);

-- 
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