diff options
| author | Mikaƫl Capelle <capelle.mikael@gmail.com> | 2023-07-09 17:36:03 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-07-09 17:36:03 +0200 |
| commit | ef94aee28464039672b277243a0181ae93550d6c (patch) | |
| tree | 0575a68af5f154e9d6d0738edbaefb16a11d6f5c /src/modinfowithconflictinfo.cpp | |
| parent | 7d6cb8528d20e36a4cee822263865ee2f7f32481 (diff) | |
| parent | 3de050e9c03e553f7ae3f780f6bd080a30ae123e (diff) | |
Merge pull request #1839 from Holt59/ci/initial-gh-action-for-build
Clang-Format + Github Workflow
Diffstat (limited to 'src/modinfowithconflictinfo.cpp')
| -rw-r--r-- | src/modinfowithconflictinfo.cpp | 170 |
1 files changed, 96 insertions, 74 deletions
diff --git a/src/modinfowithconflictinfo.cpp b/src/modinfowithconflictinfo.cpp index 7cdee6e6..8d496391 100644 --- a/src/modinfowithconflictinfo.cpp +++ b/src/modinfowithconflictinfo.cpp @@ -1,25 +1,33 @@ #include "modinfowithconflictinfo.h" -#include "utility.h" #include "shared/directoryentry.h" -#include "shared/filesorigin.h" #include "shared/fileentry.h" +#include "shared/filesorigin.h" +#include "utility.h" #include <filesystem> -#include "organizercore.h" #include "iplugingame.h" #include "moddatachecker.h" +#include "organizercore.h" #include "qdirfiletree.h" using namespace MOBase; using namespace MOShared; namespace fs = std::filesystem; -ModInfoWithConflictInfo::ModInfoWithConflictInfo(OrganizerCore& core) : - ModInfo(core), - m_FileTree([this]() { return QDirFileTree::makeTree(absolutePath()); }), - m_Valid([this]() { return doIsValid(); }), - m_Contents([this]() { return doGetContents(); }), - m_Conflicts([this]() { return doConflictCheck(); }) { } +ModInfoWithConflictInfo::ModInfoWithConflictInfo(OrganizerCore& core) + : ModInfo(core), m_FileTree([this]() { + return QDirFileTree::makeTree(absolutePath()); + }), + m_Valid([this]() { + return doIsValid(); + }), + m_Contents([this]() { + return doGetContents(); + }), + m_Conflicts([this]() { + return doConflictCheck(); + }) +{} void ModInfoWithConflictInfo::clearCaches() { @@ -39,66 +47,68 @@ std::vector<ModInfo::EConflictFlag> ModInfoWithConflictInfo::getConflictFlags() { std::vector<ModInfo::EConflictFlag> result; switch (isConflicted()) { - case CONFLICT_MIXED: { - result.push_back(ModInfo::FLAG_CONFLICT_MIXED); - } break; - case CONFLICT_OVERWRITE: { - result.push_back(ModInfo::FLAG_CONFLICT_OVERWRITE); - } break; - case CONFLICT_OVERWRITTEN: { - result.push_back(ModInfo::FLAG_CONFLICT_OVERWRITTEN); - } break; - case CONFLICT_REDUNDANT: { - result.push_back(ModInfo::FLAG_CONFLICT_REDUNDANT); - } break; - default: { /* NOP */ } + case CONFLICT_MIXED: { + result.push_back(ModInfo::FLAG_CONFLICT_MIXED); + } break; + case CONFLICT_OVERWRITE: { + result.push_back(ModInfo::FLAG_CONFLICT_OVERWRITE); + } break; + case CONFLICT_OVERWRITTEN: { + result.push_back(ModInfo::FLAG_CONFLICT_OVERWRITTEN); + } break; + case CONFLICT_REDUNDANT: { + result.push_back(ModInfo::FLAG_CONFLICT_REDUNDANT); + } break; + default: { /* NOP */ + } } switch (isLooseArchiveConflicted()) { - case CONFLICT_MIXED: { - result.push_back(ModInfo::FLAG_ARCHIVE_LOOSE_CONFLICT_OVERWRITE); - result.push_back(ModInfo::FLAG_ARCHIVE_LOOSE_CONFLICT_OVERWRITTEN); - } break; - case CONFLICT_OVERWRITE: { - result.push_back(ModInfo::FLAG_ARCHIVE_LOOSE_CONFLICT_OVERWRITE); - } break; - case CONFLICT_OVERWRITTEN: { - result.push_back(ModInfo::FLAG_ARCHIVE_LOOSE_CONFLICT_OVERWRITTEN); - } break; - default: { /* NOP */ } + case CONFLICT_MIXED: { + result.push_back(ModInfo::FLAG_ARCHIVE_LOOSE_CONFLICT_OVERWRITE); + result.push_back(ModInfo::FLAG_ARCHIVE_LOOSE_CONFLICT_OVERWRITTEN); + } break; + case CONFLICT_OVERWRITE: { + result.push_back(ModInfo::FLAG_ARCHIVE_LOOSE_CONFLICT_OVERWRITE); + } break; + case CONFLICT_OVERWRITTEN: { + result.push_back(ModInfo::FLAG_ARCHIVE_LOOSE_CONFLICT_OVERWRITTEN); + } break; + default: { /* NOP */ + } } switch (isArchiveConflicted()) { - case CONFLICT_MIXED: { - result.push_back(ModInfo::FLAG_ARCHIVE_CONFLICT_MIXED); - } break; - case CONFLICT_OVERWRITE: { - result.push_back(ModInfo::FLAG_ARCHIVE_CONFLICT_OVERWRITE); - } break; - case CONFLICT_OVERWRITTEN: { - result.push_back(ModInfo::FLAG_ARCHIVE_CONFLICT_OVERWRITTEN); - } break; - default: { /* NOP */ } + case CONFLICT_MIXED: { + result.push_back(ModInfo::FLAG_ARCHIVE_CONFLICT_MIXED); + } break; + case CONFLICT_OVERWRITE: { + result.push_back(ModInfo::FLAG_ARCHIVE_CONFLICT_OVERWRITE); + } break; + case CONFLICT_OVERWRITTEN: { + result.push_back(ModInfo::FLAG_ARCHIVE_CONFLICT_OVERWRITTEN); + } break; + default: { /* NOP */ + } } return result; } - ModInfoWithConflictInfo::Conflicts ModInfoWithConflictInfo::doConflictCheck() const { Conflicts conflicts; bool providesAnything = false; - bool hasHiddenFiles = false; + bool hasHiddenFiles = false; int dataID = 0; if (m_Core.directoryStructure()->originExists(L"data")) { dataID = m_Core.directoryStructure()->getOriginByName(L"data").getID(); } - std::wstring name = ToWString(this->name()); + std::wstring name = ToWString(this->name()); const std::wstring hideExt = ToWString(ModInfo::s_HiddenExt); if (m_Core.directoryStructure()->originExists(name)) { - FilesOrigin &origin = m_Core.directoryStructure()->getOriginByName(name); + FilesOrigin& origin = m_Core.directoryStructure()->getOriginByName(name); std::vector<FileEntryPtr> files = origin.getFiles(); std::set<const DirectoryEntry*> checkedDirs; @@ -111,8 +121,7 @@ ModInfoWithConflictInfo::Conflicts ModInfoWithConflictInfo::doConflictCheck() co if (nameAsPath.extension().wstring().compare(hideExt) == 0) { hasHiddenFiles = true; - } - else { + } else { const DirectoryEntry* parent = file->getParent(); // iterate on all parent direEntries to check for .mohiddden @@ -120,10 +129,10 @@ ModInfoWithConflictInfo::Conflicts ModInfoWithConflictInfo::doConflictCheck() co auto insertResult = checkedDirs.insert(parent); if (insertResult.second == false) { - // if already present break as we can assume to have checked the parents as well + // if already present break as we can assume to have checked the parents + // as well break; - } - else { + } else { const fs::path dirPath(parent->getName()); if (dirPath.extension().wstring().compare(hideExt) == 0) { hasHiddenFiles = true; @@ -155,15 +164,15 @@ ModInfoWithConflictInfo::Conflicts ModInfoWithConflictInfo::doConflictCheck() co // If this is not the origin then determine the correct overwrite if (file->getOrigin() != origin.getID()) { - FilesOrigin &altOrigin = m_Core.directoryStructure()->getOriginByID(file->getOrigin()); + FilesOrigin& altOrigin = + m_Core.directoryStructure()->getOriginByID(file->getOrigin()); unsigned int altIndex = ModInfo::getIndex(ToQString(altOrigin.getName())); if (!file->isFromArchive()) { if (!archiveData.isValid()) conflicts.m_OverwrittenList.insert(altIndex); else conflicts.m_ArchiveLooseOverwrittenList.insert(altIndex); - } - else { + } else { conflicts.m_ArchiveOverwrittenList.insert(altIndex); } } else { @@ -172,8 +181,10 @@ ModInfoWithConflictInfo::Conflicts ModInfoWithConflictInfo::doConflictCheck() co // Sort out the alternatives for (const auto& altInfo : alternatives) { - if ((altInfo.originID() != dataID) && (altInfo.originID() != origin.getID())) { - FilesOrigin &altOrigin = m_Core.directoryStructure()->getOriginByID(altInfo.originID()); + if ((altInfo.originID() != dataID) && + (altInfo.originID() != origin.getID())) { + FilesOrigin& altOrigin = + m_Core.directoryStructure()->getOriginByID(altInfo.originID()); QString altOriginName = ToQString(altOrigin.getName()); unsigned int altIndex = ModInfo::getIndex(altOriginName); if (!altInfo.isFromArchive()) { @@ -205,21 +216,24 @@ ModInfoWithConflictInfo::Conflicts ModInfoWithConflictInfo::doConflictCheck() co if (files.size() != 0) { if (!providesAnything) conflicts.m_CurrentConflictState = CONFLICT_REDUNDANT; - else if (!conflicts.m_OverwriteList.empty() && !conflicts.m_OverwrittenList.empty()) + 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 (!conflicts.m_ArchiveOverwriteList.empty() && !conflicts.m_ArchiveOverwrittenList.empty()) + 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 (!conflicts.m_ArchiveLooseOverwrittenList.empty() && !conflicts.m_ArchiveLooseOverwriteList.empty()) + 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; @@ -238,24 +252,25 @@ ModInfoWithConflictInfo::EConflictType ModInfoWithConflictInfo::isConflicted() c return m_Conflicts.value().m_CurrentConflictState; } -ModInfoWithConflictInfo::EConflictType ModInfoWithConflictInfo::isArchiveConflicted() const +ModInfoWithConflictInfo::EConflictType +ModInfoWithConflictInfo::isArchiveConflicted() const { return m_Conflicts.value().m_ArchiveConflictState; } -ModInfoWithConflictInfo::EConflictType ModInfoWithConflictInfo::isLooseArchiveConflicted() const +ModInfoWithConflictInfo::EConflictType +ModInfoWithConflictInfo::isLooseArchiveConflicted() const { return m_Conflicts.value().m_ArchiveConflictLooseState; } - bool ModInfoWithConflictInfo::isRedundant() const { std::wstring name = ToWString(this->name()); if (m_Core.directoryStructure()->originExists(name)) { - FilesOrigin &origin = m_Core.directoryStructure()->getOriginByName(name); + FilesOrigin& origin = m_Core.directoryStructure()->getOriginByName(name); std::vector<FileEntryPtr> files = origin.getFiles(); - bool ignore = false; + bool ignore = false; for (auto iter = files.begin(); iter != files.end(); ++iter) { if ((*iter)->getOrigin(ignore) == origin.getID()) { return false; @@ -267,25 +282,27 @@ bool ModInfoWithConflictInfo::isRedundant() const } } - bool ModInfoWithConflictInfo::hasHiddenFiles() const { return m_Conflicts.value().m_HasHiddenFiles; } -void ModInfoWithConflictInfo::diskContentModified() { +void ModInfoWithConflictInfo::diskContentModified() +{ m_FileTree.invalidate(); m_Valid.invalidate(); m_Contents.invalidate(); } -void ModInfoWithConflictInfo::prefetch() { +void ModInfoWithConflictInfo::prefetch() +{ // Populating the tree to 1-depth (IFileTree is lazy, so size() forces the // tree to populate the first level): fileTree()->size(); } -bool ModInfoWithConflictInfo::doIsValid() const { +bool ModInfoWithConflictInfo::doIsValid() const +{ auto mdc = m_Core.managedGame()->feature<ModDataChecker>(); if (mdc) { @@ -296,19 +313,24 @@ bool ModInfoWithConflictInfo::doIsValid() const { return true; } -std::shared_ptr<const IFileTree> ModInfoWithConflictInfo::fileTree() const { +std::shared_ptr<const IFileTree> ModInfoWithConflictInfo::fileTree() const +{ return m_FileTree.value(); } -bool ModInfoWithConflictInfo::isValid() const { +bool ModInfoWithConflictInfo::isValid() const +{ return m_Valid.value(); } -const std::set<int>& ModInfoWithConflictInfo::getContents() const { +const std::set<int>& ModInfoWithConflictInfo::getContents() const +{ return m_Contents.value(); } -bool ModInfoWithConflictInfo::hasContent(int content) const { +bool ModInfoWithConflictInfo::hasContent(int content) const +{ auto& contents = m_Contents.value(); - return std::find(std::begin(contents), std::end(contents), content) != std::end(contents); + return std::find(std::begin(contents), std::end(contents), content) != + std::end(contents); } |
