From 6dd246363e538d7730ff0eec3c23338553ca1392 Mon Sep 17 00:00:00 2001 From: LostDragonist Date: Fri, 22 Mar 2019 21:26:50 -0500 Subject: Fix origin determination for the case of a lower priority, loose files mod being added after a higher priority, archived files mod. --- src/shared/directoryentry.cpp | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) (limited to 'src/shared/directoryentry.cpp') diff --git a/src/shared/directoryentry.cpp b/src/shared/directoryentry.cpp index 8fc63188..1179110a 100644 --- a/src/shared/directoryentry.cpp +++ b/src/shared/directoryentry.cpp @@ -238,20 +238,30 @@ void FileEntry::addOrigin(int origin, FILETIME fileTime, const std::wstring &arc if (m_Parent != nullptr) { m_Parent->propagateOrigin(origin); } + + // If this file has no previous origin, this mod is now the origin with no alternatives if (m_Origin == -1) { m_Origin = origin; m_FileTime = fileTime; m_Archive = std::pair(archive, order); - } else if ((m_Parent != nullptr) - && (m_Parent->getOriginByID(origin).getPriority() > m_Parent->getOriginByID(m_Origin).getPriority()) - && (archive.size() == 0 || m_Archive.first.size() > 0 )) { + } + + // If this mod has a higher priority than the origin mod OR + // this mod has a loose file and the origin mod has an archived file, + // this mod is now the origin and the previous origin is the first alternative + else if ((m_Parent != nullptr) + && ((m_Parent->getOriginByID(origin).getPriority() > m_Parent->getOriginByID(m_Origin).getPriority()) + || (archive.size() == 0 && m_Archive.first.size() > 0 ))) { if (std::find_if(m_Alternatives.begin(), m_Alternatives.end(), [&](const std::pair> &i) -> bool { return i.first == m_Origin; }) == m_Alternatives.end()) { m_Alternatives.push_back(std::pair>(m_Origin, m_Archive)); } m_Origin = origin; m_FileTime = fileTime; m_Archive = std::pair(archive, order); - } else { + } + + // This mod is just an alternative + else { bool found = false; if (m_Origin == origin) { // already an origin -- cgit v1.3.1