diff options
| author | Tannin <devnull@localhost> | 2015-06-10 21:21:32 +0200 |
|---|---|---|
| committer | Tannin <devnull@localhost> | 2015-06-10 21:21:32 +0200 |
| commit | ef9a61886c090e184c042f884687f401e25b1faa (patch) | |
| tree | 857e32561b1936a8e9055336908728a6519aebc0 /src/modinfo.cpp | |
| parent | 13a40b43c87e36fa49a3db967f90560bb8ced691 (diff) | |
a mod that overwrites another yet is completely overwritten by another is now displayed as "redundant"
Diffstat (limited to 'src/modinfo.cpp')
| -rw-r--r-- | src/modinfo.cpp | 35 |
1 files changed, 18 insertions, 17 deletions
diff --git a/src/modinfo.cpp b/src/modinfo.cpp index 6c457163..3fa42da9 100644 --- a/src/modinfo.cpp +++ b/src/modinfo.cpp @@ -388,7 +388,8 @@ void ModInfoWithConflictInfo::doConflictCheck() const { m_OverwriteList.clear(); m_OverwrittenList.clear(); - bool regular = false; + + bool providesAnything = false; int dataID = 0; if ((*m_DirectoryStructure)->originExists(L"data")) { @@ -400,22 +401,24 @@ void ModInfoWithConflictInfo::doConflictCheck() const FilesOrigin &origin = (*m_DirectoryStructure)->getOriginByName(name); std::vector<FileEntry::Ptr> files = origin.getFiles(); // for all files in this origin - for (auto iter = files.begin(); iter != files.end(); ++iter) { - const std::vector<int> &alternatives = (*iter)->getAlternatives(); - if ((alternatives.size() == 0) - || (alternatives[0] == dataID)) { + for (FileEntry::Ptr file : files) { + const std::vector<int> &alternatives = file->getAlternatives(); + if ((alternatives.size() == 0) || (alternatives[0] == dataID)) { // no alternatives -> no conflict - regular = true; + providesAnything = true; } else { - if ((*iter)->getOrigin() != origin.getID()) { - FilesOrigin &altOrigin = (*m_DirectoryStructure)->getOriginByID((*iter)->getOrigin()); + if (file->getOrigin() != origin.getID()) { + FilesOrigin &altOrigin = (*m_DirectoryStructure)->getOriginByID(file->getOrigin()); unsigned int altIndex = ModInfo::getIndex(ToQString(altOrigin.getName())); m_OverwrittenList.insert(altIndex); + } else { + providesAnything = true; } + // for all non-providing alternative origins - for (auto altIter = alternatives.begin(); altIter != alternatives.end(); ++altIter) { - if ((*altIter != dataID) && (*altIter != origin.getID())) { - FilesOrigin &altOrigin = (*m_DirectoryStructure)->getOriginByID(*altIter); + for (int altId : alternatives) { + if ((altId != dataID) && (altId != origin.getID())) { + FilesOrigin &altOrigin = (*m_DirectoryStructure)->getOriginByID(altId); unsigned int altIndex = ModInfo::getIndex(ToQString(altOrigin.getName())); if (origin.getPriority() > altOrigin.getPriority()) { m_OverwriteList.insert(altIndex); @@ -430,16 +433,14 @@ void ModInfoWithConflictInfo::doConflictCheck() const m_LastConflictCheck = QTime::currentTime(); - if (!m_OverwriteList.empty() && !m_OverwrittenList.empty()) + if (!providesAnything) + m_CurrentConflictState = CONFLICT_REDUNDANT; + else if (!m_OverwriteList.empty() && !m_OverwrittenList.empty()) m_CurrentConflictState = CONFLICT_MIXED; else if (!m_OverwriteList.empty()) m_CurrentConflictState = CONFLICT_OVERWRITE; else if (!m_OverwrittenList.empty()) { - if (!regular) { - m_CurrentConflictState = CONFLICT_REDUNDANT; - } else { - m_CurrentConflictState = CONFLICT_OVERWRITTEN; - } + m_CurrentConflictState = CONFLICT_OVERWRITTEN; } else m_CurrentConflictState = CONFLICT_NONE; } |
