diff options
| author | isanae <14251494+isanae@users.noreply.github.com> | 2020-05-25 13:48:45 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-05-25 13:48:45 -0400 |
| commit | a721347fd130fcab19f2709892093f087bfac19e (patch) | |
| tree | ab4d6670668f519dd89066197cda349811f8978b /src/modinfowithconflictinfo.cpp | |
| parent | 08ae9db2fd2a07acb2433275fc84c2ca47267a92 (diff) | |
| parent | 9212a7d2e9611994dfc5fa2066b8ecbe68b198a8 (diff) | |
Merge pull request #1079 from Holt59/moinfo-improvements
ModInfo improvements
Diffstat (limited to 'src/modinfowithconflictinfo.cpp')
| -rw-r--r-- | src/modinfowithconflictinfo.cpp | 33 |
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(); +} |
