summaryrefslogtreecommitdiff
path: root/src/modinforegular.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/modinforegular.cpp')
-rw-r--r--src/modinforegular.cpp108
1 files changed, 97 insertions, 11 deletions
diff --git a/src/modinforegular.cpp b/src/modinforegular.cpp
index 529f20cb..8bef1c28 100644
--- a/src/modinforegular.cpp
+++ b/src/modinforegular.cpp
@@ -55,8 +55,8 @@ ModInfoRegular::ModInfoRegular(PluginContainer *pluginContainer, const IPluginGa
, this, SLOT(nxmDescriptionAvailable(QString,int,QVariant,QVariant)));
connect(&m_NexusBridge, SIGNAL(endorsementToggled(QString,int,QVariant,QVariant))
, this, SLOT(nxmEndorsementToggled(QString,int,QVariant,QVariant)));
- connect(&m_NexusBridge, SIGNAL(requestFailed(QString,int,int,QVariant,QString))
- , this, SLOT(nxmRequestFailed(QString,int,int,QVariant,QString)));
+ connect(&m_NexusBridge, SIGNAL(requestFailed(QString,int,int,QVariant,QNetworkReply::NetworkError,QString))
+ , this, SLOT(nxmRequestFailed(QString,int,int,QVariant,QNetworkReply::NetworkError,QString)));
}
@@ -93,11 +93,14 @@ void ModInfoRegular::readMeta()
m_IgnoredVersion = metaFile.value("ignoredVersion", "").toString();
m_InstallationFile = metaFile.value("installationFile", "").toString();
m_NexusDescription = metaFile.value("nexusDescription", "").toString();
+ m_NexusFileStatus = metaFile.value("nexusFileStatus", "1").toInt();
m_Repository = metaFile.value("repository", "Nexus").toString();
m_Converted = metaFile.value("converted", false).toBool();
m_Validated = metaFile.value("validated", false).toBool();
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>()) {
@@ -160,7 +163,10 @@ void ModInfoRegular::saveMeta()
metaFile.setValue("notes", m_Notes);
metaFile.setValue("nexusDescription", m_NexusDescription);
metaFile.setValue("url", m_URL);
+ 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);
@@ -197,6 +203,9 @@ bool ModInfoRegular::updateAvailable() const
if (m_IgnoredVersion.isValid() && (m_IgnoredVersion == m_NewestVersion)) {
return false;
}
+ if (m_NexusFileStatus == 4 || m_NexusFileStatus == 6) {
+ return true;
+ }
return m_NewestVersion.isValid() && (m_Version < m_NewestVersion);
}
@@ -213,29 +222,44 @@ bool ModInfoRegular::downgradeAvailable() const
void ModInfoRegular::nxmDescriptionAvailable(QString, int, QVariant, QVariant resultData)
{
QVariantMap result = resultData.toMap();
- setNewestVersion(VersionInfo(result["version"].toString()));
setNexusDescription(result["description"].toString());
- if ((m_EndorsedState != ENDORSED_NEVER) && (result.contains("voted_by_user"))) {
- setEndorsedState(result["voted_by_user"].toBool() ? ENDORSED_TRUE : ENDORSED_FALSE);
+ if ((m_EndorsedState != ENDORSED_NEVER) && (result.contains("endorsement"))) {
+ QVariantMap endorsement = result["endorsement"].toMap();
+ QString endorsementStatus = endorsement["endorse_status"].toString();
+ if (endorsementStatus.compare("Endorsed", Qt::CaseInsensitive) == 00)
+ setEndorsedState(ENDORSED_TRUE);
+ else if (endorsementStatus.compare("Abstained", Qt::CaseInsensitive) == 00)
+ setEndorsedState(ENDORSED_NEVER);
+ else
+ setEndorsedState(ENDORSED_FALSE);
}
- m_LastNexusQuery = QDateTime::currentDateTime();
- //m_MetaInfoChanged = true;
+ m_LastNexusQuery = QDateTime::currentDateTimeUtc();
+ m_NexusLastModified = QDateTime::fromSecsSinceEpoch(result["updated_timestamp"].toInt(), Qt::UTC);
+ m_MetaInfoChanged = true;
saveMeta();
+ disconnect(sender(), SIGNAL(descriptionAvailable(QString, int, QVariant, QVariant)));
emit modDetailsUpdated(true);
}
void ModInfoRegular::nxmEndorsementToggled(QString, int, QVariant, QVariant resultData)
{
- m_EndorsedState = resultData.toBool() ? ENDORSED_TRUE : ENDORSED_FALSE;
+ QMap results = resultData.toMap();
+ if (results["status"].toString().compare("Endorsed") == 0) {
+ m_EndorsedState = ENDORSED_TRUE;
+ } else if (results["status"].toString().compare("Abstained") == 0) {
+ m_EndorsedState = ENDORSED_NEVER;
+ } else {
+ m_EndorsedState = ENDORSED_FALSE;
+ }
m_MetaInfoChanged = true;
saveMeta();
emit modDetailsUpdated(true);
}
-void ModInfoRegular::nxmRequestFailed(QString, int, int, QVariant userData, const QString &errorMessage)
+void ModInfoRegular::nxmRequestFailed(QString, int, int, QVariant userData, QNetworkReply::NetworkError error, const QString &errorMessage)
{
QString fullMessage = errorMessage;
if (userData.canConvert<int>() && (userData.toInt() == 1)) {
@@ -250,7 +274,9 @@ void ModInfoRegular::nxmRequestFailed(QString, int, int, QVariant userData, cons
bool ModInfoRegular::updateNXMInfo()
{
- if (m_NexusID > 0) {
+ QDateTime time = QDateTime::currentDateTimeUtc();
+ QDateTime target = m_LastNexusQuery.addDays(1);
+ if (m_NexusID > 0 && time >= target) {
m_NexusBridge.requestDescription(m_GameName, m_NexusID, QVariant());
return true;
}
@@ -435,7 +461,7 @@ bool ModInfoRegular::remove()
void ModInfoRegular::endorse(bool doEndorse)
{
if (doEndorse != (m_EndorsedState == ENDORSED_TRUE)) {
- m_NexusBridge.requestToggleEndorsement(m_GameName, getNexusID(), doEndorse, QVariant(1));
+ m_NexusBridge.requestToggleEndorsement(m_GameName, getNexusID(), m_Version.canonicalString(), doEndorse, QVariant(1));
}
}
@@ -470,6 +496,19 @@ void ModInfoRegular::ignoreUpdate(bool ignore)
m_MetaInfoChanged = true;
}
+bool ModInfoRegular::canBeUpdated() const
+{
+ QDateTime now = QDateTime::currentDateTimeUtc();
+ QDateTime target = getExpires();
+ if (now >= target)
+ return m_NexusID > 0;
+ return false;
+}
+
+QDateTime ModInfoRegular::getExpires() const
+{
+ return m_LastNexusUpdate.addSecs(300);
+}
std::vector<ModInfo::EFlag> ModInfoRegular::getFlags() const
{
@@ -585,6 +624,19 @@ QString ModInfoRegular::getDescription() const
}
}
+int ModInfoRegular::getNexusFileStatus() const
+{
+ return m_NexusFileStatus;
+}
+
+void ModInfoRegular::setNexusFileStatus(int status)
+{
+ m_NexusFileStatus = status;
+ m_MetaInfoChanged = true;
+ saveMeta();
+ emit modDetailsUpdated(true);
+}
+
QString ModInfoRegular::comments() const
{
return m_Comments;
@@ -615,11 +667,45 @@ ModInfoRegular::EEndorsedState ModInfoRegular::endorsedState() const
return m_EndorsedState;
}
+QDateTime ModInfoRegular::getLastNexusUpdate() const
+{
+ return m_LastNexusUpdate;
+}
+
+void ModInfoRegular::setLastNexusUpdate(QDateTime time)
+{
+ m_LastNexusUpdate = time;
+ m_MetaInfoChanged = true;
+ saveMeta();
+ emit modDetailsUpdated(true);
+}
+
QDateTime ModInfoRegular::getLastNexusQuery() const
{
return m_LastNexusQuery;
}
+void ModInfoRegular::setLastNexusQuery(QDateTime time)
+{
+ m_LastNexusQuery = time;
+ m_MetaInfoChanged = true;
+ saveMeta();
+ 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;