summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/apiuseraccount.cpp22
-rw-r--r--src/apiuseraccount.h8
-rw-r--r--src/main.cpp8
-rw-r--r--src/nxmaccessmanager.cpp2
-rw-r--r--src/organizercore.cpp2
-rw-r--r--src/selfupdater.cpp2
-rw-r--r--src/settingsdialog.cpp98
-rw-r--r--src/settingsdialog.h6
-rw-r--r--src/settingsdialog.ui218
9 files changed, 226 insertions, 140 deletions
diff --git a/src/apiuseraccount.cpp b/src/apiuseraccount.cpp
index 596f8aa7..35a868d5 100644
--- a/src/apiuseraccount.cpp
+++ b/src/apiuseraccount.cpp
@@ -1,10 +1,32 @@
#include "apiuseraccount.h"
+QString localizedUserAccountType(APIUserAccountTypes t)
+{
+ switch (t)
+ {
+ case APIUserAccountTypes::Regular:
+ return QObject::tr("Regular");
+
+ case APIUserAccountTypes::Premium:
+ return QObject::tr("Premium");
+
+ case APIUserAccountTypes::None: // fall-through
+ default:
+ return QObject::tr("None");
+ }
+}
+
+
APIUserAccount::APIUserAccount()
: m_type(APIUserAccountTypes::None)
{
}
+bool APIUserAccount::isValid() const
+{
+ return !m_key.isEmpty();
+}
+
const QString& APIUserAccount::apiKey() const
{
return m_key;
diff --git a/src/apiuseraccount.h b/src/apiuseraccount.h
index 7dd16128..ea4e8685 100644
--- a/src/apiuseraccount.h
+++ b/src/apiuseraccount.h
@@ -18,6 +18,8 @@ enum class APIUserAccountTypes
Premium
};
+QString localizedUserAccountType(APIUserAccountTypes t);
+
/**
* current limits imposed on the user account
@@ -62,6 +64,11 @@ public:
/**
+ * whether the user is logged in
+ */
+ bool isValid() const;
+
+ /**
* api key
*/
const QString& apiKey() const;
@@ -134,7 +141,6 @@ private:
QString m_key, m_id, m_name;
APIUserAccountTypes m_type;
APILimits m_limits;
- APIStats m_stats;
};
#endif // APIUSERACCOUNT_H
diff --git a/src/main.cpp b/src/main.cpp
index 0b078f03..4359c645 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -713,7 +713,13 @@ int runApplication(MOApplication &application, SingleInstance &instance,
mainWindow.activateWindow();
splash.finish(&mainWindow);
- return application.exec();
+
+ const auto ret = application.exec();
+
+ NexusInterface::instance(&pluginContainer)
+ ->getAccessManager()->setTopLevelWidget(nullptr);
+
+ return ret;
}
} catch (const std::exception &e) {
reportError(e.what());
diff --git a/src/nxmaccessmanager.cpp b/src/nxmaccessmanager.cpp
index a331b2e8..196368fd 100644
--- a/src/nxmaccessmanager.cpp
+++ b/src/nxmaccessmanager.cpp
@@ -167,7 +167,7 @@ QString NexusSSOLogin::stateToString(States s, const QString& e)
return QObject::tr("Opened browser, waiting for user...");
case Finished:
- return QObject::tr("Connected.");
+ return QObject::tr("Finished.");
case Timeout:
return QObject::tr(
diff --git a/src/organizercore.cpp b/src/organizercore.cpp
index 87668f4b..eeb69e61 100644
--- a/src/organizercore.cpp
+++ b/src/organizercore.cpp
@@ -2484,7 +2484,7 @@ void OrganizerCore::loginSuccessfulUpdate(bool necessary)
void OrganizerCore::loginFailed(const QString &message)
{
- qDebug().nospace().noquote()
+ qCritical().nospace().noquote()
<< "Nexus API validation failed: " << message;
if (QMessageBox::question(qApp->activeWindow(), tr("Login failed"),
diff --git a/src/selfupdater.cpp b/src/selfupdater.cpp
index 271c621b..e967b27c 100644
--- a/src/selfupdater.cpp
+++ b/src/selfupdater.cpp
@@ -130,7 +130,7 @@ void SelfUpdater::testForUpdate()
m_GitHub.releases(GitHub::Repository("Modorganizer2", "modorganizer"),
[this](const QJsonArray &releases) {
if (releases.isEmpty()) {
- qDebug("Unable to connect to github.com to check version");
+ // error message already logged
return;
}
diff --git a/src/settingsdialog.cpp b/src/settingsdialog.cpp
index df957f87..0dae31ac 100644
--- a/src/settingsdialog.cpp
+++ b/src/settingsdialog.cpp
@@ -55,6 +55,7 @@ public:
: QDialog(parent), ui(new Ui::NexusManualKeyDialog)
{
ui->setupUi(this);
+ ui->key->setFont(QFontDatabase::systemFont(QFontDatabase::FixedFont));
connect(ui->openBrowser, &QPushButton::clicked, [&]{ openBrowser(); });
connect(ui->paste, &QPushButton::clicked, [&]{ paste(); });
@@ -111,7 +112,7 @@ SettingsDialog::SettingsDialog(PluginContainer *pluginContainer, Settings* setti
QKeySequence(Qt::Key_Delete), ui->pluginBlacklist);
connect(delShortcut, SIGNAL(activated()), this, SLOT(deleteBlacklistItem()));
- updateNexusButtons();
+ updateNexusState();
}
SettingsDialog::~SettingsDialog()
@@ -399,7 +400,7 @@ void SettingsDialog::on_nexusConnect_clicked()
ui->nexusLog->clear();
m_nexusLogin->start();
- updateNexusButtons();
+ updateNexusState();
}
void SettingsDialog::on_nexusManualKey_clicked()
@@ -421,8 +422,18 @@ void SettingsDialog::on_nexusManualKey_clicked()
}
ui->nexusLog->clear();
- ui->nexusLog->addItem(tr("Checking API key..."));
+ validateKey(key);
+}
+
+void SettingsDialog::on_nexusDisconnect_clicked()
+{
+ clearKey();
+ ui->nexusLog->clear();
+ addNexusLog(tr("Disconnected."));
+}
+void SettingsDialog::validateKey(const QString& key)
+{
if (!m_nexusValidator) {
m_nexusValidator.reset(new NexusKeyValidator(
*NexusInterface::instance(m_PluginContainer)->getAccessManager()));
@@ -436,6 +447,7 @@ void SettingsDialog::on_nexusManualKey_clicked()
};
}
+ addNexusLog(tr("Checking API key..."));
m_nexusValidator->start(key);
}
@@ -444,45 +456,62 @@ void SettingsDialog::onSSOKeyChanged(const QString& key)
if (key.isEmpty()) {
clearKey();
} else {
- setKey(key);
+ addNexusLog(tr("Received API key."));
+ validateKey(key);
}
}
void SettingsDialog::onSSOStateChanged(NexusSSOLogin::States s, const QString& e)
{
- const auto log = NexusSSOLogin::stateToString(s, e);
+ if (s != NexusSSOLogin::Finished) {
+ // finished state is handled in onSSOKeyChanged()
+ const auto log = NexusSSOLogin::stateToString(s, e);
- for (auto&& line : log.split("\n")) {
- ui->nexusLog->addItem(line);
+ for (auto&& line : log.split("\n")) {
+ addNexusLog(line);
+ }
}
- updateNexusButtons();
+ updateNexusState();
}
void SettingsDialog::onValidatorStateChanged(
NexusKeyValidator::States s, const QString& e)
{
- const auto log = NexusKeyValidator::stateToString(s, e);
+ if (s != NexusKeyValidator::Finished) {
+ // finished state is handled in onValidatorFinished()
+ const auto log = NexusKeyValidator::stateToString(s, e);
- for (auto&& line : log.split("\n")) {
- ui->nexusLog->addItem(line);
+ for (auto&& line : log.split("\n")) {
+ addNexusLog(line);
+ }
}
- updateNexusButtons();
+ updateNexusState();
}
void SettingsDialog::onValidatorFinished(const APIUserAccount& user)
{
+ NexusInterface::instance(m_PluginContainer)->setUserAccount(user);
+
if (!user.apiKey().isEmpty()) {
- setKey(user.apiKey());
+ if (setKey(user.apiKey())) {
+ addNexusLog(tr("Linked with Nexus successfully."));
+ }
}
}
+void SettingsDialog::addNexusLog(const QString& s)
+{
+ ui->nexusLog->addItem(s);
+ ui->nexusLog->scrollToBottom();
+}
+
bool SettingsDialog::setKey(const QString& key)
{
m_keyChanged = true;
const bool ret = m_settings->setNexusApiKey(key);
- updateNexusButtons();
+ updateNexusState();
return ret;
}
@@ -490,13 +519,19 @@ bool SettingsDialog::clearKey()
{
m_keyChanged = true;
const auto ret = m_settings->clearNexusApiKey();
- updateNexusButtons();
NexusInterface::instance(m_PluginContainer)->getAccessManager()->clearApiKey();
+ updateNexusState();
return ret;
}
+void SettingsDialog::updateNexusState()
+{
+ updateNexusButtons();
+ updateNexusData();
+}
+
void SettingsDialog::updateNexusButtons()
{
if (m_nexusLogin && m_nexusLogin->isActive()) {
@@ -532,6 +567,32 @@ void SettingsDialog::updateNexusButtons()
}
}
+void SettingsDialog::updateNexusData()
+{
+ const auto user = NexusInterface::instance(m_PluginContainer)
+ ->getAPIUserAccount();
+
+ if (user.isValid()) {
+ ui->nexusUserID->setText(user.id());
+ ui->nexusName->setText(user.name());
+ ui->nexusAccount->setText(localizedUserAccountType(user.type()));
+
+ ui->nexusDailyRequests->setText(QString("%1/%2")
+ .arg(user.limits().remainingDailyRequests)
+ .arg(user.limits().maxDailyRequests));
+
+ ui->nexusHourlyRequests->setText(QString("%1/%2")
+ .arg(user.limits().remainingHourlyRequests)
+ .arg(user.limits().maxHourlyRequests));
+ } else {
+ ui->nexusUserID->setText(tr("N/A"));
+ ui->nexusName->setText(tr("N/A"));
+ ui->nexusAccount->setText(tr("N/A"));
+ ui->nexusDailyRequests->setText(tr("N/A"));
+ ui->nexusHourlyRequests->setText(tr("N/A"));
+ }
+}
+
void SettingsDialog::storeSettings(QListWidgetItem *pluginItem)
{
if (pluginItem != nullptr) {
@@ -599,13 +660,6 @@ void SettingsDialog::on_clearCacheButton_clicked()
NexusInterface::instance(m_PluginContainer)->clearCache();
}
-void SettingsDialog::on_nexusDisconnect_clicked()
-{
- clearKey();
- ui->nexusLog->clear();
- ui->nexusLog->addItem(tr("Disconnected."));
-}
-
void SettingsDialog::normalizePath(QLineEdit *lineEdit)
{
QString text = lineEdit->text();
diff --git a/src/settingsdialog.h b/src/settingsdialog.h
index 1741fc13..c5f487fd 100644
--- a/src/settingsdialog.h
+++ b/src/settingsdialog.h
@@ -145,15 +145,21 @@ private:
std::unique_ptr<NexusSSOLogin> m_nexusLogin;
std::unique_ptr<NexusKeyValidator> m_nexusValidator;
+ void validateKey(const QString& key);
bool setKey(const QString& key);
bool clearKey();
+
+ void updateNexusState();
void updateNexusButtons();
+ void updateNexusData();
void onSSOKeyChanged(const QString& key);
void onSSOStateChanged(NexusSSOLogin::States s, const QString& e);
void onValidatorStateChanged(NexusKeyValidator::States s, const QString& e);
void onValidatorFinished(const APIUserAccount& user);
+
+ void addNexusLog(const QString& s);
};
#endif // SETTINGSDIALOG_H
diff --git a/src/settingsdialog.ui b/src/settingsdialog.ui
index dfbde943..fccc8be0 100644
--- a/src/settingsdialog.ui
+++ b/src/settingsdialog.ui
@@ -451,103 +451,7 @@ If you use pre-releases, never contact me directly by e-mail or via private mess
<attribute name="title">
<string>Nexus</string>
</attribute>
- <layout class="QVBoxLayout" name="verticalLayout_4" stretch="1,0,0,0,0,1">
- <item>
- <widget class="QGroupBox" name="groupBox_4">
- <property name="title">
- <string>Nexus Connection</string>
- </property>
- <layout class="QHBoxLayout" name="horizontalLayout_14">
- <item>
- <widget class="QWidget" name="widget_2" native="true">
- <layout class="QVBoxLayout" name="verticalLayout_11">
- <property name="leftMargin">
- <number>0</number>
- </property>
- <property name="topMargin">
- <number>0</number>
- </property>
- <property name="rightMargin">
- <number>0</number>
- </property>
- <property name="bottomMargin">
- <number>0</number>
- </property>
- <item>
- <widget class="QPushButton" name="nexusConnect">
- <property name="text">
- <string>Connect to Nexus</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="nexusManualKey">
- <property name="toolTip">
- <string>Manually enter the API key and try to login</string>
- </property>
- <property name="text">
- <string>Enter API Key Manually</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="nexusDisconnect">
- <property name="toolTip">
- <string>Clear the stored Nexus API key and force reauthorization.</string>
- </property>
- <property name="text">
- <string>Disconnect from Nexus</string>
- </property>
- <property name="icon">
- <iconset resource="resources.qrc">
- <normaloff>:/MO/gui/edit_clear</normaloff>:/MO/gui/edit_clear</iconset>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="verticalSpacer_3">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>0</width>
- <height>0</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </widget>
- </item>
- <item>
- <widget class="QWidget" name="widget_3" native="true">
- <layout class="QVBoxLayout" name="verticalLayout_12">
- <property name="leftMargin">
- <number>0</number>
- </property>
- <property name="topMargin">
- <number>0</number>
- </property>
- <property name="rightMargin">
- <number>0</number>
- </property>
- <property name="bottomMargin">
- <number>0</number>
- </property>
- <item>
- <widget class="QListWidget" name="nexusLog">
- <property name="sizeAdjustPolicy">
- <enum>QAbstractScrollArea::AdjustToContents</enum>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
+ <layout class="QVBoxLayout" name="verticalLayout_4" stretch="0,1,0,0,0,1">
<item>
<widget class="QWidget" name="widget" native="true">
<layout class="QHBoxLayout" name="horizontalLayout_5">
@@ -569,10 +473,13 @@ If you use pre-releases, never contact me directly by e-mail or via private mess
<string>Nexus Account</string>
</property>
<layout class="QFormLayout" name="formLayout">
+ <property name="horizontalSpacing">
+ <number>10</number>
+ </property>
<item row="0" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
- <string>User ID</string>
+ <string>User ID:</string>
</property>
<property name="textInteractionFlags">
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
@@ -589,21 +496,21 @@ If you use pre-releases, never contact me directly by e-mail or via private mess
<item row="1" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
- <string>Username</string>
+ <string>Name:</string>
</property>
</widget>
</item>
<item row="1" column="1">
- <widget class="QLabel" name="nexusUsername">
+ <widget class="QLabel" name="nexusName">
<property name="text">
- <string>username</string>
+ <string>name</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_11">
<property name="text">
- <string>Account</string>
+ <string>Account:</string>
</property>
</widget>
</item>
@@ -623,17 +530,27 @@ If you use pre-releases, never contact me directly by e-mail or via private mess
<string>Statistics</string>
</property>
<layout class="QFormLayout" name="formLayout_3">
+ <property name="horizontalSpacing">
+ <number>10</number>
+ </property>
<item row="0" column="0">
<widget class="QLabel" name="label_30">
<property name="text">
- <string>Daily requests</string>
+ <string>Daily requests:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QLabel" name="nexusDailyRequests">
+ <property name="text">
+ <string>daily requests</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_31">
<property name="text">
- <string>Hourly requests</string>
+ <string>Hourly requests:</string>
</property>
</widget>
</item>
@@ -644,24 +561,99 @@ If you use pre-releases, never contact me directly by e-mail or via private mess
</property>
</widget>
</item>
- <item row="2" column="0">
- <widget class="QLabel" name="label_32">
+ </layout>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="groupBox_4">
+ <property name="title">
+ <string>Nexus Connection</string>
+ </property>
+ <layout class="QHBoxLayout" name="horizontalLayout_14">
+ <item>
+ <widget class="QWidget" name="widget_2" native="true">
+ <layout class="QVBoxLayout" name="verticalLayout_11">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="QPushButton" name="nexusConnect">
<property name="text">
- <string>Requests queued</string>
+ <string>Connect to Nexus</string>
</property>
</widget>
</item>
- <item row="2" column="1">
- <widget class="QLabel" name="nexusRequestsQueued">
+ <item>
+ <widget class="QPushButton" name="nexusManualKey">
+ <property name="toolTip">
+ <string>Manually enter the API key and try to login</string>
+ </property>
<property name="text">
- <string>queued</string>
+ <string>Enter API Key Manually</string>
</property>
</widget>
</item>
- <item row="0" column="1">
- <widget class="QLabel" name="nexusDailyRequests">
+ <item>
+ <widget class="QPushButton" name="nexusDisconnect">
+ <property name="toolTip">
+ <string>Clear the stored Nexus API key and force reauthorization.</string>
+ </property>
<property name="text">
- <string>daily requests</string>
+ <string>Disconnect from Nexus</string>
+ </property>
+ <property name="icon">
+ <iconset resource="resources.qrc">
+ <normaloff>:/MO/gui/edit_clear</normaloff>:/MO/gui/edit_clear</iconset>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="verticalSpacer_3">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>0</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QWidget" name="widget_3" native="true">
+ <layout class="QVBoxLayout" name="verticalLayout_12">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="QListWidget" name="nexusLog">
+ <property name="sizeAdjustPolicy">
+ <enum>QAbstractScrollArea::AdjustToContents</enum>
</property>
</widget>
</item>