From: Côme Chilliet Date: Thu, 1 Dec 2016 16:26:21 +0000 (+0700) Subject: First step towards using clean methods and correct paths for datas and config X-Git-Url: https://git.jsancho.org/?p=lugaru.git;a=commitdiff_plain;h=8d45019f2b1ac74108ae4589333680158fee32d5 First step towards using clean methods and correct paths for datas and config --- diff --git a/CMakeLists.txt b/CMakeLists.txt index c59fa3f..b507ffe 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -66,6 +66,7 @@ set(LUGARU_SRCS ${SRCDIR}/Animation.cpp ${SRCDIR}/Sounds.cpp ${SRCDIR}/Awards.cpp + ${SRCDIR}/Utils/Folders.cpp ) set(LUGARU_H @@ -101,6 +102,7 @@ set(LUGARU_H ${SRCDIR}/Stereo.h ${SRCDIR}/Animation.h ${SRCDIR}/Sounds.h + ${SRCDIR}/Utils/Folders.h ) if(UNIX) diff --git a/Source/Settings.cpp b/Source/Settings.cpp index 8258bec..609b9fd 100644 --- a/Source/Settings.cpp +++ b/Source/Settings.cpp @@ -21,6 +21,7 @@ along with Lugaru. If not, see . #include "Settings.h" #include "Game.h" #include "Input.h" +#include "Utils/Folders.h" using namespace Game; @@ -79,7 +80,7 @@ void SaveSettings() newscreenheight = screenheight; if (newscreenheight < 0) newscreenheight = screenheight; - ofstream opstream(ConvertFileName(":Data:config.txt", "w")); + ofstream opstream(Folders::getConfigFilePath()); opstream << "Screenwidth:\n"; opstream << newscreenwidth; opstream << "\nScreenheight:\n"; @@ -167,7 +168,7 @@ void SaveSettings() bool LoadSettings() { - ifstream ipstream(ConvertFileName(":Data:config.txt"), std::ios::in); + ifstream ipstream(Folders::getConfigFilePath(), std::ios::in); if ( !ipstream || ipstream.fail() ) { printf("Config file not found\n"); return false; diff --git a/Source/Utils/Folders.cpp b/Source/Utils/Folders.cpp new file mode 100644 index 0000000..7e08959 --- /dev/null +++ b/Source/Utils/Folders.cpp @@ -0,0 +1,62 @@ +/* +Copyright (C) 2003, 2010 - Wolfire Games +Copyright (C) 2010-2016 - Lugaru contributors (see AUTHORS file) + +This file is part of Lugaru. + +Lugaru is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +Lugaru is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with Lugaru. If not, see . +*/ + +#include "Folders.h" +#include + +const std::string Folders::dataDir = DATADIR; + +std::string Folders::getScreenshotDir() +{ + /* TODO - create folder if missing */ + return getUserDataPath() + "/Screenshots"; +} + +std::string Folders::getResourcePath(std::string filepath) +{ + return dataDir + '/' + filepath; +} + +std::string Folders::getUserDataPath() +{ + return getGenericDirectory("XDG_DATA_HOME", ".local/share"); +} + +std::string Folders::getConfigFilePath() +{ + return getGenericDirectory("XDG_CONFIG_HOME", ".config") + "/config.txt"; +} + +/* Generic code for XDG ENVVAR test and fallback */ +std::string Folders::getGenericDirectory(const char* ENVVAR, const std::string fallback) { + char* path = getenv(ENVVAR); + std::string ret; + if((path != NULL) && (strlen(path) != 0)) { + ret = std::string(path) + "/lugaru"; + } else { + path = getenv("HOME"); + if((path != NULL) && (strlen(path) != 0)) { + ret = std::string(path) + '/' + fallback + "/lugaru"; + } else { + ret = ""; + } + } + return ret; +} diff --git a/Source/Utils/Folders.h b/Source/Utils/Folders.h new file mode 100644 index 0000000..1dd46fb --- /dev/null +++ b/Source/Utils/Folders.h @@ -0,0 +1,51 @@ +/* +Copyright (C) 2003, 2010 - Wolfire Games +Copyright (C) 2010-2016 - Lugaru contributors (see AUTHORS file) + +This file is part of Lugaru. + +Lugaru is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +Lugaru is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with Lugaru. If not, see . +*/ + +#ifndef _FOLDERS_H_ +#define _FOLDERS_H_ + +#include + +#ifndef DATADIR +#define DATADIR "Data" +#endif + +class Folders +{ + static const std::string dataDir; + +public: + /* Returns path to the screenshot directory. Creates it if needed. */ + static std::string getScreenshotDir(); + + /* Returns full path for a game resource */ + static std::string getResourcePath(std::string filepath); + + /* Returns full path for user data */ + static std::string getUserDataPath(); + + /* Returns full path for config file */ + static std::string getConfigFilePath(); + +private: + static std::string getGenericDirectory(const char* ENVVAR, const std::string fallback); +}; + +#endif /* _FOLDERS_H_ */