diff options
| author | Mikaël Capelle <capelle.mikael@gmail.com> | 2020-09-20 15:13:56 +0200 |
|---|---|---|
| committer | Mikaël Capelle <capelle.mikael@gmail.com> | 2020-09-20 15:13:56 +0200 |
| commit | 89c93c3d327d096cc35465b1557353861bbf76ca (patch) | |
| tree | 12a7431dfd888cbb5f7da2790d539d3c583010b2 /src | |
| parent | 4d9456dcf98a76a1af7f1287db67b4ba41c02b6b (diff) | |
Add pluginSetting[s]() and setPluginSetting() to IModInterface.
Diffstat (limited to 'src')
| -rw-r--r-- | src/modinfoforeign.h | 4 | ||||
| -rw-r--r-- | src/modinfooverwrite.h | 4 | ||||
| -rw-r--r-- | src/modinforegular.cpp | 56 | ||||
| -rw-r--r-- | src/modinforegular.h | 9 |
4 files changed, 73 insertions, 0 deletions
diff --git a/src/modinfoforeign.h b/src/modinfoforeign.h index ae4241ee..32484c64 100644 --- a/src/modinfoforeign.h +++ b/src/modinfoforeign.h @@ -66,6 +66,10 @@ public: virtual bool alwaysEnabled() const override { return true; } virtual void addInstalledFile(int, int) override {} + virtual QVariant pluginSetting(const QString& pluginName, const QString& key, const QVariant& defaultValue) const override { return defaultValue; } + virtual std::map<QString, QVariant> pluginSettings(const QString& pluginName) const override { return {}; } + virtual bool setPluginSetting(const QString& pluginName, const QString& key, const QVariant& value) override { return false; } + ModInfo::EModType modType() const { return m_ModType; } protected: diff --git a/src/modinfooverwrite.h b/src/modinfooverwrite.h index 9770ecbb..1c14806d 100644 --- a/src/modinfooverwrite.h +++ b/src/modinfooverwrite.h @@ -67,6 +67,10 @@ public: virtual QStringList archives(bool checkOnDisk = false) override; virtual void addInstalledFile(int, int) override {} + virtual QVariant pluginSetting(const QString& pluginName, const QString& key, const QVariant& defaultValue) const override { return defaultValue; } + virtual std::map<QString, QVariant> pluginSettings(const QString& pluginName) const override { return {}; } + virtual bool setPluginSetting(const QString& pluginName, const QString& key, const QVariant& value) override { return false; } + private: ModInfoOverwrite(PluginContainer *pluginContainer, const MOBase::IPluginGame* game, MOShared::DirectoryEntry **directoryStructure); diff --git a/src/modinforegular.cpp b/src/modinforegular.cpp index 8ef8e007..bdbf6759 100644 --- a/src/modinforegular.cpp +++ b/src/modinforegular.cpp @@ -205,6 +205,17 @@ void ModInfoRegular::readMeta() } metaFile.endArray(); + // Plugin settings: + metaFile.beginGroup("Plugins"); + for (auto pluginName: metaFile.childGroups()) { + metaFile.beginGroup(pluginName); + for (auto settingKey : metaFile.childKeys()) { + m_PluginSettings[pluginName][settingKey] = metaFile.value(settingKey); + } + metaFile.endGroup(); + } + metaFile.endGroup(); + m_MetaInfoChanged = false; } @@ -251,6 +262,18 @@ void ModInfoRegular::saveMeta() } metaFile.endArray(); + // Plugin settings: + metaFile.remove("Plugins"); + metaFile.beginGroup("Plugins"); + for (const auto& [pluginName, pluginSettings]: m_PluginSettings) { + metaFile.beginGroup(pluginName); + for (const auto& [settingName, settingValue]: pluginSettings) { + metaFile.setValue(settingName, settingValue); + } + metaFile.endGroup(); + } + metaFile.endGroup(); + metaFile.sync(); // sync needs to be called to ensure the file is created if (metaFile.status() == QSettings::NoError) { @@ -850,3 +873,36 @@ std::vector<QString> ModInfoRegular::getIniTweaks() const metaFile.endArray(); return result; } + + +std::map<QString, QVariant> ModInfoRegular::pluginSettings(const QString& pluginName) const +{ + auto itp = m_PluginSettings.find(pluginName); + if (itp == std::end(m_PluginSettings)) { + return {}; + } + return itp->second; +} + +QVariant ModInfoRegular::pluginSetting(const QString& pluginName, const QString& key, const QVariant& defaultValue) const +{ + auto itp = m_PluginSettings.find(pluginName); + if (itp == std::end(m_PluginSettings)) { + return defaultValue; + } + + auto its = itp->second.find(key); + if (its == std::end(itp->second)) { + return defaultValue; + } + + return its->second; +} + +bool ModInfoRegular::setPluginSetting(const QString& pluginName, const QString& key, const QVariant& value) +{ + m_PluginSettings[pluginName][key] = value; + m_MetaInfoChanged = true; + saveMeta(); + return true; +} diff --git a/src/modinforegular.h b/src/modinforegular.h index 7e70631e..345c4b6e 100644 --- a/src/modinforegular.h +++ b/src/modinforegular.h @@ -402,6 +402,12 @@ public: virtual void setCustomURL(QString const &) override; virtual QString getCustomURL() const override; +public: // Plugin operations: + + virtual QVariant pluginSetting(const QString& pluginName, const QString& key, const QVariant& defaultValue) const override; + virtual std::map<QString, QVariant> pluginSettings(const QString& pluginName) const override; + virtual bool setPluginSetting(const QString& pluginName, const QString& key, const QVariant& value) override; + private: void setEndorsedState(EEndorsedState endorsedState); @@ -449,6 +455,9 @@ private: int m_NexusID; std::set<std::pair<int, int>> m_InstalledFileIDs; + // List of plugin settings: + std::map<QString, std::map<QString, QVariant>> m_PluginSettings; + bool m_MetaInfoChanged; bool m_IsAlternate; bool m_Converted; |
