summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDidier Raboud <odyx@debian.org>2013-03-27 10:28:06 +0100
committerDidier Raboud <odyx@debian.org>2013-03-27 10:29:58 +0100
commit4c1a7057bbd24b4a57ba1ebfc72813d2f605479f (patch)
treef47c550647850193324d912c85c596149b2955b4
parent991dbd1e37366b43b790740beb2fef755c56dcba (diff)
downloadcolobot-4c1a7057bbd24b4a57ba1ebfc72813d2f605479f.tar.gz
colobot-4c1a7057bbd24b4a57ba1ebfc72813d2f605479f.tar.bz2
colobot-4c1a7057bbd24b4a57ba1ebfc72813d2f605479f.zip
Add Linux-specific savegame and profile settings according to the XDG Base Directory Specification
http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
-rw-r--r--src/app/system_linux.cpp54
-rw-r--r--src/app/system_linux.h3
2 files changed, 57 insertions, 0 deletions
diff --git a/src/app/system_linux.cpp b/src/app/system_linux.cpp
index 619909d..01dd850 100644
--- a/src/app/system_linux.cpp
+++ b/src/app/system_linux.cpp
@@ -94,3 +94,57 @@ long long CSystemUtilsLinux::TimeStampExactDiff(SystemTimeStamp *before, SystemT
return (after->clockTime.tv_nsec - before->clockTime.tv_nsec) +
(after->clockTime.tv_sec - before->clockTime.tv_sec) * 1000000000ll;
}
+
+std::string CSystemUtilsLinux::profileFileLocation()
+{
+ std::string m_profileFile;
+
+ // Determine profileFile according to XDG Base Directory Specification
+ char* envXDG_CONFIG_HOME = getenv("XDG_CONFIG_HOME");
+ if (envXDG_CONFIG_HOME == NULL)
+ {
+ char *envHOME = getenv("HOME");
+ if (envHOME == NULL)
+ {
+ m_profileFile = "colobot.ini";
+ }
+ else
+ {
+ m_profileFile = std::string(envHOME) + "/.config/colobot.ini";
+ }
+ }
+ else
+ {
+ m_profileFile = std::string(envXDG_CONFIG_HOME) + "/colobot.ini";
+ }
+ GetLogger()->Trace("Profile configuration is %s\n", m_profileFile.c_str());
+
+ return m_profileFile;
+}
+
+std::string CSystemUtilsLinux::savegameDirectoryLocation()
+{
+ std::string m_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)
+ {
+ m_savegameDir = "/tmp/colobot-savegame";
+ }
+ else
+ {
+ m_savegameDir = std::string(envHOME) + "/.local/share/colobot";
+ }
+ }
+ else
+ {
+ m_savegameDir = std::string(envXDG_DATA_HOME) + "/colobot";
+ }
+ GetLogger()->Trace("Saved game files are going to %s\n", m_savegameDir.c_str());
+
+ return m_savegameDir;
+}
diff --git a/src/app/system_linux.h b/src/app/system_linux.h
index ba0d8cd..a9a5a52 100644
--- a/src/app/system_linux.h
+++ b/src/app/system_linux.h
@@ -46,6 +46,9 @@ public:
virtual long long GetTimeStampExactResolution() override;
virtual long long TimeStampExactDiff(SystemTimeStamp *before, SystemTimeStamp *after) override;
+ virtual std::string profileFileLocation() override;
+ virtual std::string savegameDirectoryLocation() override;
+
private:
bool m_zenityAvailable;
};