summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/organizercore.cpp10
-rw-r--r--src/plugincontainer.cpp6
-rw-r--r--src/settings.cpp264
-rw-r--r--src/settings.h123
-rw-r--r--src/settingsdialogplugins.cpp28
5 files changed, 228 insertions, 203 deletions
diff --git a/src/organizercore.cpp b/src/organizercore.cpp
index ec13ca9c..af0cf969 100644
--- a/src/organizercore.cpp
+++ b/src/organizercore.cpp
@@ -512,7 +512,7 @@ void OrganizerCore::disconnectPlugins()
m_DownloadManager.setPluginContainer(nullptr);
m_ModList.setPluginContainer(nullptr);
- m_Settings.clearPlugins();
+ m_Settings.plugins().clearPlugins();
m_GamePlugin = nullptr;
m_PluginContainer = nullptr;
}
@@ -864,26 +864,26 @@ void OrganizerCore::modDataChanged(MOBase::IModInterface *)
QVariant OrganizerCore::pluginSetting(const QString &pluginName,
const QString &key) const
{
- return m_Settings.pluginSetting(pluginName, key);
+ return m_Settings.plugins().pluginSetting(pluginName, key);
}
void OrganizerCore::setPluginSetting(const QString &pluginName,
const QString &key, const QVariant &value)
{
- m_Settings.setPluginSetting(pluginName, key, value);
+ m_Settings.plugins().setPluginSetting(pluginName, key, value);
}
QVariant OrganizerCore::persistent(const QString &pluginName,
const QString &key,
const QVariant &def) const
{
- return m_Settings.pluginPersistent(pluginName, key, def);
+ return m_Settings.plugins().pluginPersistent(pluginName, key, def);
}
void OrganizerCore::setPersistent(const QString &pluginName, const QString &key,
const QVariant &value, bool sync)
{
- m_Settings.setPluginPersistent(pluginName, key, value, sync);
+ m_Settings.plugins().setPluginPersistent(pluginName, key, value, sync);
}
QString OrganizerCore::pluginDataPath() const
diff --git a/src/plugincontainer.cpp b/src/plugincontainer.cpp
index 62cdff1e..16a77387 100644
--- a/src/plugincontainer.cpp
+++ b/src/plugincontainer.cpp
@@ -95,7 +95,7 @@ bool PluginContainer::registerPlugin(QObject *plugin, const QString &fileName)
return false;
}
plugin->setProperty("filename", fileName);
- m_Organizer->settings().registerPlugin(pluginObj);
+ m_Organizer->settings().plugins().registerPlugin(pluginObj);
}
{ // diagnosis plugin
@@ -266,7 +266,7 @@ void PluginContainer::loadPlugins()
"(Please note: If this is the first time you see this message for this plugin you may want to give it another try. "
"The plugin may be able to recover from the problem)").arg(fileName),
QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes) == QMessageBox::Yes) {
- m_Organizer->settings().addBlacklistPlugin(fileName);
+ m_Organizer->settings().plugins().addBlacklistPlugin(fileName);
}
loadCheck.close();
}
@@ -279,7 +279,7 @@ void PluginContainer::loadPlugins()
while (iter.hasNext()) {
iter.next();
- if (m_Organizer->settings().pluginBlacklisted(iter.fileName())) {
+ if (m_Organizer->settings().plugins().pluginBlacklisted(iter.fileName())) {
log::debug("plugin \"{}\" blacklisted", iter.fileName());
continue;
}
diff --git a/src/settings.cpp b/src/settings.cpp
index 34b1b4ac..072318a2 100644
--- a/src/settings.cpp
+++ b/src/settings.cpp
@@ -242,7 +242,7 @@ Settings *Settings::s_Instance = nullptr;
Settings::Settings(const QString& path) :
m_Settings(path, QSettings::IniFormat),
- m_Geometry(m_Settings), m_Colors(m_Settings)
+ m_Geometry(m_Settings), m_Colors(m_Settings), m_Plugins(m_Settings)
{
if (s_Instance != nullptr) {
throw std::runtime_error("second instance of \"Settings\" created");
@@ -319,25 +319,6 @@ QString Settings::getFilename() const
return m_Settings.fileName();
}
-void Settings::clearPlugins()
-{
- m_Plugins.clear();
- m_PluginSettings.clear();
-
- m_PluginBlacklist.clear();
-
- ScopedReadArray sra(m_Settings, "pluginBlacklist");
- for (int i = 0; i < sra.count(); ++i) {
- m_Settings.setArrayIndex(i);
- m_PluginBlacklist.insert(m_Settings.value("name").toString());
- }
-}
-
-bool Settings::pluginBlacklisted(const QString &fileName) const
-{
- return m_PluginBlacklist.contains(fileName);
-}
-
void Settings::registerAsNXMHandler(bool force)
{
const auto nxmPath = QCoreApplication::applicationDirPath() + "/nxmhandler.exe";
@@ -371,24 +352,6 @@ void Settings::managedGameChanged(IPluginGame const *gamePlugin)
m_GamePlugin = gamePlugin;
}
-void Settings::registerPlugin(IPlugin *plugin)
-{
- m_Plugins.push_back(plugin);
- m_PluginSettings.insert(plugin->name(), QVariantMap());
- m_PluginDescriptions.insert(plugin->name(), QVariantMap());
- for (const PluginSetting &setting : plugin->settings()) {
- QVariant temp = m_Settings.value("Plugins/" + plugin->name() + "/" + setting.key, setting.defaultValue);
- if (!temp.convert(setting.defaultValue.type())) {
- log::warn(
- "failed to interpret \"{}\" as correct type for \"{}\" in plugin \"{}\", using default",
- temp.toString(), setting.key, plugin->name());
- temp = setting.defaultValue;
- }
- m_PluginSettings[plugin->name()][setting.key] = temp;
- m_PluginDescriptions[plugin->name()][setting.key] = QString("%1 (default: %2)").arg(setting.description).arg(setting.defaultValue.toString());
- }
-}
-
bool Settings::obfuscate(const QString key, const QString data)
{
QString finalKey("ModOrganizer2_" + key);
@@ -921,51 +884,6 @@ bool Settings::archiveParsing() const
return m_Settings.value("Settings/archive_parsing_experimental", false).toBool();
}
-QVariant Settings::pluginSetting(const QString &pluginName, const QString &key) const
-{
- auto iterPlugin = m_PluginSettings.find(pluginName);
- if (iterPlugin == m_PluginSettings.end()) {
- return QVariant();
- }
- auto iterSetting = iterPlugin->find(key);
- if (iterSetting == iterPlugin->end()) {
- return QVariant();
- }
-
- return *iterSetting;
-}
-
-void Settings::setPluginSetting(const QString &pluginName, const QString &key, const QVariant &value)
-{
- auto iterPlugin = m_PluginSettings.find(pluginName);
- if (iterPlugin == m_PluginSettings.end()) {
- throw MyException(tr("attempt to store setting for unknown plugin \"%1\"").arg(pluginName));
- }
-
- // store the new setting both in memory and in the ini
- m_PluginSettings[pluginName][key] = value;
- m_Settings.setValue("Plugins/" + pluginName + "/" + key, value);
-}
-
-QVariant Settings::pluginPersistent(const QString &pluginName, const QString &key, const QVariant &def) const
-{
- if (!m_PluginSettings.contains(pluginName)) {
- return def;
- }
- return m_Settings.value("PluginPersistance/" + pluginName + "/" + key, def);
-}
-
-void Settings::setPluginPersistent(const QString &pluginName, const QString &key, const QVariant &value, bool sync)
-{
- if (!m_PluginSettings.contains(pluginName)) {
- throw MyException(tr("attempt to store setting for unknown plugin \"%1\"").arg(pluginName));
- }
- m_Settings.setValue("PluginPersistance/" + pluginName + "/" + key, value);
- if (sync) {
- m_Settings.sync();
- }
-}
-
QString Settings::language()
{
QString result = m_Settings.value("Settings/language", "").toString();
@@ -1122,24 +1040,6 @@ void Settings::updateServers(ServerList servers)
}
}
-void Settings::addBlacklistPlugin(const QString &fileName)
-{
- m_PluginBlacklist.insert(fileName);
- writePluginBlacklist();
-}
-
-void Settings::writePluginBlacklist()
-{
- m_Settings.remove("pluginBlacklist");
-
- ScopedWriteArray swa(m_Settings, "pluginBlacklist");
- int idx = 0;
- for (const QString &plugin : m_PluginBlacklist) {
- m_Settings.setArrayIndex(idx++);
- m_Settings.setValue("name", plugin);
- }
-}
-
std::map<QString, QString> Settings::getRecentDirectories() const
{
std::map<QString, QString> map;
@@ -1365,6 +1265,16 @@ const ColorSettings& Settings::colors() const
return m_Colors;
}
+PluginSettings& Settings::plugins()
+{
+ return m_Plugins;
+}
+
+const PluginSettings& Settings::plugins() const
+{
+ return m_Plugins;
+}
+
QSettings::Status Settings::sync() const
{
m_Settings.sync();
@@ -1772,6 +1682,158 @@ void ColorSettings::setPluginListContained(const QColor& c)
}
+PluginSettings::PluginSettings(QSettings& settings)
+ : m_Settings(settings)
+{
+}
+
+void PluginSettings::clearPlugins()
+{
+ m_Plugins.clear();
+ m_PluginSettings.clear();
+
+ m_PluginBlacklist.clear();
+
+ ScopedReadArray sra(m_Settings, "pluginBlacklist");
+ for (int i = 0; i < sra.count(); ++i) {
+ m_Settings.setArrayIndex(i);
+ m_PluginBlacklist.insert(m_Settings.value("name").toString());
+ }
+}
+
+void PluginSettings::registerPlugin(IPlugin *plugin)
+{
+ m_Plugins.push_back(plugin);
+ m_PluginSettings.insert(plugin->name(), QVariantMap());
+ m_PluginDescriptions.insert(plugin->name(), QVariantMap());
+ for (const PluginSetting &setting : plugin->settings()) {
+ QVariant temp = m_Settings.value("Plugins/" + plugin->name() + "/" + setting.key, setting.defaultValue);
+ if (!temp.convert(setting.defaultValue.type())) {
+ log::warn(
+ "failed to interpret \"{}\" as correct type for \"{}\" in plugin \"{}\", using default",
+ temp.toString(), setting.key, plugin->name());
+ temp = setting.defaultValue;
+ }
+ m_PluginSettings[plugin->name()][setting.key] = temp;
+ m_PluginDescriptions[plugin->name()][setting.key] = QString("%1 (default: %2)").arg(setting.description).arg(setting.defaultValue.toString());
+ }
+}
+
+bool PluginSettings::pluginBlacklisted(const QString &fileName) const
+{
+ return m_PluginBlacklist.contains(fileName);
+}
+
+QVariant PluginSettings::pluginSetting(const QString &pluginName, const QString &key) const
+{
+ auto iterPlugin = m_PluginSettings.find(pluginName);
+ if (iterPlugin == m_PluginSettings.end()) {
+ return QVariant();
+ }
+ auto iterSetting = iterPlugin->find(key);
+ if (iterSetting == iterPlugin->end()) {
+ return QVariant();
+ }
+
+ return *iterSetting;
+}
+
+void PluginSettings::setPluginSetting(const QString &pluginName, const QString &key, const QVariant &value)
+{
+ auto iterPlugin = m_PluginSettings.find(pluginName);
+ if (iterPlugin == m_PluginSettings.end()) {
+ throw MyException(QObject::tr("attempt to store setting for unknown plugin \"%1\"").arg(pluginName));
+ }
+
+ // store the new setting both in memory and in the ini
+ m_PluginSettings[pluginName][key] = value;
+ m_Settings.setValue("Plugins/" + pluginName + "/" + key, value);
+}
+
+QVariant PluginSettings::pluginPersistent(const QString &pluginName, const QString &key, const QVariant &def) const
+{
+ if (!m_PluginSettings.contains(pluginName)) {
+ return def;
+ }
+ return m_Settings.value("PluginPersistance/" + pluginName + "/" + key, def);
+}
+
+void PluginSettings::setPluginPersistent(const QString &pluginName, const QString &key, const QVariant &value, bool sync)
+{
+ if (!m_PluginSettings.contains(pluginName)) {
+ throw MyException(QObject::tr("attempt to store setting for unknown plugin \"%1\"").arg(pluginName));
+ }
+ m_Settings.setValue("PluginPersistance/" + pluginName + "/" + key, value);
+ if (sync) {
+ m_Settings.sync();
+ }
+}
+
+void PluginSettings::addBlacklistPlugin(const QString &fileName)
+{
+ m_PluginBlacklist.insert(fileName);
+ writePluginBlacklist();
+}
+
+void PluginSettings::writePluginBlacklist()
+{
+ m_Settings.remove("pluginBlacklist");
+
+ ScopedWriteArray swa(m_Settings, "pluginBlacklist");
+ int idx = 0;
+ for (const QString &plugin : m_PluginBlacklist) {
+ m_Settings.setArrayIndex(idx++);
+ m_Settings.setValue("name", plugin);
+ }
+}
+
+QVariantMap PluginSettings::pluginSettings(const QString &pluginName) const
+{
+ return m_PluginSettings[pluginName];
+}
+
+void PluginSettings::setPluginSettings(const QString &pluginName, const QVariantMap& map)
+{
+ m_PluginSettings[pluginName] = map;
+}
+
+QVariantMap PluginSettings::pluginDescriptions(const QString &pluginName) const
+{
+ return m_PluginDescriptions[pluginName];
+}
+
+void PluginSettings::pluginDescriptions(const QString &pluginName, const QVariantMap& map)
+{
+ m_PluginDescriptions[pluginName] = map;
+}
+
+const QSet<QString>& PluginSettings::pluginBlacklist() const
+{
+ return m_PluginBlacklist;
+}
+
+void PluginSettings::setPluginBlacklist(const QStringList& pluginNames)
+{
+ m_PluginBlacklist.clear();
+
+ for (const auto& name : pluginNames) {
+ m_PluginBlacklist.insert(name);
+ }
+}
+
+void PluginSettings::save()
+{
+ for (auto iterPlugins=m_PluginSettings.begin(); iterPlugins!=m_PluginSettings.end(); ++iterPlugins) {
+ for (auto iterSettings=iterPlugins->begin(); iterSettings!=iterPlugins->end(); ++iterSettings) {
+ const auto key = "Plugins/" + iterPlugins.key() + "/" + iterSettings.key();
+ m_Settings.setValue(key, iterSettings.value());
+ }
+ }
+
+ writePluginBlacklist();
+}
+
+
GeometrySaver::GeometrySaver(Settings& s, QDialog* dialog)
: m_settings(s), m_dialog(dialog)
{
diff --git a/src/settings.h b/src/settings.h
index 698cfe21..fc33e0de 100644
--- a/src/settings.h
+++ b/src/settings.h
@@ -128,6 +128,46 @@ private:
};
+class PluginSettings
+{
+public:
+ PluginSettings(QSettings& settings);
+
+ void clearPlugins();
+ void registerPlugin(MOBase::IPlugin *plugin);
+ void addPluginSettings(const std::vector<MOBase::IPlugin*> &plugins);
+
+ QVariant pluginSetting(const QString &pluginName, const QString &key) const;
+ void setPluginSetting(const QString &pluginName, const QString &key, const QVariant &value);
+ QVariant pluginPersistent(const QString &pluginName, const QString &key, const QVariant &def) const;
+ void setPluginPersistent(const QString &pluginName, const QString &key, const QVariant &value, bool sync);
+ void addBlacklistPlugin(const QString &fileName);
+ bool pluginBlacklisted(const QString &fileName) const;
+ void setPluginBlacklist(const QStringList& pluginNames);
+ std::vector<MOBase::IPlugin*> plugins() const { return m_Plugins; }
+
+ QVariantMap pluginSettings(const QString &pluginName) const;
+ void setPluginSettings(const QString &pluginName, const QVariantMap& map);
+
+ QVariantMap pluginDescriptions(const QString &pluginName) const;
+ void pluginDescriptions(const QString &pluginName, const QVariantMap& map);
+
+ const QSet<QString>& pluginBlacklist() const;
+
+ void save();
+
+private:
+ QSettings& m_Settings;
+ std::vector<MOBase::IPlugin*> m_Plugins;
+ QMap<QString, QVariantMap> m_PluginSettings;
+ QMap<QString, QVariantMap> m_PluginDescriptions;
+ QSet<QString> m_PluginBlacklist;
+
+ void readPluginBlacklist();
+ void writePluginBlacklist();
+};
+
+
enum class EndorsementState
{
Accepted = 1,
@@ -159,23 +199,6 @@ public:
QString getFilename() const;
/**
- * unregister all plugins from settings
- */
- void clearPlugins();
-
- /**
- * @brief register plugin to be configurable
- * @param plugin the plugin to register
- * @return true if the plugin may be registered, false if it is blacklisted
- */
- void registerPlugin(MOBase::IPlugin *plugin);
-
- /**
- * set up the settings for the specified plugins
- **/
- void addPluginSettings(const std::vector<MOBase::IPlugin*> &plugins);
-
- /**
* @return true if the user wants unchecked plugins (esp, esm) should be hidden from
* the virtual dat adirectory
**/
@@ -284,6 +307,9 @@ public:
ColorSettings& colors();
const ColorSettings& colors() const;
+ PluginSettings& plugins();
+ const PluginSettings& plugins() const;
+
/**
* @return true if the user has set up automatic login to nexus
@@ -423,42 +449,6 @@ public:
const QSettings &directInterface() const { return m_Settings; }
/**
- * @brief retrieve a setting for one of the installed plugins
- * @param pluginName name of the plugin
- * @param key name of the setting to retrieve
- * @return the requested value as a QVariant
- * @note an invalid QVariant is returned if the the plugin/setting is not declared
- */
- QVariant pluginSetting(const QString &pluginName, const QString &key) const;
-
- /**
- * @brief set a setting for one of the installed mods
- * @param pluginName name of the plugin
- * @param key name of the setting to change
- * @param value the new value to set
- * @throw an exception is thrown if pluginName is invalid
- */
- void setPluginSetting(const QString &pluginName, const QString &key, const QVariant &value);
-
- /**
- * @brief retrieve a persistent value for a plugin
- * @param pluginName name of the plugin to store data for
- * @param key id of the value to retrieve
- * @param def default value to return if the value is not set
- * @return the requested value
- */
- QVariant pluginPersistent(const QString &pluginName, const QString &key, const QVariant &def) const;
-
- /**
- * @brief set a persistent value for a plugin
- * @param pluginName name of the plugin to store data for
- * @param key id of the value to retrieve
- * @param value value to set
- * @throw an exception is thrown if pluginName is invalid
- */
- void setPluginPersistent(const QString &pluginName, const QString &key, const QVariant &value, bool sync);
-
- /**
* @return short code of the configured language (corresponding to the translation files)
*/
QString language();
@@ -469,24 +459,6 @@ public:
ServerList getServersFromOldMap() const;
void updateServers(ServerList servers);
- /**
- * @brief add a plugin that is to be blacklisted
- * @param fileName name of the plugin to blacklist
- */
- void addBlacklistPlugin(const QString &fileName);
-
- /**
- * @brief test if a plugin is blacklisted and shouldn't be loaded
- * @param fileName name of the plugin
- * @return true if the file is blacklisted
- */
- bool pluginBlacklisted(const QString &fileName) const;
-
- /**
- * @return all loaded MO plugins
- */
- std::vector<MOBase::IPlugin*> plugins() const { return m_Plugins; }
-
bool usePrereleases() const;
void setUsePrereleases(bool b);
@@ -513,12 +485,6 @@ public:
void dump() const;
- // temp
- QMap<QString, QVariantMap> m_PluginSettings;
- QMap<QString, QVariantMap> m_PluginDescriptions;
- QSet<QString> m_PluginBlacklist;
- void writePluginBlacklist();
-
public slots:
void managedGameChanged(MOBase::IPluginGame const *gamePlugin);
@@ -532,13 +498,12 @@ private:
mutable QSettings m_Settings;
GeometrySettings m_Geometry;
ColorSettings m_Colors;
+ PluginSettings m_Plugins;
LoadMechanism m_LoadMechanism;
- std::vector<MOBase::IPlugin*> m_Plugins;
static bool obfuscate(const QString key, const QString data);
static QString deObfuscate(const QString key);
- void readPluginBlacklist();
QString getConfigurablePath(const QString &key, const QString &def, bool resolve) const;
void setConfigurablePath(const QString &key, const QString& path);
};
diff --git a/src/settingsdialogplugins.cpp b/src/settingsdialogplugins.cpp
index 329ba301..956971fe 100644
--- a/src/settingsdialogplugins.cpp
+++ b/src/settingsdialogplugins.cpp
@@ -12,19 +12,19 @@ PluginsSettingsTab::PluginsSettingsTab(Settings& s, SettingsDialog& d)
// display plugin settings
QSet<QString> handledNames;
- for (IPlugin *plugin : settings().plugins()) {
+ for (IPlugin *plugin : settings().plugins().plugins()) {
if (handledNames.contains(plugin->name()))
continue;
QListWidgetItem *listItem = new QListWidgetItem(plugin->name(), ui->pluginsList);
listItem->setData(Qt::UserRole, QVariant::fromValue((void*)plugin));
- listItem->setData(Qt::UserRole + 1, settings().m_PluginSettings[plugin->name()]);
- listItem->setData(Qt::UserRole + 2, settings().m_PluginDescriptions[plugin->name()]);
+ listItem->setData(Qt::UserRole + 1, settings().plugins().pluginSettings(plugin->name()));
+ listItem->setData(Qt::UserRole + 2, settings().plugins().pluginDescriptions(plugin->name()));
ui->pluginsList->addItem(listItem);
handledNames.insert(plugin->name());
}
// display plugin blacklist
- for (const QString &pluginName : settings().m_PluginBlacklist) {
+ for (const QString &pluginName : settings().plugins().pluginBlacklist()) {
ui->pluginBlacklist->addItem(pluginName);
}
@@ -42,21 +42,19 @@ void PluginsSettingsTab::update()
// transfer plugin settings to in-memory structure
for (int i = 0; i < ui->pluginsList->count(); ++i) {
QListWidgetItem *item = ui->pluginsList->item(i);
- settings().m_PluginSettings[item->text()] = item->data(Qt::UserRole + 1).toMap();
- }
- // store plugin settings on disc
- for (auto iterPlugins = settings().m_PluginSettings.begin(); iterPlugins != settings().m_PluginSettings.end(); ++iterPlugins) {
- for (auto iterSettings = iterPlugins->begin(); iterSettings != iterPlugins->end(); ++iterSettings) {
- qsettings().setValue("Plugins/" + iterPlugins.key() + "/" + iterSettings.key(), iterSettings.value());
- }
+ settings().plugins().setPluginSettings(
+ item->text(), item->data(Qt::UserRole + 1).toMap());
}
- // store plugin blacklist
- settings().m_PluginBlacklist.clear();
+ // set plugin blacklist
+ QStringList names;
for (QListWidgetItem *item : ui->pluginBlacklist->findItems("*", Qt::MatchWildcard)) {
- settings().m_PluginBlacklist.insert(item->text());
+ names.push_back(item->text());
}
- settings().writePluginBlacklist();
+
+ settings().plugins().setPluginBlacklist(names);
+
+ settings().plugins().save();
}
void PluginsSettingsTab::closing()