summaryrefslogtreecommitdiff
path: root/src/modinfowithconflictinfo.cpp
diff options
context:
space:
mode:
authorisanae <14251494+isanae@users.noreply.github.com>2020-05-25 13:48:45 -0400
committerGitHub <noreply@github.com>2020-05-25 13:48:45 -0400
commita721347fd130fcab19f2709892093f087bfac19e (patch)
treeab4d6670668f519dd89066197cda349811f8978b /src/modinfowithconflictinfo.cpp
parent08ae9db2fd2a07acb2433275fc84c2ca47267a92 (diff)
parent9212a7d2e9611994dfc5fa2066b8ecbe68b198a8 (diff)
Merge pull request #1079 from Holt59/moinfo-improvements
ModInfo improvements
Diffstat (limited to 'src/modinfowithconflictinfo.cpp')
-rw-r--r--src/modinfowithconflictinfo.cpp33
1 files changed, 30 insertions, 3 deletions
diff --git a/src/modinfowithconflictinfo.cpp b/src/modinfowithconflictinfo.cpp
index 0c67b4f7..b0edf581 100644
--- a/src/modinfowithconflictinfo.cpp
+++ b/src/modinfowithconflictinfo.cpp
@@ -14,7 +14,11 @@ namespace fs = std::filesystem;
ModInfoWithConflictInfo::ModInfoWithConflictInfo(
PluginContainer *pluginContainer, const MOBase::IPluginGame* gamePlugin, DirectoryEntry **directoryStructure)
- : ModInfo(pluginContainer), m_GamePlugin(gamePlugin), m_DirectoryStructure(directoryStructure), m_HasLooseOverwrite(false), m_HasHiddenFiles(false) {}
+ : ModInfo(pluginContainer), m_GamePlugin(gamePlugin),
+ m_FileTree([this]() { return QDirFileTree::makeTree(absolutePath()); }),
+ m_Valid([this]() { return doIsValid(); }),
+ m_Contents([this]() { return doGetContents(); }),
+ m_DirectoryStructure(directoryStructure), m_HasLooseOverwrite(false), m_HasHiddenFiles(false) {}
void ModInfoWithConflictInfo::clearCaches()
{
@@ -296,14 +300,37 @@ bool ModInfoWithConflictInfo::hasHiddenFiles() const
return m_HasHiddenFiles;
}
+void ModInfoWithConflictInfo::diskContentModified() {
+ m_FileTree.invalidate();
+ m_Valid.invalidate();
+ m_Contents.invalidate();
+}
+
+void ModInfoWithConflictInfo::prefetch() {
+ // Populating the tree to 1-depth (IFileTree is lazy, so size() forces the
+ // tree to populate the first level):
+ contentFileTree()->size();
+}
-bool ModInfoWithConflictInfo::doTestValid() const {
+bool ModInfoWithConflictInfo::doIsValid() const {
auto mdc = m_GamePlugin->feature<ModDataChecker>();
if (mdc) {
- auto qdirfiletree = QDirFileTree::makeTree(absolutePath());
+ auto qdirfiletree = contentFileTree();
return mdc->dataLooksValid(qdirfiletree);
}
return true;
}
+
+std::shared_ptr<const IFileTree> ModInfoWithConflictInfo::contentFileTree() const {
+ return m_FileTree.value();
+}
+
+bool ModInfoWithConflictInfo::isValid() const {
+ return m_Valid.value();
+}
+
+std::vector<ModInfo::EContent> ModInfoWithConflictInfo::getContents() const {
+ return m_Contents.value();
+}