summaryrefslogtreecommitdiff
path: root/src/nexusinterface.cpp
diff options
context:
space:
mode:
authorSilarn <jrim@rimpo.org>2019-12-23 13:53:56 -0600
committerJeremy Rimpo <jeremy.rimpo@servermonkey.com>2023-09-21 16:46:52 -0500
commit0b6afd6a9a39c60b5420e40189bc0ac60a4766ba (patch)
tree90c750e49a477d13ec6bab6ea74ccddff13156ff /src/nexusinterface.cpp
parent83f9af3d3e0022b5b1efcc44d0f044c3b24fa034 (diff)
Add new API connection to retrieve game info
Diffstat (limited to 'src/nexusinterface.cpp')
-rw-r--r--src/nexusinterface.cpp58
1 files changed, 58 insertions, 0 deletions
diff --git a/src/nexusinterface.cpp b/src/nexusinterface.cpp
index 2c536b14..00ecdae3 100644
--- a/src/nexusinterface.cpp
+++ b/src/nexusinterface.cpp
@@ -91,6 +91,11 @@ 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 +199,15 @@ 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 +749,26 @@ 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, QNetworkReply::NetworkError, QString)),
+ receiver, SLOT(nxmRequestFailed(QString, int, int, QVariant, int, QNetworkReply::NetworkError, QString)), Qt::UniqueConnection);
+
+ nextRequest();
+ return requestInfo.m_ID;
+}
+
int NexusInterface::requestInfoFromMd5(QString gameName, QByteArray& hash,
QObject* receiver, QVariant userData,
const QString& subModule,
@@ -1201,6 +1235,30 @@ 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)