aboutsummaryrefslogtreecommitdiffstats
path: root/SQLiteStudio3/coreSQLiteStudio/services/config.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'SQLiteStudio3/coreSQLiteStudio/services/config.cpp')
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/services/config.cpp59
1 files changed, 59 insertions, 0 deletions
diff --git a/SQLiteStudio3/coreSQLiteStudio/services/config.cpp b/SQLiteStudio3/coreSQLiteStudio/services/config.cpp
index c03847a..8abd762 100644
--- a/SQLiteStudio3/coreSQLiteStudio/services/config.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/services/config.cpp
@@ -1,10 +1,14 @@
#include "services/config.h"
+#include <QDir>
+#include <QCoreApplication>
+#include <QSettings>
CFG_DEFINE(Core)
static const QString DB_FILE_NAME = QStringLiteral("settings3");
static QString MASTER_CONFIG_FILE = QString();
Config::AskUserForConfigDirFunc Config::askUserForConfigDirFunc;
+QSettings* globalSettingsInstance = nullptr;
Config::~Config()
{
@@ -24,3 +28,58 @@ void Config::setAskUserForConfigDirFunc(const AskUserForConfigDirFunc& value)
{
askUserForConfigDirFunc = value;
}
+
+QString Config::getPortableConfigPath()
+{
+ QStringList paths = QStringList({"./sqlitestudio-cfg", qApp->applicationDirPath() + "/sqlitestudio-cfg"});
+ QSet<QString> pathSet;
+ QDir dir;
+ for (const QString& path : paths)
+ {
+ dir = QDir(path);
+ pathSet << dir.absolutePath();
+ }
+
+ QString potentialPath;
+ QFileInfo file;
+ for (const QString& path : pathSet)
+ {
+ dir = QDir(path);
+ file = QFileInfo(dir.absolutePath());
+ if (!file.exists())
+ {
+ if (potentialPath.isNull())
+ potentialPath = dir.absolutePath();
+
+ continue;
+ }
+
+ if (!file.isDir() || !file.isReadable() || !file.isWritable())
+ continue;
+
+ for (QFileInfo& entryFile : dir.entryInfoList())
+ {
+ if (!entryFile.isReadable() || !entryFile.isWritable())
+ continue;
+ }
+
+ return dir.absolutePath();
+ }
+
+ return potentialPath;
+}
+
+QSettings* Config::getSettings()
+{
+ if (globalSettingsInstance == nullptr)
+ {
+ QString portableConfigPath = Config::getPortableConfigPath();
+ QFileInfo portableConfigInfo(portableConfigPath);
+ if (portableConfigInfo.exists() && portableConfigInfo.isDir() && portableConfigInfo.isReadable())
+ globalSettingsInstance = new QSettings(portableConfigPath + "/settings.ini", QSettings::IniFormat);
+ else
+ globalSettingsInstance = new QSettings();
+ }
+
+ return globalSettingsInstance;
+}