summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAl <al12rs@hotmail.com>2020-01-14 19:14:06 +0100
committerAl <al12rs@hotmail.com>2020-01-14 20:55:34 +0100
commit39f36ca27ac8c14e3c7894d5cc167a8c758e082e (patch)
tree2ec41109a4059e04c7b0ffcdfd15cb384d45f6b7 /src
parent3fb21b74a9c937f242e6d34105a1b41648cfac7f (diff)
Added ModInfo::FLAG_HIDDEN_FILES and check in modinfowithconflictinfo
Diffstat (limited to 'src')
-rw-r--r--src/modinfo.h3
-rw-r--r--src/modinfowithconflictinfo.cpp36
-rw-r--r--src/modinfowithconflictinfo.h5
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