summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/categories.cpp1
-rw-r--r--src/categories.h1
-rw-r--r--src/filterlist.cpp1
-rw-r--r--src/modflagicondelegate.cpp1
-rw-r--r--src/modinfo.h3
-rw-r--r--src/modinfowithconflictinfo.cpp36
-rw-r--r--src/modinfowithconflictinfo.h5
-rw-r--r--src/modlist.cpp1
-rw-r--r--src/modlistsortproxy.cpp6
-rw-r--r--src/resources.qrc1
-rw-r--r--src/resources/conflict-hidden.pngbin0 -> 231 bytes
11 files changed, 53 insertions, 3 deletions
diff --git a/src/categories.cpp b/src/categories.cpp
index bb37483b..aea99532 100644
--- a/src/categories.cpp
+++ b/src/categories.cpp
@@ -329,6 +329,7 @@ QString CategoryFactory::getSpecialCategoryName(SpecialCategories type) const
case UpdateAvailable: label = QObject::tr("Update available"); break;
case HasCategory: label = QObject::tr("Has category"); break;
case Conflict: label = QObject::tr("Conflicted"); break;
+ case HasHiddenFiles: label = QObject::tr("Has hidden files"); break;
case Endorsed: label = QObject::tr("Endorsed"); break;
case Backup: label = QObject::tr("Has backup"); break;
case Managed: label = QObject::tr("Managed"); break;
diff --git a/src/categories.h b/src/categories.h
index 6b27c6a7..e8ec763b 100644
--- a/src/categories.h
+++ b/src/categories.h
@@ -43,6 +43,7 @@ public:
UpdateAvailable,
HasCategory,
Conflict,
+ HasHiddenFiles,
Endorsed,
Backup,
Managed,
diff --git a/src/filterlist.cpp b/src/filterlist.cpp
index a0928fcc..144c5689 100644
--- a/src/filterlist.cpp
+++ b/src/filterlist.cpp
@@ -284,6 +284,7 @@ void FilterList::refresh()
addSpecialCriteria(F::Managed);
addSpecialCriteria(F::HasCategory);
addSpecialCriteria(F::Conflict);
+ addSpecialCriteria(F::HasHiddenFiles);
addSpecialCriteria(F::Endorsed);
addSpecialCriteria(F::Tracked);
addSpecialCriteria(F::HasNexusID);
diff --git a/src/modflagicondelegate.cpp b/src/modflagicondelegate.cpp
index 6e1df147..bec3c97d 100644
--- a/src/modflagicondelegate.cpp
+++ b/src/modflagicondelegate.cpp
@@ -56,6 +56,7 @@ QString ModFlagIconDelegate::getFlagIcon(ModInfo::EFlag flag)
case ModInfo::FLAG_INVALID: return QStringLiteral(":/MO/gui/problem");
case ModInfo::FLAG_NOTENDORSED: return QStringLiteral(":/MO/gui/emblem_notendorsed");
case ModInfo::FLAG_NOTES: return QStringLiteral(":/MO/gui/emblem_notes");
+ case ModInfo::FLAG_HIDDEN_FILES: return QStringLiteral(":/MO/gui/emblem_hidden_files");
case ModInfo::FLAG_ALTERNATE_GAME: return QStringLiteral(":/MO/gui/alternate_game");
case ModInfo::FLAG_FOREIGN: return QString();
case ModInfo::FLAG_SEPARATOR: return QString();
diff --git a/src/modinfo.h b/src/modinfo.h
index 7c41e0a1..a27822b0 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
diff --git a/src/modlist.cpp b/src/modlist.cpp
index 5cfa7022..94974012 100644
--- a/src/modlist.cpp
+++ b/src/modlist.cpp
@@ -162,6 +162,7 @@ QString ModList::getFlagText(ModInfo::EFlag flag, ModInfo::Ptr modInfo) const
case ModInfo::FLAG_ALTERNATE_GAME: return tr("<br>This mod is for a different game, "
"make sure it's compatible or it could cause crashes.");
case ModInfo::FLAG_TRACKED: return tr("Mod is being tracked on the website");
+ case ModInfo::FLAG_HIDDEN_FILES: return tr("Contains hidden files");
default: return "";
}
}
diff --git a/src/modlistsortproxy.cpp b/src/modlistsortproxy.cpp
index 162b0653..018b9760 100644
--- a/src/modlistsortproxy.cpp
+++ b/src/modlistsortproxy.cpp
@@ -385,6 +385,12 @@ bool ModListSortProxy::categoryMatchesMod(
b = (hasConflictFlag(info->getConflictFlags()));
break;
}
+
+ case CategoryFactory::HasHiddenFiles:
+ {
+ b = (info->hasFlag(ModInfo::FLAG_HIDDEN_FILES));
+ break;
+ }
case CategoryFactory::Endorsed:
{
diff --git a/src/resources.qrc b/src/resources.qrc
index 6fc33293..5b143b45 100644
--- a/src/resources.qrc
+++ b/src/resources.qrc
@@ -53,6 +53,7 @@
<file alias="archive_loose_conflict_mixed">resources/conflict-mixed-blue.png</file>
<file alias="archive_loose_conflict_overwrite">resources/conflict-overwrite-blue.png</file>
<file alias="archive_loose_conflict_overwritten">resources/red-archive-conflict-loser.png</file>
+ <file alias="emblem_hidden_files">resources/conflict-hidden.png</file>
<file alias="emblem_notes">resources/accessories-text-editor.png</file>
<file alias="version_date">resources/x-office-calendar.png</file>
<file alias="warning_16">resources/dialog-warning_16.png</file>
diff --git a/src/resources/conflict-hidden.png b/src/resources/conflict-hidden.png
new file mode 100644
index 00000000..84a5da98
--- /dev/null
+++ b/src/resources/conflict-hidden.png
Binary files differ