From 595f6eccf615c0cf70c8d32e3edb515578efddc9 Mon Sep 17 00:00:00 2001 From: Mikaƫl Capelle Date: Tue, 9 Feb 2021 20:14:03 +0100 Subject: Better refresh of override markers and conflicts. --- src/modinfowithconflictinfo.h | 53 +++++++++++++++++++++---------------------- 1 file changed, 26 insertions(+), 27 deletions(-) (limited to 'src/modinfowithconflictinfo.h') diff --git a/src/modinfowithconflictinfo.h b/src/modinfowithconflictinfo.h index c9cddb60..2136e093 100644 --- a/src/modinfowithconflictinfo.h +++ b/src/modinfowithconflictinfo.h @@ -54,14 +54,12 @@ public: */ void clearCaches() override; - const std::set& getModOverwrite() const override { return m_OverwriteList; } - const std::set& getModOverwritten() const override { return m_OverwrittenList; } - const std::set& getModArchiveOverwrite() const override { return m_ArchiveOverwriteList; } - const std::set& getModArchiveOverwritten() const override { return m_ArchiveOverwrittenList; } - const std::set& getModArchiveLooseOverwrite() const override { return m_ArchiveLooseOverwriteList; } - const std::set& getModArchiveLooseOverwritten() const override { return m_ArchiveLooseOverwrittenList; } - - void doConflictCheck() const override; + const std::set& getModOverwrite() const override { return m_Conflicts.value().m_OverwriteList; } + const std::set& getModOverwritten() const override { return m_Conflicts.value().m_OverwrittenList; } + const std::set& getModArchiveOverwrite() const override { return m_Conflicts.value().m_ArchiveOverwriteList; } + const std::set& getModArchiveOverwritten() const override { return m_Conflicts.value().m_ArchiveOverwrittenList; } + const std::set& getModArchiveLooseOverwrite() const override { return m_Conflicts.value().m_ArchiveLooseOverwriteList; } + const std::set& getModArchiveLooseOverwritten() const override { return m_Conflicts.value().m_ArchiveLooseOverwrittenList; } public slots: @@ -72,11 +70,8 @@ public slots: protected: - /** - * @brief Check if the content of this mod is valid. - * - * @return true if the content is valid, false otherwise. - **/ + // check if the content of this mod is valid + // virtual bool doIsValid() const; /** @@ -136,23 +131,27 @@ protected: private: + struct Conflicts { + EConflictType m_CurrentConflictState = CONFLICT_NONE; + EConflictType m_ArchiveConflictState = CONFLICT_NONE; + EConflictType m_ArchiveConflictLooseState = CONFLICT_NONE; + bool m_HasLooseOverwrite = false; + bool m_HasHiddenFiles = false; + + std::set m_OverwriteList; // indices of mods overritten by this mod + std::set m_OverwrittenList; // indices of mods overwriting this mod + std::set m_ArchiveOverwriteList; // indices of mods with archive files overritten by this mod + std::set m_ArchiveOverwrittenList; // indices of mods with archive files overwriting this mod + std::set m_ArchiveLooseOverwriteList; // indices of mods with archives being overwritten by this mod's loose files + std::set m_ArchiveLooseOverwrittenList; // indices of mods with loose files overwriting this mod's archive files + }; + + Conflicts doConflictCheck() const; + MOBase::MemoizedLocked> m_FileTree; MOBase::MemoizedLocked m_Valid; MOBase::MemoizedLocked> m_Contents; - - mutable EConflictType m_CurrentConflictState; - 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 - mutable std::set m_OverwrittenList; // indices of mods overwriting this mod - mutable std::set m_ArchiveOverwriteList; // indices of mods with archive files overritten by this mod - mutable std::set m_ArchiveOverwrittenList; // indices of mods with archive files overwriting this mod - mutable std::set m_ArchiveLooseOverwriteList; // indices of mods with archives being overwritten by this mod's loose files - mutable std::set m_ArchiveLooseOverwrittenList; // indices of mods with loose files overwriting this mod's archive files + MOBase::MemoizedLocked m_Conflicts; }; -- cgit v1.3.1