diff options
| author | 2023-04-30 18:31:18 -0400 | |
|---|---|---|
| committer | 2023-04-30 18:31:18 -0400 | |
| commit | 4de57f628bc74f00ba1885e91c84ea07c5405d8f (patch) | |
| tree | 5d91900751e826d491ff1b2ebc571a787e84f864 /SQLiteStudio3/coreSQLiteStudio/services/config.cpp | |
| parent | 74d881cefa9097e58e129e37b9c44d680d8c7dfe (diff) | |
| parent | 3565aad630864ecdbe53fdaa501ea708555b3c7c (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.cpp | 59 |
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; +} |
