diff options
| author | Mikaël Capelle <capelle.mikael@gmail.com> | 2020-05-01 18:00:31 +0200 |
|---|---|---|
| committer | Mikaël Capelle <capelle.mikael@gmail.com> | 2020-05-07 12:16:33 +0200 |
| commit | 40c433580f69006a42dc27a6444ebd9a6cccc440 (patch) | |
| tree | 426524068d3dbfcf9aba495d78a5c7bd4316dca8 | |
| parent | cd2b7683b78503d4fef1946de088108b812b387c (diff) | |
Update ModInfo classes to handle plugin game and clean some declarations.
| -rw-r--r-- | src/modinfo.cpp | 27 | ||||
| -rw-r--r-- | src/modinfo.h | 49 | ||||
| -rw-r--r-- | src/modinfobackup.h | 53 | ||||
| -rw-r--r-- | src/modinfodialognexus.cpp | 2 | ||||
| -rw-r--r-- | src/modinfoforeign.h | 111 | ||||
| -rw-r--r-- | src/modinfooverwrite.h | 107 | ||||
| -rw-r--r-- | src/modinforegular.cpp | 36 | ||||
| -rw-r--r-- | src/modinforegular.h | 143 | ||||
| -rw-r--r-- | src/modinfoseparator.h | 86 | ||||
| -rw-r--r-- | src/modinfowithconflictinfo.h | 20 |
10 files changed, 330 insertions, 304 deletions
diff --git a/src/modinfo.cpp b/src/modinfo.cpp index 085eaf80..7f888bdc 100644 --- a/src/modinfo.cpp +++ b/src/modinfo.cpp @@ -25,11 +25,9 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>. #include "modinfooverwrite.h" #include "modinfoseparator.h" -#include "installationtester.h" #include "categories.h" #include "modinfodialog.h" #include "overwriteinfodialog.h" -#include "filenamestring.h" #include "versioninfo.h" #include <iplugingame.h> @@ -475,7 +473,7 @@ bool ModInfo::removeCategory(const QString &categoryName) return true; } -QStringList ModInfo::categories() +QStringList ModInfo::categories() const { QStringList result; @@ -529,28 +527,7 @@ bool ModInfo::categorySet(int categoryID) const void ModInfo::testValid() { - m_Valid = false; - QDirIterator dirIter(absolutePath()); - while (dirIter.hasNext()) { - dirIter.next(); - if (dirIter.fileInfo().isDir()) { - if (InstallationTester::isTopLevelDirectory(dirIter.fileName())) { - m_Valid = true; - break; - } - } else { - if (InstallationTester::isTopLevelSuffix(dirIter.fileName())) { - m_Valid = true; - break; - } - } - } - - // NOTE: in Qt 4.7 it seems that QDirIterator leaves a file handle open if it is not iterated to the - // end - while (dirIter.hasNext()) { - dirIter.next(); - } + m_Valid = doTestValid(); } QUrl ModInfo::parseCustomURL() const diff --git a/src/modinfo.h b/src/modinfo.h index 34b1ecdf..d611fa87 100644 --- a/src/modinfo.h +++ b/src/modinfo.h @@ -319,11 +319,23 @@ public: virtual void setNotes(const QString ¬es) = 0; /** - * @brief set/change the source game of this mod + * @brief set/change the game plgin for this mod * - * @param gameName the source game shortName + * @param gamePlugin the game plugin */ - virtual void setGameName(const QString &gameName) = 0; + virtual void setGamePlugin(const MOBase::IPluginGame* gamePlugin) = 0; + + /** + * @brief set the name of this mod + * + * set the name of this mod. This will also update the name of the + * directory that contains this mod + * + * @param name new name of the mod + * @return true on success, false if the new name can't be used (i.e. because the new + * directory name wouldn't be valid) + **/ + virtual bool setName(const QString& name) = 0; /** * @brief set/change the nexus mod id of this mod @@ -336,7 +348,7 @@ public: * @brief set/change the version of this mod * @param version new version of the mod */ - virtual void setVersion(const MOBase::VersionInfo &version); + virtual void setVersion(const MOBase::VersionInfo &version) override; /** * @brief Controls if mod should be highlighted based on plugin selection @@ -382,7 +394,7 @@ public: virtual void addCategory(const QString &categoryName) override; virtual bool removeCategory(const QString &categoryName) override; - virtual QStringList categories() override; + virtual QStringList categories() const override; /** * update the endorsement state for the mod. This only changes the @@ -645,12 +657,12 @@ public: /* *@return the color choosen by the user for the mod/separator */ - virtual QColor getColor() { return QColor(); } + virtual QColor getColor() const { return QColor(); } /* *@return true if the color has been set successfully. */ - virtual void setColor(QColor color) { } + virtual void setColor(QColor) { } /** * @brief adds the information that a file has been installed into this mod @@ -709,12 +721,12 @@ public: /** * @brief updates the mod to flag it as converted in order to ignore the alternate game warning */ - virtual void markConverted(bool converted) {} + virtual void markConverted(bool) {} /** * @brief updates the mod to flag it as valid in order to ignore the invalid game data flag */ - virtual void markValidated(bool validated) {} + virtual void markValidated(bool) {} /** * @brief reads meta information from disk @@ -729,32 +741,32 @@ public: /** * @return retrieve list of mods (as mod index) that are overwritten by this one. Updates may be delayed */ - virtual std::set<unsigned int> getModOverwrite() { return std::set<unsigned int>(); } + virtual std::set<unsigned int> getModOverwrite() const { return std::set<unsigned int>(); } /** * @return list of mods (as mod index) that overwrite this one. Updates may be delayed */ - virtual std::set<unsigned int> getModOverwritten() { return std::set<unsigned int>(); } + virtual std::set<unsigned int> getModOverwritten() const { return std::set<unsigned int>(); } /** * @return retrieve list of mods (as mod index) with archives that are overwritten by this one. Updates may be delayed */ - virtual std::set<unsigned int> getModArchiveOverwrite() { return std::set<unsigned int>(); } + virtual std::set<unsigned int> getModArchiveOverwrite() const { return std::set<unsigned int>(); } /** * @return list of mods (as mod index) with archives that overwrite this one. Updates may be delayed */ - virtual std::set<unsigned int> getModArchiveOverwritten() { return std::set<unsigned int>(); } + virtual std::set<unsigned int> getModArchiveOverwritten() const { return std::set<unsigned int>(); } /** * @return retrieve list of mods (as mod index) with archives that are overwritten by thos mod's loose files. Updates may be delayed */ - virtual std::set<unsigned int> getModArchiveLooseOverwrite() { return std::set<unsigned int>(); } + virtual std::set<unsigned int> getModArchiveLooseOverwrite() const { return std::set<unsigned int>(); } /** * @return list of mods (as mod index) with loose files that overwrite this one's archive files. Updates may be delayed */ - virtual std::set<unsigned int> getModArchiveLooseOverwritten() { return std::set<unsigned int>(); } + virtual std::set<unsigned int> getModArchiveLooseOverwritten() const { return std::set<unsigned int>(); } /** * @brief update conflict information @@ -804,6 +816,13 @@ protected: static void updateIndices(); static bool ByName(const ModInfo::Ptr &LHS, const ModInfo::Ptr &RHS); + /** + * @brief check if the content of this mod is valid. + * + * @return true if the content is valid, false otherwize. + **/ + virtual bool doTestValid() const = 0; + private: static void createFromOverwrite(PluginContainer *pluginContainer, diff --git a/src/modinfobackup.h b/src/modinfobackup.h index 393c2e38..bc340b3e 100644 --- a/src/modinfobackup.h +++ b/src/modinfobackup.h @@ -12,35 +12,32 @@ class ModInfoBackup : public ModInfoRegular public: - virtual bool updateAvailable() const { return false; } - virtual bool updateIgnored() const { return false; } - virtual bool downgradeAvailable() const { return false; } - virtual bool updateNXMInfo() { return false; } - virtual void setGameName(const QString&) {} - virtual void setNexusID(int) {} - virtual void endorse(bool) {} - virtual void parseNexusInfo() {} - virtual int getFixedPriority() const { return -1; } - virtual void ignoreUpdate(bool) {} - virtual bool canBeUpdated() const { return false; } - virtual QDateTime getExpires() const { return QDateTime(); } - virtual bool canBeEnabled() const { return false; } - virtual std::vector<QString> getIniTweaks() const { return std::vector<QString>(); } - virtual std::vector<EFlag> getFlags() const; - virtual QString getDescription() const; - virtual int getNexusFileStatus() const { return 0; } - virtual void setNexusFileStatus(int) {} - virtual QDateTime getLastNexusQuery() const { return QDateTime(); } - virtual void setLastNexusQuery(QDateTime) {} - virtual QDateTime getLastNexusUpdate() const { return QDateTime(); } - virtual void setLastNexusUpdate(QDateTime) {} - virtual QDateTime getNexusLastModified() const { return QDateTime(); } - virtual void setNexusLastModified(QDateTime) {} - virtual void getNexusFiles(QList<MOBase::ModRepositoryFileInfo*>::const_iterator&, - QList<MOBase::ModRepositoryFileInfo*>::const_iterator&) {} - virtual QString getNexusDescription() const { return QString(); } + virtual bool updateAvailable() const override { return false; } + virtual bool updateIgnored() const override { return false; } + virtual bool downgradeAvailable() const override { return false; } + virtual bool updateNXMInfo() override { return false; } + virtual void setGamePlugin(const MOBase::IPluginGame*) override {} + virtual void setNexusID(int) override {} + virtual void endorse(bool) override {} + virtual int getFixedPriority() const override { return -1; } + virtual void ignoreUpdate(bool) override {} + virtual bool canBeUpdated() const override { return false; } + virtual QDateTime getExpires() const override { return QDateTime(); } + virtual bool canBeEnabled() const override { return false; } + virtual std::vector<QString> getIniTweaks() const override { return std::vector<QString>(); } + virtual std::vector<EFlag> getFlags() const override; + virtual QString getDescription() const override; + virtual int getNexusFileStatus() const override { return 0; } + virtual void setNexusFileStatus(int) override {} + virtual QDateTime getLastNexusQuery() const override { return QDateTime(); } + virtual void setLastNexusQuery(QDateTime) override {} + virtual QDateTime getLastNexusUpdate() const override { return QDateTime(); } + virtual void setLastNexusUpdate(QDateTime) override {} + virtual QDateTime getNexusLastModified() const override { return QDateTime(); } + virtual void setNexusLastModified(QDateTime) override {} + virtual QString getNexusDescription() const override { return QString(); } - virtual void addInstalledFile(int, int) {} + virtual void addInstalledFile(int, int) override {} private: diff --git a/src/modinfodialognexus.cpp b/src/modinfodialognexus.cpp index 59bfe930..447beea6 100644 --- a/src/modinfodialognexus.cpp +++ b/src/modinfodialognexus.cpp @@ -324,7 +324,7 @@ void NexusTab::onSourceGameChanged() for (auto game : plugin().plugins<MOBase::IPluginGame>()) { if (game->gameName() == ui->sourceGame->currentText()) { - mod().setGameName(game->gameShortName()); + mod().setGamePlugin(game); mod().setLastNexusQuery(QDateTime::fromSecsSinceEpoch(0)); refreshData(mod().getNexusID()); return; diff --git a/src/modinfoforeign.h b/src/modinfoforeign.h index c5763d6b..7725c793 100644 --- a/src/modinfoforeign.h +++ b/src/modinfoforeign.h @@ -1,9 +1,11 @@ #ifndef MODINFOFOREIGN_H #define MODINFOFOREIGN_H +#include <limits> + #include "modinfowithconflictinfo.h" -class ModInfoForeign : public ModInfoWithConflictInfo +class ModInfoForeign: public ModInfoWithConflictInfo { Q_OBJECT @@ -12,65 +14,66 @@ class ModInfoForeign : public ModInfoWithConflictInfo public: - virtual bool updateAvailable() const { return false; } - virtual bool updateIgnored() const { return false; } - virtual bool downgradeAvailable() const { return false; } - virtual bool updateNXMInfo() { return false; } - virtual void setCategory(int, bool) {} - virtual bool setName(const QString&) { return false; } - virtual void setComments(const QString&) {} - virtual void setNotes(const QString&) {} - virtual void setGameName(const QString&) {} - virtual void setNexusID(int) {} - virtual void setNewestVersion(const MOBase::VersionInfo&) {} - virtual void ignoreUpdate(bool) {} - virtual void setNexusDescription(const QString&) {} - virtual void setInstallationFile(const QString&) {} - virtual void addNexusCategory(int) {} - virtual void setIsEndorsed(bool) {} - virtual void setNeverEndorse() {} - virtual void setIsTracked(bool) {} - virtual bool remove() { return false; } - virtual void endorse(bool) {} - virtual void track(bool) {} - virtual void parseNexusInfo() {} - virtual bool isEmpty() const { return false; } - virtual QString name() const { return m_Name; } - virtual QString internalName() const { return m_InternalName; } - virtual QString comments() const { return ""; } - virtual QString notes() const { return ""; } - virtual QDateTime creationTime() const; - virtual QString absolutePath() const; - virtual MOBase::VersionInfo getNewestVersion() const { return QString(); } - virtual QString getInstallationFile() const { return ""; } - virtual QString getGameName() const { return ""; } - virtual int getNexusID() const { return -1; } - virtual QDateTime getExpires() const { return QDateTime(); } - virtual std::vector<QString> getIniTweaks() const { return std::vector<QString>(); } - virtual std::vector<ModInfo::EFlag> getFlags() const; - virtual int getHighlight() const; - virtual QString getDescription() const; - virtual int getNexusFileStatus() const { return 0; } - virtual void setNexusFileStatus(int) {} - virtual QDateTime getLastNexusUpdate() const { return QDateTime(); } - virtual void setLastNexusUpdate(QDateTime) {} - virtual QDateTime getLastNexusQuery() const { return QDateTime(); } - virtual void setLastNexusQuery(QDateTime) {} - virtual QDateTime getNexusLastModified() const { return QDateTime(); } - virtual void setNexusLastModified(QDateTime) {} - virtual QString getNexusDescription() const { return QString(); } - virtual int getFixedPriority() const { return INT_MIN; } - virtual QStringList archives(bool checkOnDisk = false) { return m_Archives; } - virtual QStringList stealFiles() const { return m_Archives + QStringList(m_ReferenceFile); } - virtual bool alwaysEnabled() const { return true; } - virtual void addInstalledFile(int, int) {} + virtual bool updateAvailable() const override { return false; } + virtual bool updateIgnored() const override { return false; } + virtual bool downgradeAvailable() const override { return false; } + virtual bool updateNXMInfo() override { return false; } + virtual void setCategory(int, bool) override {} + virtual bool setName(const QString&) override { return false; } + virtual void setComments(const QString&) override {} + virtual void setNotes(const QString&) override {} + virtual void setGamePlugin(const MOBase::IPluginGame*) override {} + virtual void setNexusID(int) override {} + virtual void setNewestVersion(const MOBase::VersionInfo&) override {} + virtual void ignoreUpdate(bool) override {} + virtual void setNexusDescription(const QString&) override {} + virtual void setInstallationFile(const QString&) override {} + virtual void addNexusCategory(int) override {} + virtual void setIsEndorsed(bool) override {} + virtual void setNeverEndorse() override {} + virtual void setIsTracked(bool) override {} + virtual bool remove() override { return false; } + virtual void endorse(bool) override {} + virtual void track(bool) override {} + virtual bool isEmpty() const override { return false; } + virtual QString name() const override { return m_Name; } + virtual QString internalName() const override { return m_InternalName; } + virtual QString comments() const override { return ""; } + virtual QString notes() const override { return ""; } + virtual QDateTime creationTime() const override; + virtual QString absolutePath() const override; + virtual MOBase::VersionInfo getNewestVersion() const override { return QString(); } + virtual QString getInstallationFile() const override { return ""; } + virtual QString getGameName() const override { return ""; } + virtual int getNexusID() const override { return -1; } + virtual QDateTime getExpires() const override { return QDateTime(); } + virtual std::vector<QString> getIniTweaks() const override { return std::vector<QString>(); } + virtual std::vector<ModInfo::EFlag> getFlags() const override; + virtual int getHighlight() const override; + virtual QString getDescription() const override; + virtual int getNexusFileStatus() const override { return 0; } + virtual void setNexusFileStatus(int) override {} + virtual QDateTime getLastNexusUpdate() const override { return QDateTime(); } + virtual void setLastNexusUpdate(QDateTime) override {} + virtual QDateTime getLastNexusQuery() const override { return QDateTime(); } + virtual void setLastNexusQuery(QDateTime) override {} + virtual QDateTime getNexusLastModified() const override { return QDateTime(); } + virtual void setNexusLastModified(QDateTime) override {} + virtual QString getNexusDescription() const override { return QString(); } + virtual int getFixedPriority() const override { return std::numeric_limits<int>::min(); } + virtual QStringList archives(bool = false) override { return m_Archives; } + virtual QStringList stealFiles() const override { return m_Archives + QStringList(m_ReferenceFile); } + virtual bool alwaysEnabled() const override { return true; } + virtual void addInstalledFile(int, int) override {} ModInfo::EModType modType() const { return m_ModType; } protected: ModInfoForeign(const QString &modName, const QString &referenceFile, const QStringList &archives, ModInfo::EModType modType, - MOShared::DirectoryEntry **directoryStructure, PluginContainer *pluginContainer); + MOShared::DirectoryEntry **directoryStructure, PluginContainer *pluginContainer); + + virtual bool doTestValid() const { return true; } private: QString m_Name; diff --git a/src/modinfooverwrite.h b/src/modinfooverwrite.h index ecbdbe3d..070ba6ef 100644 --- a/src/modinfooverwrite.h +++ b/src/modinfooverwrite.h @@ -1,6 +1,8 @@ #ifndef MODINFOOVERWRITE_H #define MODINFOOVERWRITE_H +#include <limits> + #include "modinfowithconflictinfo.h" #include <QDateTime> @@ -14,60 +16,61 @@ class ModInfoOverwrite : public ModInfoWithConflictInfo public: - virtual bool updateAvailable() const { return false; } - virtual bool updateIgnored() const { return false; } - virtual bool downgradeAvailable() const { return false; } - virtual bool updateNXMInfo() { return false; } - virtual void setCategory(int, bool) {} - virtual bool setName(const QString&) { return false; } - virtual void setComments(const QString&) {} - virtual void setNotes(const QString&) {} - virtual void setGameName(const QString&) {} - virtual void setNexusID(int) {} - virtual void setNewestVersion(const MOBase::VersionInfo&) {} - virtual void ignoreUpdate(bool) {} - virtual void setNexusDescription(const QString&) {} - virtual void setInstallationFile(const QString&) {} - virtual void addNexusCategory(int) {} - virtual void setIsEndorsed(bool) {} - virtual void setNeverEndorse() {} - virtual void setIsTracked(bool) {} - virtual bool remove() { return false; } - virtual void endorse(bool) {} - virtual void track(bool) {} - virtual void parseNexusInfo() {} - virtual bool alwaysEnabled() const { return true; } - virtual bool isEmpty() const; - virtual QString name() const { return "Overwrite"; } - virtual QString comments() const { return ""; } - virtual QString notes() const { return ""; } - virtual QDateTime creationTime() const { return QDateTime(); } - virtual QString absolutePath() const; - virtual MOBase::VersionInfo getNewestVersion() const { return QString(); } - virtual QString getInstallationFile() const { return ""; } - virtual int getFixedPriority() const { return INT_MAX; } - virtual QString getGameName() const { return ""; } - virtual int getNexusID() const { return -1; } - virtual QDateTime getExpires() const { return QDateTime(); } - virtual std::vector<QString> getIniTweaks() const { return std::vector<QString>(); } - virtual std::vector<ModInfo::EFlag> getFlags() const; - virtual std::vector<ModInfo::EConflictFlag> getConflictFlags() const; - virtual int getHighlight() const; - virtual QString getDescription() const; - virtual int getNexusFileStatus() const { return 0; } - virtual void setNexusFileStatus(int) {} - virtual QDateTime getLastNexusUpdate() const { return QDateTime(); } - virtual void setLastNexusUpdate(QDateTime) {} - virtual QDateTime getLastNexusQuery() const { return QDateTime(); } - virtual void setLastNexusQuery(QDateTime) {} - virtual QDateTime getNexusLastModified() const { return QDateTime(); } - virtual void setNexusLastModified(QDateTime) {} - virtual QString getNexusDescription() const { return QString(); } - virtual QStringList archives(bool checkOnDisk = false); - virtual void addInstalledFile(int, int) {} + virtual bool updateAvailable() const override { return false; } + virtual bool updateIgnored() const override { return false; } + virtual bool downgradeAvailable() const override { return false; } + virtual bool updateNXMInfo() override { return false; } + virtual void setCategory(int, bool) override {} + virtual bool setName(const QString&) override { return false; } + virtual void setComments(const QString&) override {} + virtual void setNotes(const QString&) override {} + virtual void setGamePlugin(const MOBase::IPluginGame*) override {} + virtual void setNexusID(int) override {} + virtual void setNewestVersion(const MOBase::VersionInfo&) override {} + virtual void ignoreUpdate(bool) override {} + virtual void setNexusDescription(const QString&) override {} + virtual void setInstallationFile(const QString&) override {} + virtual void addNexusCategory(int) override {} + virtual void setIsEndorsed(bool) override {} + virtual void setNeverEndorse() override {} + virtual void setIsTracked(bool) override {} + virtual bool remove() override { return false; } + virtual void endorse(bool) override {} + virtual void track(bool) override {} + virtual bool alwaysEnabled() const override { return true; } + virtual bool isEmpty() const override; + virtual QString name() const override { return "Overwrite"; } + virtual QString comments() const override { return ""; } + virtual QString notes() const override { return ""; } + virtual QDateTime creationTime() const override { return QDateTime(); } + virtual QString absolutePath() const override; + virtual MOBase::VersionInfo getNewestVersion() const override { return QString(); } + virtual QString getInstallationFile() const override { return ""; } + virtual int getFixedPriority() const override { return std::numeric_limits<int>::min(); } + virtual QString getGameName() const override { return ""; } + virtual int getNexusID() const override { return -1; } + virtual QDateTime getExpires() const override { return QDateTime(); } + virtual std::vector<QString> getIniTweaks() const override { return std::vector<QString>(); } + virtual std::vector<ModInfo::EFlag> getFlags() const override; + virtual std::vector<ModInfo::EConflictFlag> getConflictFlags() const override; + virtual int getHighlight() const override; + virtual QString getDescription() const override; + virtual int getNexusFileStatus() const override { return 0; } + virtual void setNexusFileStatus(int) override {} + virtual QDateTime getLastNexusUpdate() const override { return QDateTime(); } + virtual void setLastNexusUpdate(QDateTime) override {} + virtual QDateTime getLastNexusQuery() const override { return QDateTime(); } + virtual void setLastNexusQuery(QDateTime) override {} + virtual QDateTime getNexusLastModified() const override { return QDateTime(); } + virtual void setNexusLastModified(QDateTime) override {} + virtual QString getNexusDescription() const override { return QString(); } + virtual QStringList archives(bool checkOnDisk = false) override; + virtual void addInstalledFile(int, int) override {} -private: +protected: + virtual bool doTestValid() const { return true; } +private: ModInfoOverwrite(PluginContainer *pluginContainer, MOShared::DirectoryEntry **directoryStructure ); }; diff --git a/src/modinforegular.cpp b/src/modinforegular.cpp index 3cff914a..6a0a1b7d 100644 --- a/src/modinforegular.cpp +++ b/src/modinforegular.cpp @@ -1,4 +1,5 @@ #include "modinforegular.h" +#include "installationtester.h" #include "categories.h" #include "messagedialog.h" @@ -29,6 +30,7 @@ ModInfoRegular::ModInfoRegular(PluginContainer *pluginContainer, const IPluginGa , m_Name(path.dirName()) , m_Path(path.absolutePath()) , m_Repository() + , m_GamePlugin(game) , m_GameName(game->gameShortName()) , m_IsAlternate(false) , m_Converted(false) @@ -269,6 +271,34 @@ void ModInfoRegular::saveMeta() } } +bool ModInfoRegular::doTestValid() const { + + bool valid = false; + QDirIterator dirIter(absolutePath()); + while (dirIter.hasNext()) { + dirIter.next(); + if (dirIter.fileInfo().isDir()) { + if (InstallationTester::isTopLevelDirectory(dirIter.fileName())) { + valid = true; + break; + } + } + else { + if (InstallationTester::isTopLevelSuffix(dirIter.fileName())) { + valid = true; + break; + } + } + } + + // NOTE: in Qt 4.7 it seems that QDirIterator leaves a file handle open if it is not iterated to the + // end + while (dirIter.hasNext()) { + dirIter.next(); + } + + return valid; +} bool ModInfoRegular::updateAvailable() const { @@ -467,10 +497,12 @@ void ModInfoRegular::setNotes(const QString ¬es) m_MetaInfoChanged = true; } -void ModInfoRegular::setGameName(const QString &gameName) +void ModInfoRegular::setGamePlugin(const MOBase::IPluginGame* gamePlugin) { - m_GameName = gameName; + m_GamePlugin = gamePlugin; + m_GameName = gamePlugin->gameShortName(); m_MetaInfoChanged = true; + testValid(); } void ModInfoRegular::setNexusID(int modID) diff --git a/src/modinforegular.h b/src/modinforegular.h index 705e66a8..1cef24fb 100644 --- a/src/modinforegular.h +++ b/src/modinforegular.h @@ -1,6 +1,8 @@ #ifndef MODINFOREGULAR_H #define MODINFOREGULAR_H +#include <limits> + #include "modinfowithconflictinfo.h" #include "nexusinterface.h" @@ -22,9 +24,9 @@ public: ~ModInfoRegular(); - virtual bool isRegular() const { return true; } + virtual bool isRegular() const override { return true; } - virtual bool isEmpty() const; + virtual bool isEmpty() const override; bool isAlternate() { return m_IsAlternate; } bool isConverted() { return m_Converted; } @@ -39,12 +41,12 @@ public: * * @return true if there is a newer version **/ - bool updateAvailable() const; + bool updateAvailable() const override; /** * @return true if the current update is being ignored */ - virtual bool updateIgnored() const { return m_IgnoredVersion.isValid() && m_IgnoredVersion == m_NewestVersion; } + virtual bool updateIgnored() const override { return m_IgnoredVersion.isValid() && m_IgnoredVersion == m_NewestVersion; } /** * @brief test if there is a newer version of the mod @@ -55,7 +57,7 @@ public: * * @return true if there is a newer version **/ - bool downgradeAvailable() const; + bool downgradeAvailable() const override; /** * @brief request an update of nexus description for this mod. @@ -65,7 +67,7 @@ public: * * @return returns true if information for this mod will be updated, false if there is no nexus mod id to use **/ - bool updateNXMInfo(); + bool updateNXMInfo() override; /** * @brief assign or unassign the specified category @@ -76,7 +78,7 @@ public: * @param active determines wheter the category is assigned or unassigned * @note this function does not test whether categoryID actually identifies a valid category **/ - void setCategory(int categoryID, bool active); + void setCategory(int categoryID, bool active) override; /** * @brief set the name of this mod @@ -88,33 +90,33 @@ public: * @return true on success, false if the new name can't be used (i.e. because the new * directory name wouldn't be valid) **/ - bool setName(const QString &name); + bool setName(const QString &name) override; /** * @brief changes the comments (manually set information displayed in the mod list) for this mod * @param comments new comments */ - void setComments(const QString &comments); + void setComments(const QString &comments) override; /** * @brief change the notes (manually set information) for this mod * @param notes new notes */ - void setNotes(const QString ¬es); + void setNotes(const QString ¬es) override; /** - * @brief set/change the source game of this mod - * - * @param gameName the source game shortName - */ - void setGameName(const QString &gameName); + * @brief set/change the game plgin for this mod + * + * @param gamePlugin the game plugin + */ + virtual void setGamePlugin(const MOBase::IPluginGame* gamePlugin) override; /** * @brief set/change the nexus mod id of this mod * * @param modID the nexus mod id **/ - void setNexusID(int modID); + void setNexusID(int modID) override; /** * @brief set the version of this mod @@ -124,7 +126,7 @@ public: * * @param version the new version to use **/ - void setVersion(const MOBase::VersionInfo &version); + void setVersion(const MOBase::VersionInfo &version) override; /** * @brief set the newest version of this mod on the nexus @@ -136,73 +138,73 @@ public: * @todo this function should be made obsolete. All queries for mod information should go through * this class so no public function for this change is required **/ - void setNewestVersion(const MOBase::VersionInfo &version); + void setNewestVersion(const MOBase::VersionInfo &version) override; /** * @brief changes/updates the nexus description text * @param description the current description text */ - virtual void setNexusDescription(const QString &description); + virtual void setNexusDescription(const QString &description) override; - virtual void setInstallationFile(const QString &fileName); + virtual void setInstallationFile(const QString &fileName) override; /** * @brief sets the category id from a nexus category id. Conversion to MO id happens internally * @param categoryID the nexus category id * @note if a mapping is not possible, the category is set to the default value */ - virtual void addNexusCategory(int categoryID); + virtual void addNexusCategory(int categoryID) override; /** * @brief sets the new primary category of the mod * @param categoryID the category to set */ - virtual void setPrimaryCategory(int categoryID) { m_PrimaryCategory = categoryID; m_MetaInfoChanged = true; } + virtual void setPrimaryCategory(int categoryID) override { m_PrimaryCategory = categoryID; m_MetaInfoChanged = true; } /** * @brief sets the download repository * @param repository */ - virtual void setRepository(const QString &repository) { m_Repository = repository; } + virtual void setRepository(const QString &repository) override { m_Repository = repository; } /** * update the endorsement state for the mod. This only changes the * buffered state, it does not sync with Nexus * @param endorsed the new endorsement state */ - virtual void setIsEndorsed(bool endorsed); + virtual void setIsEndorsed(bool endorsed) override; /** * set the mod to "i don't intend to endorse". The mod will not show as unendorsed but can still be endorsed */ - virtual void setNeverEndorse(); + virtual void setNeverEndorse() override; /** * update the tracked state for the mod. This only changes the * buffered state. It does not sync with Nexus * @param tracked the new tracked state */ - virtual void setIsTracked(bool tracked); + virtual void setIsTracked(bool tracked) override; /** * @brief delete the mod from the disc. This does not update the global ModInfo structure or indices * @return true if the mod was successfully removed **/ - bool remove(); + bool remove() override; /** * @brief endorse or un-endorse the mod * @param doEndorse if true, the mod is endorsed, if false, it's un-endorsed. * @note if doEndorse doesn't differ from the current value, nothing happens. */ - virtual void endorse(bool doEndorse); + virtual void endorse(bool doEndorse) override; /** * @brief track or untrack the mod. This will sync with nexus! * @param doTrack if true, the mod is tracked, if false, it's untracked. * @note if doTrack doesn't differ from the current value, nothing happens. */ - virtual void track(bool doTrack); + virtual void track(bool doTrack) override; /** * @brief updates the mod to flag it as converted in order to ignore the alternate game warning @@ -219,183 +221,183 @@ public: * * @return the mod name **/ - QString name() const { return m_Name; } + QString name() const override { return m_Name; } /** * @brief getter for the mod path * * @return the (absolute) path to the mod **/ - QString absolutePath() const; + QString absolutePath() const override; /** * @brief getter for the newest version number of this mod * * @return newest version of the mod **/ - MOBase::VersionInfo getNewestVersion() const { return m_NewestVersion; } + MOBase::VersionInfo getNewestVersion() const override { return m_NewestVersion; } /** * @brief ignore the newest version for updates */ - void ignoreUpdate(bool ignore); + void ignoreUpdate(bool ignore) override; /** * @brief getter for the installation file * * @return file used to install this mod from */ - virtual QString getInstallationFile() const { return m_InstallationFile; } + virtual QString getInstallationFile() const override { return m_InstallationFile; } /** * @brief getter for the source game repository * * @return the source game repository. should default to the active game. **/ - QString getGameName() const { return m_GameName; } + QString getGameName() const override { return m_GameName; } /** * @brief getter for the nexus mod id * * @return the nexus mod id. may be 0 if the mod id isn't known or doesn't exist **/ - int getNexusID() const { return m_NexusID; } + int getNexusID() const override { return m_NexusID; } /** * @return the fixed priority of mods of this type or INT_MIN if the priority of mods * needs to be user-modifiable */ - virtual int getFixedPriority() const { return INT_MIN; } + virtual int getFixedPriority() const override { return std::numeric_limits<int>::min(); } /** * @return true if the mod can be updated */ - virtual bool canBeUpdated() const; + virtual bool canBeUpdated() const override; /** * @return the update expiration date based on the last updated date from Nexus */ - virtual QDateTime getExpires() const; + virtual QDateTime getExpires() const override; /** * @return true if the mod can be enabled/disabled */ - virtual bool canBeEnabled() const { return true; } + virtual bool canBeEnabled() const override { return true; } /** * @return a list of flags for this mod */ - virtual std::vector<EFlag> getFlags() const; + virtual std::vector<EFlag> getFlags() const override; - virtual std::vector<EContent> getContents() const; + virtual std::vector<EContent> getContents() const override; /** * @return an indicator if and how this mod should be highlighted by the UI */ - virtual int getHighlight() const; + virtual int getHighlight() const override; /** * @return list of names of ini tweaks **/ - std::vector<QString> getIniTweaks() const; + std::vector<QString> getIniTweaks() const override; /** * @return a description about the mod, to be displayed in the ui */ - virtual QString getDescription() const; + virtual QString getDescription() const override; /** * @return the nexus file status (aka category ID) */ - virtual int getNexusFileStatus() const; + virtual int getNexusFileStatus() const override; /** * @brief sets the file status (category ID) from Nexus * @param status the status id of the installed file */ - virtual void setNexusFileStatus(int status); + virtual void setNexusFileStatus(int status) override; /** * @return comments for this mod */ - virtual QString comments() const; + virtual QString comments() const override; /** * @return manually set notes for this mod */ - virtual QString notes() const; + virtual QString notes() const override; /** * @return time this mod was created (file time of the directory) */ - virtual QDateTime creationTime() const; + virtual QDateTime creationTime() const override; /** * @return nexus description of the mod (html) */ - QString getNexusDescription() const; + QString getNexusDescription() const override; /** * @return repository from which the file was downloaded */ - virtual QString repository() const; + virtual QString repository() const override; /** * @return true if the file has been endorsed on nexus */ - virtual EEndorsedState endorsedState() const; + virtual EEndorsedState endorsedState() const override; /** * @return true if the file is being tracked on nexus */ - virtual ETrackedState trackedState() const; + virtual ETrackedState trackedState() const override; /** * @brief get the last time nexus was checked for file updates on this mod */ - virtual QDateTime getLastNexusUpdate() const; + virtual QDateTime getLastNexusUpdate() const override; /** * @brief set the last time nexus was checked for file updates on this mod */ - virtual void setLastNexusUpdate(QDateTime time); + virtual void setLastNexusUpdate(QDateTime time) override; /** * @return last time nexus was queried for infos on this mod */ - virtual QDateTime getLastNexusQuery() const; + virtual QDateTime getLastNexusQuery() const override; /** * @brief set the last time nexus was queried for info on this mod */ - virtual void setLastNexusQuery(QDateTime time); + virtual void setLastNexusQuery(QDateTime time) override; /** * @return last time the mod was updated on Nexus */ - virtual QDateTime getNexusLastModified() const; + virtual QDateTime getNexusLastModified() const override; /** * @brief set the last time the mod was updated on Nexus */ - virtual void setNexusLastModified(QDateTime time); + virtual void setNexusLastModified(QDateTime time) override; - virtual QStringList archives(bool checkOnDisk = false); + virtual QStringList archives(bool checkOnDisk = false) override; - virtual void setColor(QColor color); + virtual void setColor(QColor color) override; virtual QColor getColor(); - virtual void addInstalledFile(int modId, int fileId); + virtual void addInstalledFile(int modId, int fileId) override; /** * @brief stores meta information back to disk */ - virtual void saveMeta(); + virtual void saveMeta() override; - void readMeta(); + void readMeta() override; virtual void setHasCustomURL(bool b) override; virtual bool hasCustomURL() const override; @@ -418,6 +420,13 @@ protected: ModInfoRegular(PluginContainer *pluginContainer, const MOBase::IPluginGame *game, const QDir &path, MOShared::DirectoryEntry **directoryStructure); + /** + * @brief check if the content of this mod is valid. + * + * @return true if the content is valid, false otherwize. + **/ + virtual bool doTestValid() const; + private: QString m_Name; @@ -429,6 +438,10 @@ private: QString m_Repository; QString m_CustomURL; bool m_HasCustomURL; + + // Storing both the game name and game plugin since we can have a game + // name that is not one of the primary names of the game plugin: + const MOBase::IPluginGame* m_GamePlugin; QString m_GameName; mutable QStringList m_Archives; diff --git a/src/modinfoseparator.h b/src/modinfoseparator.h index 4b1e5217..d715d548 100644 --- a/src/modinfoseparator.h +++ b/src/modinfoseparator.h @@ -12,62 +12,44 @@ class ModInfoSeparator: public: - virtual bool updateAvailable() const { return false; } - virtual bool updateIgnored() const { return false; } - virtual bool downgradeAvailable() const { return false; } - virtual bool updateNXMInfo() { return false; } - virtual bool isValid() const { return true; } + virtual bool updateAvailable() const override { return false; } + virtual bool updateIgnored() const override { return false; } + virtual bool downgradeAvailable() const override { return false; } + virtual bool updateNXMInfo() override { return false; } + virtual bool isValid() const override { return true; } //TODO: Fix renaming method to avoid priority reset virtual bool setName(const QString& name); - virtual int getNexusID() const { return -1; } + virtual int getNexusID() const override { return -1; } + virtual void setGamePlugin(const MOBase::IPluginGame* /*gamePlugin*/) override {} + virtual void setNexusID(int /*modID*/) override {} + virtual void endorse(bool /*doEndorse*/) override {} + virtual void ignoreUpdate(bool /*ignore*/) override {} + virtual bool canBeUpdated() const override { return false; } + virtual QDateTime getExpires() const override { return QDateTime(); } + virtual bool canBeEnabled() const override { return false; } + virtual std::vector<QString> getIniTweaks() const override { return std::vector<QString>(); } + virtual std::vector<EFlag> getFlags() const override; + virtual int getHighlight() const override; + virtual QString getDescription() const override; + virtual QString name() const override; + virtual QString getGameName() const override { return ""; } + virtual QString getInstallationFile() const override { return ""; } + virtual QString repository() const override { return ""; } + virtual int getNexusFileStatus() const override { return 0; } + virtual void setNexusFileStatus(int) override {} + virtual QDateTime getLastNexusUpdate() const override { return QDateTime(); } + virtual void setLastNexusUpdate(QDateTime) override {} + virtual QDateTime getLastNexusQuery() const override { return QDateTime(); } + virtual void setLastNexusQuery(QDateTime) override {} + virtual QDateTime getNexusLastModified() const override { return QDateTime(); } + virtual void setNexusLastModified(QDateTime) override {} + virtual QDateTime creationTime() const override { return QDateTime(); } + virtual QString getNexusDescription() const override { return QString(); } + virtual void addInstalledFile(int /*modId*/, int /*fileId*/) override { } - virtual void setGameName(const QString& /*gameName*/) {} - - virtual void setNexusID(int /*modID*/) {} - - virtual void endorse(bool /*doEndorse*/) {} - - virtual void parseNexusInfo() {} - - virtual void ignoreUpdate(bool /*ignore*/) {} - - virtual bool canBeUpdated() const { return false; } - virtual QDateTime getExpires() const { return QDateTime(); } - virtual bool canBeEnabled() const { return false; } - virtual std::vector<QString> getIniTweaks() const { return std::vector<QString>(); } - - virtual std::vector<EFlag> getFlags() const; - virtual int getHighlight() const; - - virtual QString getDescription() const; - virtual QString name() const; - virtual QString getGameName() const { return ""; } - virtual QString getInstallationFile() const { return ""; } - virtual QString getURL() const { return ""; } - virtual QString repository() const { return ""; } - virtual int getNexusFileStatus() const { return 0; } - virtual void setNexusFileStatus(int) {} - virtual QDateTime getLastNexusUpdate() const { return QDateTime(); } - virtual void setLastNexusUpdate(QDateTime) {} - virtual QDateTime getLastNexusQuery() const { return QDateTime(); } - virtual void setLastNexusQuery(QDateTime) {} - virtual QDateTime getNexusLastModified() const { return QDateTime(); } - virtual void setNexusLastModified(QDateTime) {} - virtual QDateTime creationTime() const { return QDateTime(); } - - virtual void getNexusFiles - ( - QList<MOBase::ModRepositoryFileInfo*>::const_iterator& /*unused*/, - QList<MOBase::ModRepositoryFileInfo*>::const_iterator& /*unused*/) - { - } - - virtual QString getNexusDescription() const { return QString(); } - - virtual void addInstalledFile(int /*modId*/, int /*fileId*/) - { - } +protected: + virtual bool doTestValid() const override { return true; } private: diff --git a/src/modinfowithconflictinfo.h b/src/modinfowithconflictinfo.h index 460a7f49..c2a49afb 100644 --- a/src/modinfowithconflictinfo.h +++ b/src/modinfowithconflictinfo.h @@ -12,27 +12,27 @@ public: ModInfoWithConflictInfo(PluginContainer *pluginContainer, MOShared::DirectoryEntry **directoryStructure); - std::vector<ModInfo::EConflictFlag> getConflictFlags() const; - virtual std::vector<ModInfo::EFlag> getFlags() const; + std::vector<ModInfo::EConflictFlag> getConflictFlags() const override; + virtual std::vector<ModInfo::EFlag> getFlags() const override; /** * @brief clear all caches held for this mod */ - virtual void clearCaches(); + virtual void clearCaches() override; - virtual std::set<unsigned int> getModOverwrite() { return m_OverwriteList; } + virtual std::set<unsigned int> getModOverwrite() const override { return m_OverwriteList; } - virtual std::set<unsigned int> getModOverwritten() { return m_OverwrittenList; } + virtual std::set<unsigned int> getModOverwritten() const override { return m_OverwrittenList; } - virtual std::set<unsigned int> getModArchiveOverwrite() { return m_ArchiveOverwriteList; } + virtual std::set<unsigned int> getModArchiveOverwrite() const override { return m_ArchiveOverwriteList; } - virtual std::set<unsigned int> getModArchiveOverwritten() { return m_ArchiveOverwrittenList; } + virtual std::set<unsigned int> getModArchiveOverwritten() const override { return m_ArchiveOverwrittenList; } - virtual std::set<unsigned int> getModArchiveLooseOverwrite() { return m_ArchiveLooseOverwriteList; } + virtual std::set<unsigned int> getModArchiveLooseOverwrite() const override { return m_ArchiveLooseOverwriteList; } - virtual std::set<unsigned int> getModArchiveLooseOverwritten() { return m_ArchiveLooseOverwrittenList; } + virtual std::set<unsigned int> getModArchiveLooseOverwritten() const override { return m_ArchiveLooseOverwrittenList; } - virtual void doConflictCheck() const; + virtual void doConflictCheck() const override; private: |
