summaryrefslogtreecommitdiff
path: root/src/settingsdialog.cpp
diff options
context:
space:
mode:
authorSilarn <jrim@rimpo.org>2018-08-20 18:34:31 -0500
committerSilarn <jrim@rimpo.org>2019-02-18 21:26:44 -0600
commit9fe2f6126dc7b9396d188b57ccb097f0035f57b7 (patch)
treedfb6038767f55238506122682b644ac86415050b /src/settingsdialog.cpp
parentbd9cc6254c8ded2f726e2b001a4ecf61ac0e5a1d (diff)
Initial Nexus API changes:
- Switch to SSO with WebSocket - Update endpoints (all but version checking)
Diffstat (limited to 'src/settingsdialog.cpp')
-rw-r--r--src/settingsdialog.cpp42
1 files changed, 42 insertions, 0 deletions
diff --git a/src/settingsdialog.cpp b/src/settingsdialog.cpp
index 1bbc256f..4843dea5 100644
--- a/src/settingsdialog.cpp
+++ b/src/settingsdialog.cpp
@@ -29,12 +29,17 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include "nexusinterface.h"
#include "plugincontainer.h"
+#include <boost/uuid/uuid_generators.hpp>
+#include <boost/uuid/uuid_io.hpp>
+
#include <QDirIterator>
#include <QFileDialog>
#include <QMessageBox>
#include <QShortcut>
#include <QColorDialog>
#include <QInputDialog>
+#include <QJsonDocument>
+#include <QDesktopServices>
#define WIN32_LEAN_AND_MEAN
#include <Windows.h>
@@ -46,6 +51,7 @@ SettingsDialog::SettingsDialog(PluginContainer *pluginContainer, QWidget *parent
: TutorableDialog("SettingsDialog", parent)
, ui(new Ui::SettingsDialog)
, m_PluginContainer(pluginContainer)
+ , m_nexusLogin(new QWebSocket)
{
ui->setupUi(this);
ui->pluginSettingsList->setStyleSheet("QTreeWidget::item {padding-right: 10px;}");
@@ -53,6 +59,9 @@ SettingsDialog::SettingsDialog(PluginContainer *pluginContainer, QWidget *parent
QShortcut *delShortcut
= new QShortcut(QKeySequence(Qt::Key_Delete), ui->pluginBlacklist);
connect(delShortcut, SIGNAL(activated()), this, SLOT(deleteBlacklistItem()));
+ connect(m_nexusLogin, SIGNAL(connected()), this, SLOT(dispatchLogin()));
+ connect(m_nexusLogin, SIGNAL(textMessageReceived(const QString &)), this, SLOT(receiveApiKey(const QString &)));
+ connect(m_nexusLogin, SIGNAL(disconnected()), this, SLOT(completeApiConnection()));
}
SettingsDialog::~SettingsDialog()
@@ -326,6 +335,39 @@ void SettingsDialog::on_resetDialogsButton_clicked()
}
}
+void SettingsDialog::on_nexusConnect_clicked()
+{
+ ui->nexusConnect->setText("Connecting the API...");
+ ui->nexusConnect->setDisabled(true);
+ QUrl url = QUrl("wss://sso.nexusmods.com:8443");
+ m_nexusLogin->open(url);
+}
+
+void SettingsDialog::dispatchLogin()
+{
+ QJsonObject login;
+ boost::uuids::random_generator generator;
+ boost::uuids::uuid sessionId = generator();
+ login.insert(QString("id"), QJsonValue(QString(boost::uuids::to_string(sessionId).c_str())));
+ login.insert(QString("appid"), QJsonValue(QString("MO2")));
+ QJsonDocument loginDoc(login);
+ QString finalMessage(loginDoc.toJson());
+ m_nexusLogin->sendTextMessage(finalMessage);
+ QDesktopServices::openUrl(QUrl(QString("https://www.nexusmods.com/sso?id=") + QString(boost::uuids::to_string(sessionId).c_str())));
+}
+
+void SettingsDialog::receiveApiKey(const QString &apiKey)
+{
+ emit processApiKey(apiKey);
+ m_nexusLogin->close();
+ ui->nexusConnect->setText("Nexus API Key Stored");
+}
+
+void SettingsDialog::completeApiConnection()
+{
+ emit closeApiConnection(ui->nexusConnect);
+}
+
void SettingsDialog::storeSettings(QListWidgetItem *pluginItem)
{
if (pluginItem != nullptr) {