summaryrefslogtreecommitdiff
path: root/src/profile.cpp
diff options
context:
space:
mode:
authorLostDragonist <lost.dragonist@gmail.com>2019-01-11 01:39:05 -0600
committerLostDragonist <lost.dragonist@gmail.com>2019-01-11 01:51:11 -0600
commit347ac2b8b5f34a2583ae7844e0dfd79773657270 (patch)
treeec4de70150b2e61e08cf1a17e7da646e85d0ae01 /src/profile.cpp
parent183069a85db598c577ee34fab046f812009c1f18 (diff)
Support for force loading libraries
Diffstat (limited to 'src/profile.cpp')
-rw-r--r--src/profile.cpp118
1 files changed, 117 insertions, 1 deletions
diff --git a/src/profile.cpp b/src/profile.cpp
index 09c2a5f5..02257de9 100644
--- a/src/profile.cpp
+++ b/src/profile.cpp
@@ -884,7 +884,6 @@ QVariant Profile::setting(const QString &section, const QString &name,
return m_Settings->value(section + "/" + name, fallback);
}
-
void Profile::storeSetting(const QString &section, const QString &name,
const QVariant &value)
{
@@ -906,7 +905,124 @@ void Profile::removeSetting(const QString &name)
removeSetting("", name);
}
+QVariantMap Profile::settingsByGroup(const QString &section) const
+{
+ QVariantMap results;
+ m_Settings->beginGroup(section);
+ for (auto key : m_Settings->childKeys()) {
+ results[key] = m_Settings->value(key);
+ }
+ m_Settings->endGroup();
+ return results;
+}
+
+void Profile::storeSettingsByGroup(const QString &section, const QVariantMap &values)
+{
+ m_Settings->beginGroup(section);
+ for (auto key : values.keys()) {
+ m_Settings->setValue(key, values[key]);
+ }
+ m_Settings->endGroup();
+}
+
+QList<QVariantMap> Profile::settingsByArray(const QString &prefix) const
+{
+ QList<QVariantMap> results;
+ int size = m_Settings->beginReadArray(prefix);
+ for (int i = 0; i < size; i++) {
+ m_Settings->setArrayIndex(i);
+ QVariantMap item;
+ for (auto key : m_Settings->childKeys()) {
+ item[key] = m_Settings->value(key);
+ }
+ results.append(item);
+ }
+ m_Settings->endArray();
+ return results;
+}
+
+void Profile::storeSettingsByArray(const QString &prefix, const QList<QVariantMap> &values)
+{
+ m_Settings->beginWriteArray(prefix);
+ for (int i = 0; i < values.length(); i++) {
+ m_Settings->setArrayIndex(i);
+ for (auto key : values.at(i).keys()) {
+ m_Settings->setValue(key, values.at(i)[key]);
+ }
+ }
+ m_Settings->endArray();
+}
+
int Profile::getPriorityMinimum() const
{
return m_ModIndexByPriority.begin()->first;
}
+
+bool Profile::forcedLibrariesEnabled(const QString &executable)
+{
+ return setting("forced_libraries", executable + "/enabled", false).toBool();
+}
+
+void Profile::setForcedLibrariesEnabled(const QString &executable, bool enabled)
+{
+ storeSetting("forced_libraries", executable + "/enabled", enabled);
+}
+
+QList<ExecutableForcedLoadSetting> Profile::determineForcedLibraries(const QString &executable)
+{
+ QList<ExecutableForcedLoadSetting> results;
+
+ auto rawSettings = settingsByArray("forced_libraries/" + executable);
+ auto forcedLoads = m_GamePlugin->executableForcedLoads();
+
+ // look for enabled status on forced loads and add those
+ for (auto forcedLoad : forcedLoads) {
+ bool found = false;
+ for (auto rawSetting : rawSettings) {
+ if ((rawSetting.value("process").toString().compare(forcedLoad.process(), Qt::CaseInsensitive) == 0)
+ && (rawSetting.value("library").toString().compare(forcedLoad.library(), Qt::CaseInsensitive) == 0))
+ {
+ results.append(forcedLoad.withEnabled(rawSetting.value("enabled", false).toBool()));
+ found = true;
+ }
+ }
+ if (!found) {
+ results.append(forcedLoad);
+ }
+ }
+
+ // add everything else
+ for (auto rawSetting : rawSettings) {
+ bool add = true;
+ for (auto forcedLoad : forcedLoads) {
+ if ((rawSetting.value("process").toString().compare(forcedLoad.process(), Qt::CaseInsensitive) == 0)
+ && (rawSetting.value("library").toString().compare(forcedLoad.library(), Qt::CaseInsensitive) == 0))
+ {
+ add = false;
+ }
+ }
+ if (add) {
+ results.append(
+ ExecutableForcedLoadSetting(
+ rawSetting.value("process").toString(),
+ rawSetting.value("library").toString()
+ ).withEnabled(rawSetting.value("enabled", false).toBool())
+ );
+ }
+ }
+
+ return results;
+}
+
+void Profile::saveForcedLibraries(const QString &executable, const QList<ExecutableForcedLoadSetting> &values)
+{
+ QList<QVariantMap> rawSettings;
+ for (auto setting : values) {
+ QVariantMap rawSetting;
+ rawSetting["enabled"] = setting.enabled();
+ rawSetting["process"] = setting.process();
+ rawSetting["library"] = setting.library();
+ rawSettings.append(rawSetting);
+ }
+ storeSettingsByArray("forced_libraries/" + executable, rawSettings);
+}