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 | |
| parent | 0c2289b6f93bf34fcc28a720587276dfbedd0e85 (diff) | |
| parent | f65121b8bc93f7d55f8457e41ad9968940746d11 (diff) | |
Merge pull request #970 from Al12rs/hidden-files-flag
Hidden files flag
Diffstat (limited to 'src')
| -rw-r--r-- | src/categories.cpp | 1 | ||||
| -rw-r--r-- | src/categories.h | 1 | ||||
| -rw-r--r-- | src/filterlist.cpp | 1 | ||||
| -rw-r--r-- | src/modflagicondelegate.cpp | 1 | ||||
| -rw-r--r-- | src/modinfo.h | 3 | ||||
| -rw-r--r-- | src/modinfowithconflictinfo.cpp | 36 | ||||
| -rw-r--r-- | src/modinfowithconflictinfo.h | 5 | ||||
| -rw-r--r-- | src/modlist.cpp | 1 | ||||
| -rw-r--r-- | src/modlistsortproxy.cpp | 6 | ||||
| -rw-r--r-- | src/resources.qrc | 1 | ||||
| -rw-r--r-- | src/resources/conflict-hidden.png | bin | 0 -> 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 Binary files differnew file mode 100644 index 00000000..84a5da98 --- /dev/null +++ b/src/resources/conflict-hidden.png |
