diff options
Diffstat (limited to 'src/modinfowithconflictinfo.cpp')
| -rw-r--r-- | src/modinfowithconflictinfo.cpp | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/src/modinfowithconflictinfo.cpp b/src/modinfowithconflictinfo.cpp index 2300405a..df2dc7ce 100644 --- a/src/modinfowithconflictinfo.cpp +++ b/src/modinfowithconflictinfo.cpp @@ -99,9 +99,15 @@ ModInfoWithConflictInfo::Conflicts ModInfoWithConflictInfo::doConflictCheck() co bool providesAnything = false; bool hasHiddenFiles = false; - int dataID = 0; + std::vector<int> dataIDs; if (m_Core.directoryStructure()->originExists(L"data")) { - dataID = m_Core.directoryStructure()->getOriginByName(L"data").getID(); + dataIDs.push_back(m_Core.directoryStructure()->getOriginByName(L"data").getID()); + } + for (const auto& origin : m_Core.managedGame()->secondaryDataDirectories().keys()) { + if (m_Core.directoryStructure()->originExists(origin.toStdWString())) { + dataIDs.push_back( + m_Core.directoryStructure()->getOriginByName(origin.toStdWString()).getID()); + } } std::wstring name = ToWString(this->name()); @@ -145,7 +151,9 @@ ModInfoWithConflictInfo::Conflicts ModInfoWithConflictInfo::doConflictCheck() co } auto alternatives = file->getAlternatives(); - if ((alternatives.size() == 0) || (alternatives.back().originID() == dataID)) { + if ((alternatives.size() == 0) || + std::find(dataIDs.begin(), dataIDs.end(), alternatives.back().originID()) != + dataIDs.end()) { // no alternatives -> no conflict providesAnything = true; } else { @@ -181,7 +189,8 @@ ModInfoWithConflictInfo::Conflicts ModInfoWithConflictInfo::doConflictCheck() co // Sort out the alternatives for (const auto& altInfo : alternatives) { - if ((altInfo.originID() != dataID) && + if (!(std::find(dataIDs.begin(), dataIDs.end(), + alternatives.back().originID()) != dataIDs.end()) && (altInfo.originID() != origin.getID())) { FilesOrigin& altOrigin = m_Core.directoryStructure()->getOriginByID(altInfo.originID()); |
