diff options
| author | Mikaël Capelle <capelle.mikael@gmail.com> | 2021-02-09 20:14:03 +0100 |
|---|---|---|
| committer | Mikaël Capelle <capelle.mikael@gmail.com> | 2021-02-09 20:23:42 +0100 |
| commit | 595f6eccf615c0cf70c8d32e3edb515578efddc9 (patch) | |
| tree | 2f5ebc24ccfd4a8e59eea6b896559c757375e62a /src/modinfowithconflictinfo.cpp | |
| parent | 7d36bc20d0a6c327079141149a7f138c0f7726ac (diff) | |
Better refresh of override markers and conflicts.
Diffstat (limited to 'src/modinfowithconflictinfo.cpp')
| -rw-r--r-- | src/modinfowithconflictinfo.cpp | 107 |
1 files changed, 39 insertions, 68 deletions
diff --git a/src/modinfowithconflictinfo.cpp b/src/modinfowithconflictinfo.cpp index 7a51a727..7cdee6e6 100644 --- a/src/modinfowithconflictinfo.cpp +++ b/src/modinfowithconflictinfo.cpp @@ -19,11 +19,11 @@ ModInfoWithConflictInfo::ModInfoWithConflictInfo(OrganizerCore& core) : m_FileTree([this]() { return QDirFileTree::makeTree(absolutePath()); }), m_Valid([this]() { return doIsValid(); }), m_Contents([this]() { return doGetContents(); }), - m_HasLooseOverwrite(false), m_HasHiddenFiles(false) {} + m_Conflicts([this]() { return doConflictCheck(); }) { } void ModInfoWithConflictInfo::clearCaches() { - m_LastConflictCheck = QTime(); + m_Conflicts.invalidate(); } std::vector<ModInfo::EFlag> ModInfoWithConflictInfo::getFlags() const @@ -82,14 +82,9 @@ std::vector<ModInfo::EConflictFlag> ModInfoWithConflictInfo::getConflictFlags() } -void ModInfoWithConflictInfo::doConflictCheck() const +ModInfoWithConflictInfo::Conflicts ModInfoWithConflictInfo::doConflictCheck() const { - m_OverwriteList.clear(); - m_OverwrittenList.clear(); - m_ArchiveOverwriteList.clear(); - m_ArchiveOverwrittenList.clear(); - m_ArchiveLooseOverwriteList.clear(); - m_ArchiveLooseOverwrittenList.clear(); + Conflicts conflicts; bool providesAnything = false; bool hasHiddenFiles = false; @@ -102,10 +97,6 @@ void ModInfoWithConflictInfo::doConflictCheck() const std::wstring name = ToWString(this->name()); const std::wstring hideExt = ToWString(ModInfo::s_HiddenExt); - m_CurrentConflictState = CONFLICT_NONE; - m_ArchiveConflictState = CONFLICT_NONE; - m_ArchiveConflictLooseState = CONFLICT_NONE; - if (m_Core.directoryStructure()->originExists(name)) { FilesOrigin &origin = m_Core.directoryStructure()->getOriginByName(name); std::vector<FileEntryPtr> files = origin.getFiles(); @@ -168,12 +159,12 @@ void ModInfoWithConflictInfo::doConflictCheck() const unsigned int altIndex = ModInfo::getIndex(ToQString(altOrigin.getName())); if (!file->isFromArchive()) { if (!archiveData.isValid()) - m_OverwrittenList.insert(altIndex); + conflicts.m_OverwrittenList.insert(altIndex); else - m_ArchiveLooseOverwrittenList.insert(altIndex); + conflicts.m_ArchiveLooseOverwrittenList.insert(altIndex); } else { - m_ArchiveOverwrittenList.insert(altIndex); + conflicts.m_ArchiveOverwrittenList.insert(altIndex); } } else { providesAnything = true; @@ -188,21 +179,21 @@ void ModInfoWithConflictInfo::doConflictCheck() const if (!altInfo.isFromArchive()) { if (!archiveData.isValid()) { if (origin.getPriority() > altOrigin.getPriority()) { - m_OverwriteList.insert(altIndex); + conflicts.m_OverwriteList.insert(altIndex); } else { - m_OverwrittenList.insert(altIndex); + conflicts.m_OverwrittenList.insert(altIndex); } } else { - m_ArchiveLooseOverwrittenList.insert(altIndex); + conflicts.m_ArchiveLooseOverwrittenList.insert(altIndex); } } else { if (!archiveData.isValid()) { - m_ArchiveLooseOverwriteList.insert(altIndex); + conflicts.m_ArchiveLooseOverwriteList.insert(altIndex); } else { if (archiveData.order() > altInfo.archive().order()) { - m_ArchiveOverwriteList.insert(altIndex); + conflicts.m_ArchiveOverwriteList.insert(altIndex); } else if (archiveData.order() < altInfo.archive().order()) { - m_ArchiveOverwrittenList.insert(altIndex); + conflicts.m_ArchiveOverwrittenList.insert(altIndex); } } } @@ -210,66 +201,51 @@ void ModInfoWithConflictInfo::doConflictCheck() const } } } - m_LastConflictCheck = QTime::currentTime(); if (files.size() != 0) { 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()) - m_CurrentConflictState = CONFLICT_OVERWRITTEN; + conflicts.m_CurrentConflictState = CONFLICT_REDUNDANT; + else if (!conflicts.m_OverwriteList.empty() && !conflicts.m_OverwrittenList.empty()) + conflicts.m_CurrentConflictState = CONFLICT_MIXED; + else if (!conflicts.m_OverwriteList.empty()) + conflicts.m_CurrentConflictState = CONFLICT_OVERWRITE; + else if (!conflicts.m_OverwrittenList.empty()) + conflicts.m_CurrentConflictState = CONFLICT_OVERWRITTEN; - if (!m_ArchiveOverwriteList.empty() && !m_ArchiveOverwrittenList.empty()) - m_ArchiveConflictState = CONFLICT_MIXED; - else if (!m_ArchiveOverwriteList.empty()) - m_ArchiveConflictState = CONFLICT_OVERWRITE; - else if (!m_ArchiveOverwrittenList.empty()) - m_ArchiveConflictState = CONFLICT_OVERWRITTEN; + if (!conflicts.m_ArchiveOverwriteList.empty() && !conflicts.m_ArchiveOverwrittenList.empty()) + conflicts.m_ArchiveConflictState = CONFLICT_MIXED; + else if (!conflicts.m_ArchiveOverwriteList.empty()) + conflicts.m_ArchiveConflictState = CONFLICT_OVERWRITE; + else if (!conflicts.m_ArchiveOverwrittenList.empty()) + conflicts.m_ArchiveConflictState = CONFLICT_OVERWRITTEN; - if (!m_ArchiveLooseOverwrittenList.empty() && !m_ArchiveLooseOverwriteList.empty()) - m_ArchiveConflictLooseState = CONFLICT_MIXED; - else if (!m_ArchiveLooseOverwrittenList.empty()) - m_ArchiveConflictLooseState = CONFLICT_OVERWRITTEN; - else if (!m_ArchiveLooseOverwriteList.empty()) - m_ArchiveConflictLooseState = CONFLICT_OVERWRITE; + if (!conflicts.m_ArchiveLooseOverwrittenList.empty() && !conflicts.m_ArchiveLooseOverwriteList.empty()) + conflicts.m_ArchiveConflictLooseState = CONFLICT_MIXED; + else if (!conflicts.m_ArchiveLooseOverwrittenList.empty()) + conflicts.m_ArchiveConflictLooseState = CONFLICT_OVERWRITTEN; + else if (!conflicts.m_ArchiveLooseOverwriteList.empty()) + conflicts.m_ArchiveConflictLooseState = CONFLICT_OVERWRITE; - m_HasHiddenFiles = hasHiddenFiles; + conflicts.m_HasHiddenFiles = hasHiddenFiles; } } + + return conflicts; } ModInfoWithConflictInfo::EConflictType ModInfoWithConflictInfo::isConflicted() const { - // this is costy so cache the result - QTime now = QTime::currentTime(); - if (m_LastConflictCheck.isNull() || (m_LastConflictCheck.secsTo(now) > 10)) { - doConflictCheck(); - } - - return m_CurrentConflictState; + return m_Conflicts.value().m_CurrentConflictState; } ModInfoWithConflictInfo::EConflictType ModInfoWithConflictInfo::isArchiveConflicted() const { - QTime now = QTime::currentTime(); - if (m_LastConflictCheck.isNull() || (m_LastConflictCheck.secsTo(now) > 10)) { - doConflictCheck(); - } - - return m_ArchiveConflictState; + return m_Conflicts.value().m_ArchiveConflictState; } ModInfoWithConflictInfo::EConflictType ModInfoWithConflictInfo::isLooseArchiveConflicted() const { - QTime now = QTime::currentTime(); - if (m_LastConflictCheck.isNull() || (m_LastConflictCheck.secsTo(now) > 10)) { - doConflictCheck(); - } - - return m_ArchiveConflictLooseState; + return m_Conflicts.value().m_ArchiveConflictLooseState; } @@ -294,12 +270,7 @@ bool ModInfoWithConflictInfo::isRedundant() const bool ModInfoWithConflictInfo::hasHiddenFiles() const { - QTime now = QTime::currentTime(); - if (m_LastConflictCheck.isNull() || (m_LastConflictCheck.secsTo(now) > 10)) { - doConflictCheck(); - } - - return m_HasHiddenFiles; + return m_Conflicts.value().m_HasHiddenFiles; } void ModInfoWithConflictInfo::diskContentModified() { |
