diff options
| author | Al <al12rs@hotmail.com> | 2020-01-14 19:14:06 +0100 |
|---|---|---|
| committer | Al <al12rs@hotmail.com> | 2020-01-14 20:55:34 +0100 |
| commit | 39f36ca27ac8c14e3c7894d5cc167a8c758e082e (patch) | |
| tree | 2ec41109a4059e04c7b0ffcdfd15cb384d45f6b7 /src | |
| parent | 3fb21b74a9c937f242e6d34105a1b41648cfac7f (diff) | |
Added ModInfo::FLAG_HIDDEN_FILES and check in modinfowithconflictinfo
Diffstat (limited to 'src')
| -rw-r--r-- | src/modinfo.h | 3 | ||||
| -rw-r--r-- | src/modinfowithconflictinfo.cpp | 36 | ||||
| -rw-r--r-- | src/modinfowithconflictinfo.h | 5 |
3 files changed, 41 insertions, 3 deletions
diff --git a/src/modinfo.h b/src/modinfo.h index 7c41e0a1..e6e4debc 100644 --- a/src/modinfo.h +++ b/src/modinfo.h @@ -79,6 +79,7 @@ public: FLAG_SEPARATOR, FLAG_OVERWRITE, FLAG_FOREIGN, + FLAG_HIDDEN_FILES, FLAG_NOTENDORSED, FLAG_NOTES, FLAG_PLUGIN_SELECTED, @@ -95,7 +96,7 @@ public: CONTENT_SOUND, CONTENT_SCRIPT, CONTENT_SKSE, - CONTENT_SKSEFILES, + CONTENT_SKSEFILES, CONTENT_SKYPROC, CONTENT_MCM, CONTENT_INI, 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; +} diff --git a/src/modinfowithconflictinfo.h b/src/modinfowithconflictinfo.h index 9869bc5a..460a7f49 100644 --- a/src/modinfowithconflictinfo.h +++ b/src/modinfowithconflictinfo.h @@ -13,7 +13,7 @@ public: ModInfoWithConflictInfo(PluginContainer *pluginContainer, MOShared::DirectoryEntry **directoryStructure); std::vector<ModInfo::EConflictFlag> getConflictFlags() const; - virtual std::vector<ModInfo::EFlag> getFlags() const { return std::vector<ModInfo::EFlag>(); }; + virtual std::vector<ModInfo::EFlag> getFlags() const; /** * @brief clear all caches held for this mod @@ -67,6 +67,8 @@ private: */ bool isRedundant() const; + bool hasHiddenFiles() const; + private: MOShared::DirectoryEntry **m_DirectoryStructure; @@ -75,6 +77,7 @@ private: mutable EConflictType m_ArchiveConflictState; mutable EConflictType m_ArchiveConflictLooseState; mutable bool m_HasLooseOverwrite; + mutable bool m_HasHiddenFiles; mutable QTime m_LastConflictCheck; mutable std::set<unsigned int> m_OverwriteList; // indices of mods overritten by this mod |
