diff options
Diffstat (limited to 'src/settings.cpp')
| -rw-r--r-- | src/settings.cpp | 66 |
1 files changed, 44 insertions, 22 deletions
diff --git a/src/settings.cpp b/src/settings.cpp index d41723ca..54be183a 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -22,10 +22,11 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>. #include "settingsdialog.h" #include "utility.h" #include "helper.h" +#include "json.h" #include <gameinfo.h> #include <appconfig.h> #include <utility.h> -#include "json.h" +#include <iplugingame.h> #include <QCheckBox> #include <QLineEdit> @@ -57,13 +58,13 @@ private: static const unsigned char Key2[20] = { 0x99, 0xb8, 0x76, 0x42, 0x3e, 0xc1, 0x60, 0xa4, 0x5b, 0x01, 0xdb, 0xf8, 0x43, 0x3a, 0xb7, 0xb6, 0x98, 0xd4, 0x7d, 0xa2 }; -Settings *Settings::s_Instance = NULL; +Settings *Settings::s_Instance = nullptr; -Settings::Settings() - : m_Settings(ToQString(GameInfo::instance().getIniFilename()), QSettings::IniFormat) +Settings::Settings(const QSettings &settingsSource) + : m_Settings(settingsSource.fileName(), settingsSource.format()) { - if (s_Instance != NULL) { + if (s_Instance != nullptr) { throw std::runtime_error("second instance of \"Settings\" created"); } else { s_Instance = this; @@ -73,13 +74,13 @@ Settings::Settings() Settings::~Settings() { - s_Instance = NULL; + s_Instance = nullptr; } Settings &Settings::instance() { - if (s_Instance == NULL) { + if (s_Instance == nullptr) { throw std::runtime_error("no instance of \"Settings\""); } return *s_Instance; @@ -110,13 +111,18 @@ void Settings::registerAsNXMHandler(bool force) std::wstring executable = ToWString(QCoreApplication::applicationFilePath()); std::wstring mode = force ? L"forcereg" : L"reg"; std::wstring parameters = mode + L" " + GameInfo::instance().getGameShortName() + L" \"" + executable + L"\""; - HINSTANCE res = ::ShellExecuteW(NULL, L"open", nxmPath.c_str(), parameters.c_str(), NULL, SW_SHOWNORMAL); + HINSTANCE res = ::ShellExecuteW(nullptr, L"open", nxmPath.c_str(), parameters.c_str(), nullptr, SW_SHOWNORMAL); if ((int)res <= 32) { - QMessageBox::critical(NULL, tr("Failed"), + QMessageBox::critical(nullptr, tr("Failed"), tr("Sorry, failed to start the helper application")); } } +void Settings::managedGameChanged(IPluginGame *gamePlugin) +{ + m_GamePlugin = gamePlugin; +} + void Settings::registerPlugin(IPlugin *plugin) { m_Plugins.push_back(plugin); @@ -134,7 +140,6 @@ void Settings::registerPlugin(IPlugin *plugin) } } - QString Settings::obfuscate(const QString &password) const { QByteArray temp = password.toUtf8(); @@ -146,7 +151,6 @@ QString Settings::obfuscate(const QString &password) const return buffer.toBase64(); } - QString Settings::deObfuscate(const QString &password) const { QByteArray temp(QByteArray::fromBase64(password.toUtf8())); @@ -158,7 +162,6 @@ QString Settings::deObfuscate(const QString &password) const return QString::fromUtf8(buffer.constData()); } - bool Settings::hideUncheckedPlugins() const { return m_Settings.value("Settings/hide_unchecked_plugins", false).toBool(); @@ -176,15 +179,14 @@ bool Settings::automaticLoginEnabled() const QString Settings::getSteamAppID() const { - return m_Settings.value("Settings/app_id", ToQString(GameInfo::instance().getSteamAPPId(m_Settings.value("game_edition", 0).toInt()))).toString(); + return m_Settings.value("Settings/app_id", m_GamePlugin->steamAPPId()).toString(); } QString Settings::getDownloadDirectory() const { - return QDir::toNativeSeparators(m_Settings.value("Settings/download_directory", ToQString(GameInfo::instance().getDownloadDir())).toString()); + return getConfigurablePath("download_directory", ToQString(AppConfig::downloadPath())); } - void Settings::setDownloadSpeed(const QString &serverName, int bytesPerSecond) { m_Settings.beginGroup("Servers"); @@ -219,14 +221,19 @@ std::map<QString, int> Settings::getPreferredServers() return result; } +QString Settings::getConfigurablePath(const QString &key, const QString &def) const +{ + return m_Settings.value(QString("settings/") + key, qApp->property("dataPath").toString() + "/" + def).toString(); +} + QString Settings::getCacheDirectory() const { - return QDir::toNativeSeparators(m_Settings.value("Settings/cache_directory", ToQString(GameInfo::instance().getCacheDir())).toString()); + return getConfigurablePath("cache_directory", ToQString(AppConfig::cachePath())); } QString Settings::getModDirectory() const { - return QDir::toNativeSeparators(m_Settings.value("Settings/mod_directory", ToQString(GameInfo::instance().getModsDir())).toString()); + return getConfigurablePath("mod_directory", ToQString(AppConfig::modsPath())); } QString Settings::getNMMVersion() const @@ -659,7 +666,7 @@ void Settings::query(QWidget *parent) { // advanced settings if ((QDir::fromNativeSeparators(modDirEdit->text()) != QDir::fromNativeSeparators(getModDirectory())) && - (QMessageBox::question(NULL, tr("Confirm"), tr("Changing the mod directory affects all your profiles! " + (QMessageBox::question(nullptr, tr("Confirm"), tr("Changing the mod directory affects all your profiles! " "Mods not present (or named differently) in the new location will be disabled in all profiles. " "There is no way to undo this unless you backed up your profiles manually. Proceed?"), QMessageBox::Yes | QMessageBox::No) == QMessageBox::No)) { @@ -676,9 +683,24 @@ void Settings::query(QWidget *parent) QDir().mkpath(modDirEdit->text()); } - m_Settings.setValue("Settings/download_directory", QDir::toNativeSeparators(downloadDirEdit->text())); - m_Settings.setValue("Settings/cache_directory", QDir::toNativeSeparators(cacheDirEdit->text())); - m_Settings.setValue("Settings/mod_directory", QDir::toNativeSeparators(modDirEdit->text())); + if (QFileInfo(downloadDirEdit->text()) != + QFileInfo(qApp->property("dataPath").toString() + "/" + QString::fromStdWString(AppConfig::downloadPath()))) { + m_Settings.setValue("Settings/download_directory", QDir::toNativeSeparators(downloadDirEdit->text())); + } else { + m_Settings.remove("Settings/download_directory"); + } + if (QFileInfo(cacheDirEdit->text()) != + QFileInfo(qApp->property("dataPath").toString() + "/" + QString::fromStdWString(AppConfig::cachePath()))) { + m_Settings.setValue("Settings/cache_directory", QDir::toNativeSeparators(cacheDirEdit->text())); + } else { + m_Settings.remove("Settings/cache_directory"); + } + if (QFileInfo(modDirEdit->text()) != + QFileInfo(qApp->property("dataPath").toString() + "/" + QString::fromStdWString(AppConfig::modsPath()))) { + m_Settings.setValue("Settings/mod_directory", QDir::toNativeSeparators(modDirEdit->text())); + } else { + m_Settings.remove("Settings/mod_directory"); + } } @@ -698,7 +720,7 @@ void Settings::query(QWidget *parent) m_Settings.setValue("Settings/log_level", logLevelBox->currentIndex()); - if (appIDEdit->text() != ToQString(GameInfo::instance().getSteamAPPId())) { + if (appIDEdit->text() != m_GamePlugin->steamAPPId()) { m_Settings.setValue("Settings/app_id", appIDEdit->text()); } else { m_Settings.remove("Settings/app_id"); |
