summaryrefslogtreecommitdiff
path: root/src/modinfowithconflictinfo.cpp
diff options
context:
space:
mode:
authorAl <26797547+Al12rs@users.noreply.github.com>2020-01-15 11:59:13 +0100
committerGitHub <noreply@github.com>2020-01-15 11:59:13 +0100
commit5aad5eb8a23f319cfddb90b2a9b7e4121783af98 (patch)
treed13bc33a371f3c8ec364d899653c86b44da66650 /src/modinfowithconflictinfo.cpp
parent0c2289b6f93bf34fcc28a720587276dfbedd0e85 (diff)
parentf65121b8bc93f7d55f8457e41ad9968940746d11 (diff)
Merge pull request #970 from Al12rs/hidden-files-flag
Hidden files flag
Diffstat (limited to 'src/modinfowithconflictinfo.cpp')
-rw-r--r--src/modinfowithconflictinfo.cpp36
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;
+}