diff options
| author | Al <26797547+Al12rs@users.noreply.github.com> | 2020-01-15 11:59:13 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-01-15 11:59:13 +0100 |
| commit | 5aad5eb8a23f319cfddb90b2a9b7e4121783af98 (patch) | |
| tree | d13bc33a371f3c8ec364d899653c86b44da66650 /src/modinfowithconflictinfo.cpp | |
| parent | 0c2289b6f93bf34fcc28a720587276dfbedd0e85 (diff) | |
| parent | f65121b8bc93f7d55f8457e41ad9968940746d11 (diff) | |
Merge pull request #970 from Al12rs/hidden-files-flag
Hidden files flag
Diffstat (limited to 'src/modinfowithconflictinfo.cpp')
| -rw-r--r-- | src/modinfowithconflictinfo.cpp | 36 |
1 files changed, 35 insertions, 1 deletions
diff --git a/src/modinfowithconflictinfo.cpp b/src/modinfowithconflictinfo.cpp index f5a243ae..df5068ca 100644 --- a/src/modinfowithconflictinfo.cpp +++ b/src/modinfowithconflictinfo.cpp @@ -2,18 +2,29 @@ #include "directoryentry.h" #include "utility.h" +#include <filesystem> using namespace MOBase; using namespace MOShared; +namespace fs = std::filesystem; ModInfoWithConflictInfo::ModInfoWithConflictInfo(PluginContainer *pluginContainer, DirectoryEntry **directoryStructure) - : ModInfo(pluginContainer), m_DirectoryStructure(directoryStructure), m_HasLooseOverwrite(false) {} + : ModInfo(pluginContainer), m_DirectoryStructure(directoryStructure), m_HasLooseOverwrite(false), m_HasHiddenFiles(false) {} void ModInfoWithConflictInfo::clearCaches() { m_LastConflictCheck = QTime(); } +std::vector<ModInfo::EFlag> ModInfoWithConflictInfo::getFlags() const +{ + std::vector<ModInfo::EFlag> result = std::vector<ModInfo::EFlag>(); + if (hasHiddenFiles()) { + result.push_back(ModInfo::FLAG_HIDDEN_FILES); + } + return result; +} + std::vector<ModInfo::EConflictFlag> ModInfoWithConflictInfo::getConflictFlags() const { std::vector<ModInfo::EConflictFlag> result; @@ -71,6 +82,7 @@ void ModInfoWithConflictInfo::doConflictCheck() const m_ArchiveLooseOverwrittenList.clear(); bool providesAnything = false; + bool hasHiddenFiles = false; int dataID = 0; if ((*m_DirectoryStructure)->originExists(L"data")) { @@ -88,6 +100,15 @@ void ModInfoWithConflictInfo::doConflictCheck() const std::vector<FileEntry::Ptr> files = origin.getFiles(); // for all files in this origin for (FileEntry::Ptr file : files) { + + //Skip hiidden file check if already found one + if (!hasHiddenFiles) { + const fs::path nameAsPath(file->getName()); + if (nameAsPath.extension().wstring().compare(L".mohidden") == 0) { + hasHiddenFiles = true; + } + } + auto alternatives = file->getAlternatives(); if ((alternatives.size() == 0) || (alternatives.back().first == dataID)) { // no alternatives -> no conflict @@ -178,6 +199,8 @@ void ModInfoWithConflictInfo::doConflictCheck() const m_ArchiveConflictLooseState = CONFLICT_OVERWRITTEN; else if (!m_ArchiveLooseOverwriteList.empty()) m_ArchiveConflictLooseState = CONFLICT_OVERWRITE; + + m_HasHiddenFiles = hasHiddenFiles; } } } @@ -231,3 +254,14 @@ bool ModInfoWithConflictInfo::isRedundant() const return false; } } + + +bool ModInfoWithConflictInfo::hasHiddenFiles() const +{ + QTime now = QTime::currentTime(); + if (m_LastConflictCheck.isNull() || (m_LastConflictCheck.secsTo(now) > 10)) { + doConflictCheck(); + } + + return m_HasHiddenFiles; +} |
