summaryrefslogtreecommitdiff
path: root/src/nexusinterface.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/nexusinterface.cpp')
-rw-r--r--src/nexusinterface.cpp59
1 files changed, 59 insertions, 0 deletions
diff --git a/src/nexusinterface.cpp b/src/nexusinterface.cpp
index 2c536b14..6a39128f 100644
--- a/src/nexusinterface.cpp
+++ b/src/nexusinterface.cpp
@@ -91,6 +91,12 @@ void NexusBridge::requestToggleTracking(QString gameName, int modID, bool track,
userData, m_SubModule));
}
+void NexusBridge::requestGameInfo(QString gameName, QVariant userData)
+{
+ m_RequestIDs.insert(
+ m_Interface->requestGameInfo(gameName, this, userData, m_SubModule));
+}
+
void NexusBridge::nxmDescriptionAvailable(QString gameName, int modID,
QVariant userData, QVariant resultData,
int requestID)
@@ -194,6 +200,16 @@ void NexusBridge::nxmTrackingToggled(QString gameName, int modID, QVariant userD
}
}
+void NexusBridge::nxmGameInfoAvailable(QString gameName, QVariant userData,
+ QVariant resultData, int requestID)
+{
+ std::set<int>::iterator iter = m_RequestIDs.find(requestID);
+ if (iter != m_RequestIDs.end()) {
+ m_RequestIDs.erase(iter);
+ emit gameInfoAvailable(gameName, userData, resultData);
+ }
+}
+
void NexusBridge::nxmRequestFailed(QString gameName, int modID, int fileID,
QVariant userData, int requestID, int errorCode,
const QString& errorMessage)
@@ -735,6 +751,31 @@ int NexusInterface::requestToggleTracking(QString gameName, int modID, bool trac
return requestInfo.m_ID;
}
+int NexusInterface::requestGameInfo(QString gameName, QObject* receiver,
+ QVariant userData, const QString& subModule,
+ MOBase::IPluginGame const* game)
+{
+ if (m_User.shouldThrottle()) {
+ throttledWarning(m_User);
+ return -1;
+ }
+
+ NXMRequestInfo requestInfo(NXMRequestInfo::TYPE_GAMEINFO, userData, subModule, game);
+ m_RequestQueue.enqueue(requestInfo);
+
+ connect(this, SIGNAL(nxmGameInfoAvailable(QString, QVariant, QVariant, int)),
+ receiver, SLOT(nxmGameInfoAvailable(QString, QVariant, QVariant, int)),
+ Qt::UniqueConnection);
+
+ connect(
+ this, SIGNAL(nxmRequestFailed(QString, int, int, QVariant, int, int, QString)),
+ receiver, SLOT(nxmRequestFailed(QString, int, int, QVariant, int, int, QString)),
+ Qt::UniqueConnection);
+
+ nextRequest();
+ return requestInfo.m_ID;
+}
+
int NexusInterface::requestInfoFromMd5(QString gameName, QByteArray& hash,
QObject* receiver, QVariant userData,
const QString& subModule,
@@ -928,6 +969,9 @@ void NexusInterface::nextRequest()
.arg(info.m_URL)
.arg(info.m_GameName)
.arg(QString(info.m_Hash.toHex()));
+ } break;
+ case NXMRequestInfo::TYPE_GAMEINFO: {
+ url = QStringLiteral("%1/games/%2").arg(info.m_URL).arg(info.m_GameName);
}
}
} else {
@@ -1099,6 +1143,10 @@ void NexusInterface::requestFinished(std::list<NXMRequestInfo>::iterator iter)
emit nxmFileInfoFromMd5Available(iter->m_GameName, iter->m_UserData, result,
iter->m_ID);
} break;
+ case NXMRequestInfo::TYPE_GAMEINFO: {
+ emit nxmGameInfoAvailable(iter->m_GameName, iter->m_UserData, result,
+ iter->m_ID);
+ } break;
}
m_User.limits(parseLimits(reply));
@@ -1201,6 +1249,17 @@ NexusInterface::NXMRequestInfo::NXMRequestInfo(
m_Endorse(false), m_Track(false), m_Hash(QByteArray())
{}
+NexusInterface::NXMRequestInfo::NXMRequestInfo(Type type, QVariant userData,
+ const QString& subModule,
+ MOBase::IPluginGame const* game)
+ : m_ModID(0), m_ModVersion("0"), m_FileID(0), m_Reply(nullptr), m_Type(type),
+ m_UpdatePeriod(UpdatePeriod::NONE), m_UserData(userData), m_Timeout(nullptr),
+ m_Reroute(false), m_ID(s_NextID.fetchAndAddAcquire(1)),
+ m_URL(get_management_url()), m_SubModule(subModule),
+ m_NexusGameID(game->nexusGameID()), m_GameName(game->gameNexusName()),
+ m_Endorse(false), m_Track(false), m_Hash(QByteArray())
+{}
+
NexusInterface::NXMRequestInfo::NXMRequestInfo(
int modID, int fileID, NexusInterface::NXMRequestInfo::Type type, QVariant userData,
const QString& subModule, MOBase::IPluginGame const* game)