#ifndef MODINFOWITHCONFLICTINFO_H #define MODINFOWITHCONFLICTINFO_H #include "modinfo.h" #include class ModInfoWithConflictInfo : public ModInfo { public: std::vector getConflictFlags() const override; virtual std::vector getFlags() const override; /** * @brief clear all caches held for this mod */ virtual void clearCaches() override; virtual std::set getModOverwrite() const override { return m_OverwriteList; } virtual std::set getModOverwritten() const override { return m_OverwrittenList; } virtual std::set getModArchiveOverwrite() const override { return m_ArchiveOverwriteList; } virtual std::set getModArchiveOverwritten() const override { return m_ArchiveOverwrittenList; } virtual std::set getModArchiveLooseOverwrite() const override { return m_ArchiveLooseOverwriteList; } virtual std::set getModArchiveLooseOverwritten() const override { return m_ArchiveLooseOverwrittenList; } virtual void doConflictCheck() const override; protected: /** * @brief check if the content of this mod is valid. * * @return true if the content is valid, false otherwize. **/ virtual bool doTestValid() const; ModInfoWithConflictInfo( PluginContainer* pluginContainer, const MOBase::IPluginGame* gamePlugin, MOShared::DirectoryEntry** directoryStructure); private: enum EConflictType { CONFLICT_NONE, CONFLICT_OVERWRITE, CONFLICT_OVERWRITTEN, CONFLICT_MIXED, CONFLICT_REDUNDANT, CONFLICT_CROSS }; private: /** * @return true if there is a conflict for files in this mod */ EConflictType isConflicted() const; /** * @return true if there are archive conflicts for files in this mod */ EConflictType isArchiveConflicted() const; /** * @return true if there are archive conflicts with loose files in this mod */ EConflictType isLooseArchiveConflicted() const; /** * @return true if this mod is completely replaced by others */ bool isRedundant() const; bool hasHiddenFiles() const; private: // Current game plugin running in MO2: MOBase::IPluginGame const* m_GamePlugin; MOShared::DirectoryEntry **m_DirectoryStructure; 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 }; #endif // MODINFOWITHCONFLICTINFO_H