summaryrefslogtreecommitdiff
path: root/src/pluginlist.cpp
diff options
context:
space:
mode:
authorChris Bessent <lost.dragonist@gmail.com>2022-01-23 08:25:58 -0700
committerChris Bessent <lost.dragonist@gmail.com>2022-01-23 08:25:58 -0700
commitfeb411fb2a320284cb01ee9f5ca13baf105c1f29 (patch)
tree00955a52e95757251dd366d0bf11aedccef55774 /src/pluginlist.cpp
parent3b1ee9d43bdf09cda7830322e8be4f2a408978b1 (diff)
Force priority of primary plugins
This fixes a problem with new instances where the primary plugins would be ordered alphabetically instead of in the correct order.
Diffstat (limited to 'src/pluginlist.cpp')
-rw-r--r--src/pluginlist.cpp39
1 files changed, 35 insertions, 4 deletions
diff --git a/src/pluginlist.cpp b/src/pluginlist.cpp
index 3812143a..692d03dd 100644
--- a/src/pluginlist.cpp
+++ b/src/pluginlist.cpp
@@ -272,6 +272,8 @@ void PluginList::refresh(const QString &profileName
gamePlugins->readPluginLists(m_Organizer.managedGameOrganizer()->pluginList());
}
+ fixPrimaryPlugins();
+
testMasters();
updateIndices();
@@ -287,6 +289,35 @@ void PluginList::refresh(const QString &profileName
m_Refreshed();
}
+void PluginList::fixPrimaryPlugins()
+{
+ if (!m_Organizer.settings().game().forceEnableCoreFiles()) {
+ return;
+ }
+
+ // This function ensures that the primary plugins are first and in the correct order
+ QStringList primaryPlugins = m_Organizer.managedGame()->primaryPlugins();
+ int prio = 0;
+ bool somethingChanged = false;
+ for (QString plugin : primaryPlugins) {
+ std::map<QString, int>::iterator iter = m_ESPsByName.find(plugin);
+ // Plugin is present?
+ if (iter != m_ESPsByName.end()) {
+ if (prio != m_ESPs[iter->second].priority) {
+ // Priority is wrong! Fix it!
+ int newPrio = prio;
+ setPluginPriority(iter->second, newPrio, true /* isForced */);
+ somethingChanged = true;
+ }
+ prio++;
+ }
+ }
+
+ if (somethingChanged) {
+ writePluginsList();
+ }
+}
+
void PluginList::fixPriorities()
{
std::vector<std::pair<int, int>> espPrios;
@@ -1423,7 +1454,7 @@ Qt::ItemFlags PluginList::flags(const QModelIndex &modelIndex) const
return result;
}
-void PluginList::setPluginPriority(int row, int &newPriority)
+void PluginList::setPluginPriority(int row, int &newPriority, bool isForced)
{
int newPriorityTemp = newPriority;
@@ -1490,11 +1521,11 @@ void PluginList::changePluginPriority(std::vector<int> rows, int newPriority)
// don't try to move plugins before force-enabled plugins
for (std::vector<ESPInfo>::const_iterator iter = m_ESPs.begin();
- iter != m_ESPs.end(); ++iter) {
+ iter != m_ESPs.end(); ++iter) {
if (iter->forceEnabled) {
- newPriority = std::max(newPriority, iter->priority+1);
+ newPriority = std::max(newPriority, iter->priority + 1);
}
- maxPriority = std::max(maxPriority, iter->priority+1);
+ maxPriority = std::max(maxPriority, iter->priority + 1);
minPriority = std::min(minPriority, iter->priority);
}