diff options
| -rw-r--r-- | src/mainwindow.cpp | 5 | ||||
| -rw-r--r-- | src/modinfo.h | 19 | ||||
| -rw-r--r-- | src/modinfobackup.h | 3 | ||||
| -rw-r--r-- | src/modinfoforeign.h | 3 | ||||
| -rw-r--r-- | src/modinfooverwrite.h | 3 | ||||
| -rw-r--r-- | src/modinforegular.cpp | 37 | ||||
| -rw-r--r-- | src/modinforegular.h | 16 | ||||
| -rw-r--r-- | src/modinfoseparator.h | 3 | ||||
| -rw-r--r-- | src/modlist.cpp | 2 |
9 files changed, 85 insertions, 6 deletions
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index cdf363cc..ce476143 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -5550,7 +5550,7 @@ void MainWindow::nxmUpdatesAvailable(QString gameName, int modID, QVariant userD requiresInfo = true; } - if (mod->getLastNexusQuery().addDays(1) <= QDateTime::currentDateTime()) + if (mod->getLastNexusQuery().addDays(1) <= QDateTime::currentDateTimeUtc()) requiresInfo = true; } @@ -5577,7 +5577,7 @@ void MainWindow::nxmModInfoAvailable(QString gameName, int modID, QVariant userD std::vector<ModInfo::Ptr> modsList = ModInfo::getByModID(gameNameReal, modID); for (auto mod : modsList) { QDateTime now = QDateTime::currentDateTimeUtc(); - QDateTime updateTarget = mod->getLastNexusUpdate().addSecs(3600); + QDateTime updateTarget = mod->getExpires(); if (now >= updateTarget) { mod->setNewestVersion(result["version"].toString()); mod->setLastNexusUpdate(QDateTime::currentDateTimeUtc()); @@ -5594,6 +5594,7 @@ void MainWindow::nxmModInfoAvailable(QString gameName, int modID, QVariant userD mod->setIsEndorsed(false); } mod->setLastNexusQuery(QDateTime::currentDateTimeUtc()); + mod->setNexusLastModified(QDateTime::fromSecsSinceEpoch(result["updated_timestamp"].toInt())); mod->saveMeta(); } } diff --git a/src/modinfo.h b/src/modinfo.h index 9343a98c..2048432e 100644 --- a/src/modinfo.h +++ b/src/modinfo.h @@ -24,9 +24,9 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>. #include "versioninfo.h" class PluginContainer; - -class QDateTime; class QDir; + +#include <QDateTime> #include <QMutex> #include <QSharedPointer> #include <QString> @@ -460,6 +460,11 @@ public: virtual bool canBeUpdated() const { return false; } /** + * @return the mod update check expiration date + */ + virtual QDateTime getExpires() const { return QDateTime(); } + + /** * @return true if the mod can be enabled/disabled */ virtual bool canBeEnabled() const { return false; } @@ -556,6 +561,16 @@ public: virtual void setLastNexusQuery(QDateTime time) = 0; /** + * @return last time the mod was updated on Nexus + */ + virtual QDateTime getNexusLastModified() const = 0; + + /** + * @brief set the last time the mod was updated on Nexus + */ + virtual void setNexusLastModified(QDateTime time) = 0; + + /** * @return a list of files that, if they exist in the data directory are treated as files in THIS mod */ virtual QStringList stealFiles() const { return QStringList(); } diff --git a/src/modinfobackup.h b/src/modinfobackup.h index e88335e2..3c948931 100644 --- a/src/modinfobackup.h +++ b/src/modinfobackup.h @@ -21,6 +21,7 @@ public: 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; @@ -31,6 +32,8 @@ public: 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(); } diff --git a/src/modinfoforeign.h b/src/modinfoforeign.h index 6fcf56a1..7f5bb711 100644 --- a/src/modinfoforeign.h +++ b/src/modinfoforeign.h @@ -43,6 +43,7 @@ public: 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; @@ -53,6 +54,8 @@ public: 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; } diff --git a/src/modinfooverwrite.h b/src/modinfooverwrite.h index 9f77f648..71c20bee 100644 --- a/src/modinfooverwrite.h +++ b/src/modinfooverwrite.h @@ -46,6 +46,7 @@ public: 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 int getHighlight() const; @@ -56,6 +57,8 @@ public: 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) {} diff --git a/src/modinforegular.cpp b/src/modinforegular.cpp index 8651f15e..876ccf3d 100644 --- a/src/modinforegular.cpp +++ b/src/modinforegular.cpp @@ -100,6 +100,7 @@ void ModInfoRegular::readMeta() m_URL = metaFile.value("url", "").toString(); m_LastNexusQuery = QDateTime::fromString(metaFile.value("lastNexusQuery", "").toString(), Qt::ISODate); m_LastNexusUpdate = QDateTime::fromString(metaFile.value("lastNexusUpdate", "").toString(), Qt::ISODate); + m_NexusLastModified = QDateTime::fromString(metaFile.value("nexusLastModified", QDateTime::currentDateTimeUtc()).toString(), Qt::ISODate); m_Color = metaFile.value("color",QColor()).value<QColor>(); if (metaFile.contains("endorsed")) { if (metaFile.value("endorsed").canConvert<int>()) { @@ -165,6 +166,7 @@ void ModInfoRegular::saveMeta() metaFile.setValue("nexusFileStatus", m_NexusFileStatus); metaFile.setValue("lastNexusQuery", m_LastNexusQuery.toString(Qt::ISODate)); metaFile.setValue("lastNexusUpdate", m_LastNexusUpdate.toString(Qt::ISODate)); + metaFile.setValue("nexusLastModified", m_NexusLastModified.toString(Qt::ISODate)); metaFile.setValue("converted", m_Converted); metaFile.setValue("validated", m_Validated); metaFile.setValue("color", m_Color); @@ -233,6 +235,7 @@ void ModInfoRegular::nxmDescriptionAvailable(QString, int, QVariant, QVariant re setEndorsedState(ENDORSED_FALSE); } m_LastNexusQuery = QDateTime::currentDateTimeUtc(); + m_NexusLastModified = QDateTime::fromSecsSinceEpoch(result["updated_timestamp"].toInt()); m_MetaInfoChanged = true; saveMeta(); disconnect(sender(), SIGNAL(nxmDescriptionAvailable(QString, int, QVariant, QVariant))); @@ -496,12 +499,31 @@ void ModInfoRegular::ignoreUpdate(bool ignore) bool ModInfoRegular::canBeUpdated() const { QDateTime now = QDateTime::currentDateTimeUtc(); - QDateTime target = m_LastNexusUpdate.addSecs(3600); + QDateTime target = getExpires(); if (now >= target) return m_NexusID > 0; return false; } +QDateTime ModInfoRegular::getExpires() const +{ + qint64 diff = m_NexusLastModified.msecsTo(QDateTime::currentDateTimeUtc()); + qint64 year = 31536000000; + qint64 sixMonths = 15768000000; + qint64 threeMonths = 7884000000; + qint64 oneMonth = 1314000000; + + if (diff < oneMonth) + return m_LastNexusUpdate.addSecs(7200); + else if (diff < threeMonths) + return m_LastNexusUpdate.addSecs(14400); + else if (diff < sixMonths) + return m_LastNexusUpdate.addSecs(21600); + else if (diff < year) + return m_LastNexusUpdate.addSecs(43200); + else + return m_LastNexusUpdate.addSecs(86400); +} std::vector<ModInfo::EFlag> ModInfoRegular::getFlags() const { @@ -686,6 +708,19 @@ void ModInfoRegular::setLastNexusQuery(QDateTime time) emit modDetailsUpdated(true); } +QDateTime ModInfoRegular::getNexusLastModified() const +{ + return m_NexusLastModified; +} + +void ModInfoRegular::setNexusLastModified(QDateTime time) +{ + m_NexusLastModified = time; + m_MetaInfoChanged = true; + saveMeta(); + emit modDetailsUpdated(true); +} + void ModInfoRegular::setURL(QString const &url) { m_URL = url; diff --git a/src/modinforegular.h b/src/modinforegular.h index 6ad51e5f..7dc2fd6e 100644 --- a/src/modinforegular.h +++ b/src/modinforegular.h @@ -259,6 +259,11 @@ public: virtual bool canBeUpdated() const; /** + * @return the update expiration date based on the last updated date from Nexus + */ + virtual QDateTime getExpires() const; + + /** * @return true if the mod can be enabled/disabled */ virtual bool canBeEnabled() const { return true; } @@ -348,6 +353,16 @@ public: */ virtual void setLastNexusQuery(QDateTime time); + /** + * @return last time the mod was updated on Nexus + */ + virtual QDateTime getNexusLastModified() const; + + /** + * @brief set the last time the mod was updated on Nexus + */ + virtual void setNexusLastModified(QDateTime time); + virtual QStringList archives(bool checkOnDisk = false); virtual void setColor(QColor color); @@ -405,6 +420,7 @@ private: QDateTime m_CreationTime; QDateTime m_LastNexusQuery; QDateTime m_LastNexusUpdate; + QDateTime m_NexusLastModified; QColor m_Color; diff --git a/src/modinfoseparator.h b/src/modinfoseparator.h index 819ee686..865a5179 100644 --- a/src/modinfoseparator.h +++ b/src/modinfoseparator.h @@ -31,6 +31,7 @@ public: 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>(); } @@ -49,6 +50,8 @@ public: 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 diff --git a/src/modlist.cpp b/src/modlist.cpp index 3f8ea4e1..c252d73b 100644 --- a/src/modlist.cpp +++ b/src/modlist.cpp @@ -467,7 +467,7 @@ QVariant ModList::data(const QModelIndex &modelIndex, int role) const if (!modInfo->canBeUpdated()) { text += "<br>" + tr("This mod was last checked on %1. It will be available to check after %2.") .arg(modInfo->getLastNexusUpdate().toLocalTime().toString(Qt::DefaultLocaleShortDate)) - .arg(modInfo->getLastNexusUpdate().toLocalTime().addSecs(3600).time().toString(Qt::DefaultLocaleShortDate)); + .arg(modInfo->getExpires().toLocalTime().time().toString(Qt::DefaultLocaleShortDate)); } else { text += "<br>" + tr("This mod is eligible for an update check."); text += "<br>" + tr("It was last checked on %1").arg(modInfo->getLastNexusUpdate().toLocalTime().toString(Qt::DefaultLocaleShortDate)); |
