diff options
-rw-r--r-- | options/group.cpp | 44 | ||||
-rw-r--r-- | options/group.hpp | 1 |
2 files changed, 39 insertions, 6 deletions
diff --git a/options/group.cpp b/options/group.cpp index 60e8a7b4..545ea99f 100644 --- a/options/group.cpp +++ b/options/group.cpp @@ -10,9 +10,11 @@ #include "defs.hpp" #include "compat/timer.hpp" +#include "opentrack-library-path.h" #include <cmath> +#include <QFile> #include <QStandardPaths> #include <QDir> #include <QDebug> @@ -63,14 +65,44 @@ bool group::contains(const QString &s) const return kvs.find(s) != kvs.cend(); } +bool group::is_portable_installation() +{ +#if defined _WIN32 + if (QFile::exists(OPENTRACK_BASE_PATH + "/portable.txt")) + return true; +#endif + return false; +} + QString group::ini_directory() { - const auto dirs = QStandardPaths::standardLocations(QStandardPaths::DocumentsLocation); - if (dirs.size() == 0) - return ""; - if (QDir(dirs[0]).mkpath(OPENTRACK_ORG)) - return dirs[0] + "/" OPENTRACK_ORG; - return ""; + + QString dir; + + if (is_portable_installation()) + { + dir = OPENTRACK_BASE_PATH; + + static const QString subdir = "ini"; + + if (!QDir(dir).mkpath(subdir)) + return QString(); + + return dir + '/' + subdir; + } + else + { + dir = QStandardPaths::standardLocations(QStandardPaths::DocumentsLocation).value(0, QString()); + if (dir.isEmpty()) + return QString(); + if (!QDir(dir).mkpath(OPENTRACK_ORG)) + return QString(); + + dir += '/'; + dir += OPENTRACK_ORG; + } + + return dir; } QString group::ini_filename() diff --git a/options/group.hpp b/options/group.hpp index 93806193..c07fe576 100644 --- a/options/group.hpp +++ b/options/group.hpp @@ -49,6 +49,7 @@ public: static QString ini_pathname(); static QString ini_combine(const QString& filename); static QStringList ini_list(); + static bool is_portable_installation(); static void mark_ini_modified(); |