summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikaël Capelle <capelle.mikael@gmail.com>2020-05-01 18:00:31 +0200
committerMikaël Capelle <capelle.mikael@gmail.com>2020-05-07 12:16:33 +0200
commit40c433580f69006a42dc27a6444ebd9a6cccc440 (patch)
tree426524068d3dbfcf9aba495d78a5c7bd4316dca8
parentcd2b7683b78503d4fef1946de088108b812b387c (diff)
Update ModInfo classes to handle plugin game and clean some declarations.
-rw-r--r--src/modinfo.cpp27
-rw-r--r--src/modinfo.h49
-rw-r--r--src/modinfobackup.h53
-rw-r--r--src/modinfodialognexus.cpp2
-rw-r--r--src/modinfoforeign.h111
-rw-r--r--src/modinfooverwrite.h107
-rw-r--r--src/modinforegular.cpp36
-rw-r--r--src/modinforegular.h143
-rw-r--r--src/modinfoseparator.h86
-rw-r--r--src/modinfowithconflictinfo.h20
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 &notes) = 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 &notes)
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 &notes);
+ void setNotes(const QString &notes) 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: