Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/owncloud/client.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHannah von Reth <hannah.vonreth@owncloud.com>2022-01-27 13:54:13 +0300
committerHannah von Reth <vonreth@kde.org>2022-01-31 14:31:44 +0300
commit5922ca1c61d0285002ab8e1d1614142c49af7f37 (patch)
treed52e71916d83b29efb1bac087eb3df7dc72ebef6 /src/gui/connectionvalidator.cpp
parent4a3fa1f09531213ba72e3ff087972e96c1dc5300 (diff)
Refactor JsonApiJob and allow non ownCloud json jobs
Diffstat (limited to 'src/gui/connectionvalidator.cpp')
-rw-r--r--src/gui/connectionvalidator.cpp94
1 files changed, 45 insertions, 49 deletions
diff --git a/src/gui/connectionvalidator.cpp b/src/gui/connectionvalidator.cpp
index 3e492a1b6..b99bbe579 100644
--- a/src/gui/connectionvalidator.cpp
+++ b/src/gui/connectionvalidator.cpp
@@ -19,10 +19,11 @@
#include <QNetworkProxyFactory>
#include <QXmlStreamReader>
-#include "connectionvalidator.h"
#include "account.h"
-#include "networkjobs.h"
#include "clientproxy.h"
+#include "connectionvalidator.h"
+#include "networkjobs.h"
+#include "networkjobs/jsonjob.h"
#include <creds/abstractcredentials.h>
using namespace std::chrono_literals;
@@ -225,32 +226,57 @@ void ConnectionValidator::slotAuthSuccess()
void ConnectionValidator::checkServerCapabilities()
{
// The main flow now needs the capabilities
- JsonApiJob *job = new JsonApiJob(_account, QLatin1String("ocs/v1.php/cloud/capabilities"), this);
+ auto *job = new JsonApiJob(_account, QStringLiteral("ocs/v2.php/cloud/capabilities"), {}, {}, this);
job->setTimeout(timeoutToUse);
- QObject::connect(job, &JsonApiJob::jsonReceived, this, &ConnectionValidator::slotCapabilitiesRecieved);
- job->start();
-}
-void ConnectionValidator::slotCapabilitiesRecieved(const QJsonDocument &json)
-{
- auto caps = json.object().value("ocs").toObject().value("data").toObject().value("capabilities").toObject();
- qCInfo(lcConnectionValidator) << "Server capabilities" << caps;
- _account->setCapabilities(caps.toVariantMap());
+ QObject::connect(job, &JsonApiJob::finishedSignal, this, [job, this] {
+ auto caps = job->data().value("ocs").toObject().value("data").toObject().value("capabilities").toObject();
+ qCInfo(lcConnectionValidator) << "Server capabilities" << caps;
+ _account->setCapabilities(caps.toVariantMap());
- // New servers also report the version in the capabilities
- QString serverVersion = caps["core"].toObject()["status"].toObject()["version"].toString();
- if (!serverVersion.isEmpty() && !setAndCheckServerVersion(serverVersion)) {
- return;
- }
+ // New servers also report the version in the capabilities
+ QString serverVersion = caps["core"].toObject()["status"].toObject()["version"].toString();
+ if (!serverVersion.isEmpty() && !setAndCheckServerVersion(serverVersion)) {
+ return;
+ }
- fetchUser();
+ fetchUser();
+ });
+ job->start();
}
void ConnectionValidator::fetchUser()
{
- JsonApiJob *job = new JsonApiJob(_account, QLatin1String("ocs/v1.php/cloud/user"), this);
+ auto *job = new JsonApiJob(_account, QLatin1String("ocs/v2.php/cloud/user"), {}, {}, this);
job->setTimeout(timeoutToUse);
- QObject::connect(job, &JsonApiJob::jsonReceived, this, &ConnectionValidator::slotUserFetched);
+ QObject::connect(job, &JsonApiJob::finishedSignal, this, [job, this] {
+ const QString user = job->data().value("ocs").toObject().value("data").toObject().value("id").toString();
+ if (!user.isEmpty()) {
+ _account->setDavUser(user);
+ }
+ const QString displayName = job->data().value("ocs").toObject().value("data").toObject().value("display-name").toString();
+ if (!displayName.isEmpty()) {
+ _account->setDavDisplayName(displayName);
+ }
+
+ auto capabilities = _account->capabilities();
+ // We should have received the capabilities by now. Check that assumption in a debug build. If
+ // it's not the case, the code below will assume that they are not available.
+ Q_ASSERT(capabilities.isValid());
+
+#ifndef TOKEN_AUTH_ONLY
+ if (capabilities.isValid() && capabilities.avatarsAvailable()) {
+ auto *job = new AvatarJob(_account, _account->davUser(), 128, this);
+ job->setTimeout(20s);
+ QObject::connect(job, &AvatarJob::avatarPixmap, this, &ConnectionValidator::slotAvatarImage);
+ job->start();
+ // reportResult will be called when the avatar has been received by `slotAvatarImage`
+ } else
+#endif
+ {
+ reportResult(Connected);
+ }
+ });
job->start();
}
@@ -280,36 +306,6 @@ bool ConnectionValidator::setAndCheckServerVersion(const QString &version)
return true;
}
-void ConnectionValidator::slotUserFetched(const QJsonDocument &json)
-{
- QString user = json.object().value("ocs").toObject().value("data").toObject().value("id").toString();
- if (!user.isEmpty()) {
- _account->setDavUser(user);
- }
- QString displayName = json.object().value("ocs").toObject().value("data").toObject().value("display-name").toString();
- if (!displayName.isEmpty()) {
- _account->setDavDisplayName(displayName);
- }
-
- auto capabilities = _account->capabilities();
- // We should have received the capabilities by now. Check that assumption in a debug build. If
- // it's not the case, the code below will assume that they are not available.
- Q_ASSERT(capabilities.isValid());
-
-#ifndef TOKEN_AUTH_ONLY
- if (capabilities.isValid() && capabilities.avatarsAvailable()) {
- AvatarJob *job = new AvatarJob(_account, _account->davUser(), 128, this);
- job->setTimeout(20s);
- QObject::connect(job, &AvatarJob::avatarPixmap, this, &ConnectionValidator::slotAvatarImage);
- job->start();
- // reportResult will be called when the avatar has been received by `slotAvatarImage`
- } else
-#endif
- {
- reportResult(Connected);
- }
-}
-
#ifndef TOKEN_AUTH_ONLY
void ConnectionValidator::slotAvatarImage(const QPixmap &img)
{