diff options
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; +} |
