diff options
| -rw-r--r-- | src/settings.cpp | 97 | ||||
| -rw-r--r-- | src/settings.h | 37 | ||||
| -rw-r--r-- | src/settingsdialogpaths.cpp | 36 |
3 files changed, 107 insertions, 63 deletions
diff --git a/src/settings.cpp b/src/settings.cpp index 406544f7..34b1b4ac 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -492,34 +492,108 @@ QString Settings::getConfigurablePath(const QString &key, const QString &def, bool resolve) const { + const QString settingName = "Settings/" + key; + QString result = QDir::fromNativeSeparators( - m_Settings.value(QString("settings/") + key, QString("%BASE_DIR%/") + def) - .toString()); + m_Settings.value(settingName, QString("%BASE_DIR%/") + def).toString()); + if (resolve) { result.replace("%BASE_DIR%", getBaseDirectory()); } + return result; } +void Settings::setConfigurablePath(const QString &key, const QString& path) +{ + const QString settingName = "Settings/" + key; + + if (path.isEmpty()) { + m_Settings.remove(settingName); + } else { + m_Settings.setValue(settingName, path); + } +} + QString Settings::getBaseDirectory() const { return QDir::fromNativeSeparators(m_Settings.value( - "settings/base_directory", qApp->property("dataPath").toString()).toString()); + "settings/base_directory", + qApp->property("dataPath").toString()).toString()); } QString Settings::getDownloadDirectory(bool resolve) const { - return getConfigurablePath("download_directory", ToQString(AppConfig::downloadPath()), resolve); + return getConfigurablePath( + "download_directory", + ToQString(AppConfig::downloadPath()), + resolve); } QString Settings::getCacheDirectory(bool resolve) const { - return getConfigurablePath("cache_directory", ToQString(AppConfig::cachePath()), resolve); + return getConfigurablePath( + "cache_directory", + ToQString(AppConfig::cachePath()), + resolve); } QString Settings::getModDirectory(bool resolve) const { - return getConfigurablePath("mod_directory", ToQString(AppConfig::modsPath()), resolve); + return getConfigurablePath( + "mod_directory", + ToQString(AppConfig::modsPath()), + resolve); +} + +QString Settings::getProfileDirectory(bool resolve) const +{ + return getConfigurablePath( + "profiles_directory", + ToQString(AppConfig::profilesPath()), + resolve); +} + +QString Settings::getOverwriteDirectory(bool resolve) const +{ + return getConfigurablePath( + "overwrite_directory", + ToQString(AppConfig::overwritePath()), + resolve); +} + +void Settings::setBaseDirectory(const QString& path) +{ + if (path.isEmpty()) { + m_Settings.remove("Settings/base_directory"); + } else { + m_Settings.setValue("Settings/base_directory", path); + } +} + +void Settings::setDownloadDirectory(const QString& path) +{ + setConfigurablePath("download_directory", path); +} + +void Settings::setModDirectory(const QString& path) +{ + setConfigurablePath("mod_directory", path); +} + +void Settings::setCacheDirectory(const QString& path) +{ + setConfigurablePath("cache_directory", path); +} + +void Settings::setProfileDirectory(const QString& path) +{ + setConfigurablePath("profiles_directory", path); +} + +void Settings::setOverwriteDirectory(const QString& path) +{ + setConfigurablePath("overwrite_directory", path); } std::optional<QString> Settings::getManagedGameDirectory() const @@ -629,17 +703,6 @@ void Settings::removePreviousSeparatorColor() m_Settings.remove("previousSeparatorColor"); } -QString Settings::getProfileDirectory(bool resolve) const -{ - return getConfigurablePath("profiles_directory", ToQString(AppConfig::profilesPath()), resolve); -} - -QString Settings::getOverwriteDirectory(bool resolve) const -{ - return getConfigurablePath("overwrite_directory", - ToQString(AppConfig::overwritePath()), resolve); -} - bool Settings::getNexusApiKey(QString &apiKey) const { QString tempKey = deObfuscate("APIKEY"); diff --git a/src/settings.h b/src/settings.h index 810daac2..698cfe21 100644 --- a/src/settings.h +++ b/src/settings.h @@ -199,26 +199,19 @@ public: **/ QString getSteamAppID() const; - /** - * retrieves the base directory under which the other directories usually - * reside - */ QString getBaseDirectory() const; - - /** - * retrieve the directory where downloads are stored (with native separators) - **/ QString getDownloadDirectory(bool resolve = true) const; - - /** - * retrieve the directory where mods are stored (with native separators) - **/ QString getModDirectory(bool resolve = true) const; - - /** - * retrieve the directory where the web cache is stored (with native separators) - **/ QString getCacheDirectory(bool resolve = true) const; + QString getProfileDirectory(bool resolve = true) const; + QString getOverwriteDirectory(bool resolve = true) const; + + void setBaseDirectory(const QString& path); + void setDownloadDirectory(const QString& path); + void setModDirectory(const QString& path); + void setCacheDirectory(const QString& path); + void setProfileDirectory(const QString& path); + void setOverwriteDirectory(const QString& path); /** * retrieve the directory where the managed game is stored (with native separators) @@ -293,17 +286,6 @@ public: /** - * retrieve the directory where profiles stored (with native separators) - **/ - QString getProfileDirectory(bool resolve = true) const; - - /** - * retrieve the directory were new files are stored that can't be assigned - * to a mod (with native separators) - */ - QString getOverwriteDirectory(bool resolve = true) const; - - /** * @return true if the user has set up automatic login to nexus **/ bool automaticLoginEnabled() const; @@ -558,6 +540,7 @@ private: void readPluginBlacklist(); QString getConfigurablePath(const QString &key, const QString &def, bool resolve) const; + void setConfigurablePath(const QString &key, const QString& path); }; #endif // SETTINGS_H diff --git a/src/settingsdialogpaths.cpp b/src/settingsdialogpaths.cpp index 290ceeb3..32aaf4bf 100644 --- a/src/settingsdialogpaths.cpp +++ b/src/settingsdialogpaths.cpp @@ -40,22 +40,22 @@ PathsSettingsTab::PathsSettingsTab(Settings& s, SettingsDialog& d) void PathsSettingsTab::update() { - typedef std::tuple<QString, QString, std::wstring> Directory; + using Setter = void (Settings::*)(const QString&); + using Directory = std::tuple<QString, Setter, std::wstring>; QString basePath = settings().getBaseDirectory(); for (const Directory &dir :{ - Directory{ui->downloadDirEdit->text(), "download_directory", AppConfig::downloadPath()}, - Directory{ui->cacheDirEdit->text(), "cache_directory", AppConfig::cachePath()}, - Directory{ui->modDirEdit->text(), "mod_directory", AppConfig::modsPath()}, - Directory{ui->overwriteDirEdit->text(), "overwrite_directory", AppConfig::overwritePath()}, - Directory{ui->profilesDirEdit->text(), "profiles_directory", AppConfig::profilesPath()} + Directory{ui->downloadDirEdit->text(), &Settings::setDownloadDirectory, AppConfig::downloadPath()}, + Directory{ui->cacheDirEdit->text(), &Settings::setCacheDirectory, AppConfig::cachePath()}, + Directory{ui->modDirEdit->text(), &Settings::setModDirectory, AppConfig::modsPath()}, + Directory{ui->overwriteDirEdit->text(), &Settings::setOverwriteDirectory, AppConfig::overwritePath()}, + Directory{ui->profilesDirEdit->text(), &Settings::setProfileDirectory, AppConfig::profilesPath()} }) { - QString path, settingsKey; + QString path; + Setter setter; std::wstring defaultName; - std::tie(path, settingsKey, defaultName) = dir; - - settingsKey = QString("Settings/%1").arg(settingsKey); + std::tie(path, setter, defaultName) = dir; QString realPath = path; realPath.replace("%BASE_DIR%", ui->baseDirEdit->text()); @@ -69,25 +69,23 @@ void PathsSettingsTab::update() } } - if (QFileInfo(realPath) - != QFileInfo(basePath + "/" + QString::fromStdWString(defaultName))) { - qsettings().setValue(settingsKey, path); + if (QFileInfo(realPath) != QFileInfo(basePath + "/" + QString::fromStdWString(defaultName))) { + (settings().*setter)(path); } else { - qsettings().remove(settingsKey); + (settings().*setter)(""); } } - if (QFileInfo(ui->baseDirEdit->text()) != - QFileInfo(qApp->property("dataPath").toString())) { - qsettings().setValue("Settings/base_directory", ui->baseDirEdit->text()); + if (QFileInfo(ui->baseDirEdit->text()) != QFileInfo(qApp->property("dataPath").toString())) { + settings().setBaseDirectory(ui->baseDirEdit->text()); } else { - qsettings().remove("Settings/base_directory"); + settings().setBaseDirectory(""); } QFileInfo oldGameExe(settings().gamePlugin()->gameDirectory().absoluteFilePath(settings().gamePlugin()->binaryName())); QFileInfo newGameExe(ui->managedGameDirEdit->text()); if (oldGameExe != newGameExe) { - qsettings().setValue("gamePath", newGameExe.absolutePath()); + settings().setManagedGameDirectory(newGameExe.absolutePath()); } } |
