aboutsummaryrefslogtreecommitdiffstats
path: root/SQLiteStudio3/coreSQLiteStudio/services/config.cpp
diff options
context:
space:
mode:
authorLibravatarUnit 193 <unit193@unit193.net>2023-04-30 18:31:18 -0400
committerLibravatarUnit 193 <unit193@unit193.net>2023-04-30 18:31:18 -0400
commit4de57f628bc74f00ba1885e91c84ea07c5405d8f (patch)
tree5d91900751e826d491ff1b2ebc571a787e84f864 /SQLiteStudio3/coreSQLiteStudio/services/config.cpp
parent74d881cefa9097e58e129e37b9c44d680d8c7dfe (diff)
parent3565aad630864ecdbe53fdaa501ea708555b3c7c (diff)
Update upstream source from tag 'upstream/3.4.4+dfsg'
Update to upstream version '3.4.4+dfsg' with Debian dir 482614bd23f0ef52dabc9803477204ad88e917ed
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;
+}