From 40c433580f69006a42dc27a6444ebd9a6cccc440 Mon Sep 17 00:00:00 2001 From: Mikaël Capelle Date: Fri, 1 May 2020 18:00:31 +0200 Subject: Update ModInfo classes to handle plugin game and clean some declarations. --- src/modinfooverwrite.h | 107 +++++++++++++++++++++++++------------------------ 1 file changed, 55 insertions(+), 52 deletions(-) (limited to 'src/modinfooverwrite.h') 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 + #include "modinfowithconflictinfo.h" #include @@ -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 getIniTweaks() const { return std::vector(); } - virtual std::vector getFlags() const; - virtual std::vector 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::min(); } + virtual QString getGameName() const override { return ""; } + virtual int getNexusID() const override { return -1; } + virtual QDateTime getExpires() const override { return QDateTime(); } + virtual std::vector getIniTweaks() const override { return std::vector(); } + virtual std::vector getFlags() const override; + virtual std::vector 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 ); }; -- cgit v1.3.1 From 5a90eecc21412fa705837eb724250ef1b758c993 Mon Sep 17 00:00:00 2001 From: Mikaël Capelle Date: Thu, 7 May 2020 02:07:15 +0200 Subject: Fix issue with mods not being checked properly and overwrite not having the right priority. --- src/modinfoforeign.h | 1 - src/modinfooverwrite.h | 5 +---- src/modinforegular.cpp | 29 ----------------------------- src/modinforegular.h | 7 ------- src/modinfowithconflictinfo.cpp | 31 +++++++++++++++++++++++++++++++ src/modinfowithconflictinfo.h | 9 +++++++++ 6 files changed, 41 insertions(+), 41 deletions(-) (limited to 'src/modinfooverwrite.h') diff --git a/src/modinfoforeign.h b/src/modinfoforeign.h index 7725c793..0c15c7a4 100644 --- a/src/modinfoforeign.h +++ b/src/modinfoforeign.h @@ -73,7 +73,6 @@ protected: const QStringList &archives, ModInfo::EModType modType, 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 070ba6ef..10d405bd 100644 --- a/src/modinfooverwrite.h +++ b/src/modinfooverwrite.h @@ -46,7 +46,7 @@ public: 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::min(); } + virtual int getFixedPriority() const override { return std::numeric_limits::max(); } virtual QString getGameName() const override { return ""; } virtual int getNexusID() const override { return -1; } virtual QDateTime getExpires() const override { return QDateTime(); } @@ -67,9 +67,6 @@ public: virtual QStringList archives(bool checkOnDisk = false) override; virtual void addInstalledFile(int, int) override {} -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 6a0a1b7d..e74c5070 100644 --- a/src/modinforegular.cpp +++ b/src/modinforegular.cpp @@ -1,5 +1,4 @@ #include "modinforegular.h" -#include "installationtester.h" #include "categories.h" #include "messagedialog.h" @@ -271,34 +270,6 @@ 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 { diff --git a/src/modinforegular.h b/src/modinforegular.h index 1cef24fb..11a78765 100644 --- a/src/modinforegular.h +++ b/src/modinforegular.h @@ -420,13 +420,6 @@ 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; diff --git a/src/modinfowithconflictinfo.cpp b/src/modinfowithconflictinfo.cpp index 2b4fa11c..d0516d06 100644 --- a/src/modinfowithconflictinfo.cpp +++ b/src/modinfowithconflictinfo.cpp @@ -1,4 +1,5 @@ #include "modinfowithconflictinfo.h" +#include "installationtester.h" #include "utility.h" #include "shared/directoryentry.h" #include "shared/filesorigin.h" @@ -291,3 +292,33 @@ bool ModInfoWithConflictInfo::hasHiddenFiles() const return m_HasHiddenFiles; } + + +bool ModInfoWithConflictInfo::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; +} diff --git a/src/modinfowithconflictinfo.h b/src/modinfowithconflictinfo.h index c2a49afb..0bb7c422 100644 --- a/src/modinfowithconflictinfo.h +++ b/src/modinfowithconflictinfo.h @@ -34,6 +34,15 @@ public: 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; + private: enum EConflictType { -- cgit v1.3.1 From c391c2b584a309f64f87dd5e00b0083279e6211c Mon Sep 17 00:00:00 2001 From: Mikaël Capelle Date: Tue, 19 May 2020 18:00:12 +0200 Subject: Rollback to setGameName instead of setGamePlugin for mod interface. --- src/modinfo.h | 10 +++++----- src/modinfobackup.h | 2 +- src/modinfodialognexus.cpp | 2 +- src/modinfoforeign.h | 2 +- src/modinfooverwrite.h | 2 +- src/modinforegular.cpp | 6 ++---- src/modinforegular.h | 18 ++++++++++-------- src/modinfoseparator.h | 2 +- 8 files changed, 22 insertions(+), 22 deletions(-) (limited to 'src/modinfooverwrite.h') diff --git a/src/modinfo.h b/src/modinfo.h index d611fa87..2c108378 100644 --- a/src/modinfo.h +++ b/src/modinfo.h @@ -319,11 +319,11 @@ public: virtual void setNotes(const QString ¬es) = 0; /** - * @brief set/change the game plgin for this mod - * - * @param gamePlugin the game plugin - */ - virtual void setGamePlugin(const MOBase::IPluginGame* gamePlugin) = 0; + * @brief set/change the source game of this mod + * + * @param gameName the source game shortName + */ + virtual void setGameName(const QString& gameName) = 0; /** * @brief set the name of this mod diff --git a/src/modinfobackup.h b/src/modinfobackup.h index bc340b3e..9eba545c 100644 --- a/src/modinfobackup.h +++ b/src/modinfobackup.h @@ -16,7 +16,7 @@ public: 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 setGameName(const QString& gameName) override {} virtual void setNexusID(int) override {} virtual void endorse(bool) override {} virtual int getFixedPriority() const override { return -1; } diff --git a/src/modinfodialognexus.cpp b/src/modinfodialognexus.cpp index 447beea6..8d99d230 100644 --- a/src/modinfodialognexus.cpp +++ b/src/modinfodialognexus.cpp @@ -324,7 +324,7 @@ void NexusTab::onSourceGameChanged() for (auto game : plugin().plugins()) { if (game->gameName() == ui->sourceGame->currentText()) { - mod().setGamePlugin(game); + mod().setGameName(game->gameShortName()); mod().setLastNexusQuery(QDateTime::fromSecsSinceEpoch(0)); refreshData(mod().getNexusID()); return; diff --git a/src/modinfoforeign.h b/src/modinfoforeign.h index 0c15c7a4..da2c865b 100644 --- a/src/modinfoforeign.h +++ b/src/modinfoforeign.h @@ -22,7 +22,7 @@ public: 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 setGameName(const QString& gameName) override {} virtual void setNexusID(int) override {} virtual void setNewestVersion(const MOBase::VersionInfo&) override {} virtual void ignoreUpdate(bool) override {} diff --git a/src/modinfooverwrite.h b/src/modinfooverwrite.h index 10d405bd..0bcf6f27 100644 --- a/src/modinfooverwrite.h +++ b/src/modinfooverwrite.h @@ -24,7 +24,7 @@ public: 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 setGameName(const QString& gameName) override {} virtual void setNexusID(int) override {} virtual void setNewestVersion(const MOBase::VersionInfo&) override {} virtual void ignoreUpdate(bool) override {} diff --git a/src/modinforegular.cpp b/src/modinforegular.cpp index d248f530..a1ef5701 100644 --- a/src/modinforegular.cpp +++ b/src/modinforegular.cpp @@ -468,12 +468,10 @@ void ModInfoRegular::setNotes(const QString ¬es) m_MetaInfoChanged = true; } -void ModInfoRegular::setGamePlugin(const MOBase::IPluginGame* gamePlugin) +void ModInfoRegular::setGameName(const QString& gameName) { - m_GamePlugin = gamePlugin; - m_GameName = gamePlugin->gameShortName(); + m_GameName = gameName; m_MetaInfoChanged = true; - testValid(); } void ModInfoRegular::setNexusID(int modID) diff --git a/src/modinforegular.h b/src/modinforegular.h index b4a7bfd2..75b24a6b 100644 --- a/src/modinforegular.h +++ b/src/modinforegular.h @@ -105,11 +105,11 @@ public: void setNotes(const QString ¬es) override; /** - * @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 source game of this mod + * + * @param gameName the source game shortName + */ + virtual void setGameName(const QString& gameName) override; /** * @brief set/change the nexus mod id of this mod @@ -432,9 +432,11 @@ private: 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; + // Current game plugin running in MO2: + MOBase::IPluginGame const* m_GamePlugin; + + // Game name for the mod, can be different from the actual game running in MO2 + // e.g., for Skyrim / Skyrim SE. QString m_GameName; mutable QStringList m_Archives; diff --git a/src/modinfoseparator.h b/src/modinfoseparator.h index d715d548..80734bcf 100644 --- a/src/modinfoseparator.h +++ b/src/modinfoseparator.h @@ -21,7 +21,7 @@ public: virtual bool setName(const QString& name); virtual int getNexusID() const override { return -1; } - virtual void setGamePlugin(const MOBase::IPluginGame* /*gamePlugin*/) override {} + virtual void setGameName(const QString& gameName) override {} virtual void setNexusID(int /*modID*/) override {} virtual void endorse(bool /*doEndorse*/) override {} virtual void ignoreUpdate(bool /*ignore*/) override {} -- cgit v1.3.1