summaryrefslogtreecommitdiff
path: root/src/settingsdialognexus.cpp
diff options
context:
space:
mode:
authorisanae <14251494+isanae@users.noreply.github.com>2019-10-05 13:36:27 -0400
committerisanae <14251494+isanae@users.noreply.github.com>2019-10-05 13:36:27 -0400
commit8269ac1b489d30ca6065ec2b97542ddbb22298b3 (patch)
tree1776cecc1e7b098140d3c9c445401ef6fd2fe286 /src/settingsdialognexus.cpp
parentfc909d4b2eaff02cb8b7f38ca5079dc9b12cef68 (diff)
rework of the nexus key validator to allow multiple attempts before failing
Diffstat (limited to 'src/settingsdialognexus.cpp')
-rw-r--r--src/settingsdialognexus.cpp45
1 files changed, 20 insertions, 25 deletions
diff --git a/src/settingsdialognexus.cpp b/src/settingsdialognexus.cpp
index 2021bdc1..209ed661 100644
--- a/src/settingsdialognexus.cpp
+++ b/src/settingsdialognexus.cpp
@@ -240,17 +240,13 @@ void NexusSettingsTab::validateKey(const QString& key)
m_nexusValidator.reset(new NexusKeyValidator(
*NexusInterface::instance(dialog().pluginContainer())->getAccessManager()));
- m_nexusValidator->stateChanged = [&](auto&& s, auto&& e){
- onValidatorStateChanged(s, e);
- };
-
- m_nexusValidator->finished = [&](auto&& user) {
- onValidatorFinished(user);
+ m_nexusValidator->finished = [&](auto&& r, auto&& m, auto&& u) {
+ onValidatorFinished(r, m, u);
};
}
addNexusLog(QObject::tr("Checking API key..."));
- m_nexusValidator->start(key);
+ m_nexusValidator->start(key, NexusKeyValidator::OneShot);
}
void NexusSettingsTab::onSSOKeyChanged(const QString& key)
@@ -277,32 +273,31 @@ void NexusSettingsTab::onSSOStateChanged(NexusSSOLogin::States s, const QString&
updateNexusState();
}
-void NexusSettingsTab::onValidatorStateChanged(
- NexusKeyValidator::States s, const QString& e)
+void NexusSettingsTab::onValidatorFinished(
+ ValidationAttempt::Result r, const QString& message,
+ std::optional<APIUserAccount> user)
{
- if (s != NexusKeyValidator::Finished) {
- // finished state is handled in onValidatorFinished()
- const auto log = NexusKeyValidator::stateToString(s, e);
+ if (user) {
+ NexusInterface::instance(dialog().pluginContainer())->setUserAccount(*user);
+ addNexusLog(QObject::tr("Received user acount information"));
- for (auto&& line : log.split("\n")) {
- addNexusLog(line);
+ if (setKey(user->apiKey())) {
+ addNexusLog(QObject::tr("Linked with Nexus successfully."));
+ } else {
+ addNexusLog(QObject::tr("Failed to set API key"));
+ }
+ } else {
+ if (message.isEmpty()) {
+ // shouldn't happen
+ addNexusLog("Unknown error");
+ } else {
+ addNexusLog(message);
}
}
updateNexusState();
}
-void NexusSettingsTab::onValidatorFinished(const APIUserAccount& user)
-{
- NexusInterface::instance(dialog().pluginContainer())->setUserAccount(user);
-
- if (!user.apiKey().isEmpty()) {
- if (setKey(user.apiKey())) {
- addNexusLog(QObject::tr("Linked with Nexus successfully."));
- }
- }
-}
-
void NexusSettingsTab::addNexusLog(const QString& s)
{
ui->nexusLog->addItem(s);