From 39f36ca27ac8c14e3c7894d5cc167a8c758e082e Mon Sep 17 00:00:00 2001 From: Al Date: Tue, 14 Jan 2020 19:14:06 +0100 Subject: Added ModInfo::FLAG_HIDDEN_FILES and check in modinfowithconflictinfo --- src/modinfo.h | 3 ++- src/modinfowithconflictinfo.cpp | 36 +++++++++++++++++++++++++++++++++++- src/modinfowithconflictinfo.h | 5 ++++- 3 files changed, 41 insertions(+), 3 deletions(-) (limited to 'src') 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 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 ModInfoWithConflictInfo::getFlags() const +{ + std::vector result = std::vector(); + if (hasHiddenFiles()) { + result.push_back(ModInfo::FLAG_HIDDEN_FILES); + } + return result; +} + std::vector ModInfoWithConflictInfo::getConflictFlags() const { std::vector 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 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 getConflictFlags() const; - virtual std::vector getFlags() const { return std::vector(); }; + virtual std::vector 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 m_OverwriteList; // indices of mods overritten by this mod -- cgit v1.3.1 From a5d0cb8b5da539ef2ee410ed739dfcd76270c8e8 Mon Sep 17 00:00:00 2001 From: Al Date: Tue, 14 Jan 2020 20:56:15 +0100 Subject: Add icon for hidden files flag --- src/modflagicondelegate.cpp | 1 + src/modlist.cpp | 1 + src/resources.qrc | 1 + src/resources/conflict-hidden.png | Bin 0 -> 231 bytes 4 files changed, 3 insertions(+) create mode 100644 src/resources/conflict-hidden.png (limited to 'src') diff --git a/src/modflagicondelegate.cpp b/src/modflagicondelegate.cpp index 6e1df147..2dc01164 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/modlist.cpp b/src/modlist.cpp index 5cfa7022..f592c4ad 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("
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/resources.qrc b/src/resources.qrc index 6fc33293..41ccaf83 100644 --- a/src/resources.qrc +++ b/src/resources.qrc @@ -53,6 +53,7 @@ resources/conflict-mixed-blue.png resources/conflict-overwrite-blue.png resources/red-archive-conflict-loser.png + resources/conflict-hidden.png resources/accessories-text-editor.png resources/x-office-calendar.png resources/dialog-warning_16.png diff --git a/src/resources/conflict-hidden.png b/src/resources/conflict-hidden.png new file mode 100644 index 00000000..84a5da98 Binary files /dev/null and b/src/resources/conflict-hidden.png differ -- cgit v1.3.1 From 6b75741139aef4c2c744284861ace43fc2ce211a Mon Sep 17 00:00:00 2001 From: Al Date: Tue, 14 Jan 2020 21:12:21 +0100 Subject: Add has hidden files filter for modlist. --- src/categories.cpp | 1 + src/categories.h | 1 + src/filterlist.cpp | 1 + src/modinfo.h | 4 ++-- src/modlistsortproxy.cpp | 6 ++++++ 5 files changed, 11 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/categories.cpp b/src/categories.cpp index bb37483b..8ee5699c 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/modinfo.h b/src/modinfo.h index e6e4debc..a27822b0 100644 --- a/src/modinfo.h +++ b/src/modinfo.h @@ -79,7 +79,7 @@ public: FLAG_SEPARATOR, FLAG_OVERWRITE, FLAG_FOREIGN, - FLAG_HIDDEN_FILES, + FLAG_HIDDEN_FILES, FLAG_NOTENDORSED, FLAG_NOTES, FLAG_PLUGIN_SELECTED, @@ -96,7 +96,7 @@ public: CONTENT_SOUND, CONTENT_SCRIPT, CONTENT_SKSE, - CONTENT_SKSEFILES, + CONTENT_SKSEFILES, CONTENT_SKYPROC, CONTENT_MCM, CONTENT_INI, diff --git a/src/modlistsortproxy.cpp b/src/modlistsortproxy.cpp index 162b0653..9419fddc 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: { -- cgit v1.3.1 From 7579e42577e1940078b659fe7d75d8db4b14eaa3 Mon Sep 17 00:00:00 2001 From: Al <26797547+Al12rs@users.noreply.github.com> Date: Tue, 14 Jan 2020 22:01:33 +0100 Subject: Fix incorrect tabs --- src/modlist.cpp | 2 +- src/modlistsortproxy.cpp | 2 +- src/resources.qrc | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/modlist.cpp b/src/modlist.cpp index f592c4ad..94974012 100644 --- a/src/modlist.cpp +++ b/src/modlist.cpp @@ -162,7 +162,7 @@ QString ModList::getFlagText(ModInfo::EFlag flag, ModInfo::Ptr modInfo) const case ModInfo::FLAG_ALTERNATE_GAME: return tr("
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"); + case ModInfo::FLAG_HIDDEN_FILES: return tr("Contains hidden files"); default: return ""; } } diff --git a/src/modlistsortproxy.cpp b/src/modlistsortproxy.cpp index 9419fddc..018b9760 100644 --- a/src/modlistsortproxy.cpp +++ b/src/modlistsortproxy.cpp @@ -386,7 +386,7 @@ bool ModListSortProxy::categoryMatchesMod( break; } - case CategoryFactory::HasHiddenFiles: + case CategoryFactory::HasHiddenFiles: { b = (info->hasFlag(ModInfo::FLAG_HIDDEN_FILES)); break; diff --git a/src/resources.qrc b/src/resources.qrc index 41ccaf83..5b143b45 100644 --- a/src/resources.qrc +++ b/src/resources.qrc @@ -53,7 +53,7 @@ resources/conflict-mixed-blue.png resources/conflict-overwrite-blue.png resources/red-archive-conflict-loser.png - resources/conflict-hidden.png + resources/conflict-hidden.png resources/accessories-text-editor.png resources/x-office-calendar.png resources/dialog-warning_16.png -- cgit v1.3.1 From f65121b8bc93f7d55f8457e41ad9968940746d11 Mon Sep 17 00:00:00 2001 From: Al <26797547+Al12rs@users.noreply.github.com> Date: Tue, 14 Jan 2020 22:18:03 +0100 Subject: Fix some more tabs --- src/categories.cpp | 2 +- src/modflagicondelegate.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/categories.cpp b/src/categories.cpp index 8ee5699c..aea99532 100644 --- a/src/categories.cpp +++ b/src/categories.cpp @@ -329,7 +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 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/modflagicondelegate.cpp b/src/modflagicondelegate.cpp index 2dc01164..bec3c97d 100644 --- a/src/modflagicondelegate.cpp +++ b/src/modflagicondelegate.cpp @@ -56,7 +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_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(); -- cgit v1.3.1