Skip to content

Commit

Permalink
Switch JsonApiJob to Qt5's QJson owncloud#5710
Browse files Browse the repository at this point in the history
  • Loading branch information
ckamm committed Apr 26, 2017
1 parent 0ac154c commit 1121db9
Show file tree
Hide file tree
Showing 20 changed files with 90 additions and 80 deletions.
8 changes: 5 additions & 3 deletions src/cmd/cmd.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@
#include <QUrl>
#include <QFile>
#include <QFileInfo>
#include <QJsonDocument>
#include <QJsonObject>
#include <qdebug.h>

#include "account.h"
Expand Down Expand Up @@ -416,10 +418,10 @@ int main(int argc, char **argv) {

JsonApiJob *job = new JsonApiJob(account, QLatin1String("ocs/v1.php/cloud/capabilities"));
job->setTimeout(timeoutToUseMsec);
QObject::connect(job, &JsonApiJob::jsonReceived, [&](const QVariantMap &json) {
auto caps = json.value("ocs").toMap().value("data").toMap().value("capabilities");
QObject::connect(job, &JsonApiJob::jsonReceived, [&](const QJsonDocument &json) {
auto caps = json.object().value("ocs").toObject().value("data").toObject().value("capabilities").toObject();
qDebug() << "Server capabilities" << caps;
account->setCapabilities(caps.toMap());
account->setCapabilities(caps.toVariantMap());
loop.quit();
});
job->start();
Expand Down
20 changes: 12 additions & 8 deletions src/gui/activitylistmodel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@
#include <QAbstractListModel>
#include <QWidget>
#include <QIcon>
#include <QJsonObject>
#include <QJsonDocument>

#include "account.h"
#include "accountstate.h"
Expand Down Expand Up @@ -126,8 +128,8 @@ void ActivityListModel::startFetchJob(AccountState* s)
return;
}
JsonApiJob *job = new JsonApiJob(s->account(), QLatin1String("ocs/v1.php/cloud/activity"), this);
QObject::connect(job, SIGNAL(jsonReceived(QVariantMap, int)),
this, SLOT(slotActivitiesReceived(QVariantMap, int)));
QObject::connect(job, SIGNAL(jsonReceived(QJsonDocument, int)),
this, SLOT(slotActivitiesReceived(QJsonDocument, int)));
job->setProperty("AccountStatePtr", QVariant::fromValue<QPointer<AccountState>>(s));

QList< QPair<QString,QString> > params;
Expand All @@ -140,9 +142,9 @@ void ActivityListModel::startFetchJob(AccountState* s)
job->start();
}

void ActivityListModel::slotActivitiesReceived(const QVariantMap& json, int statusCode)
void ActivityListModel::slotActivitiesReceived(const QJsonDocument& json, int statusCode)
{
auto activities = json.value("ocs").toMap().value("data").toList();
auto activities = json.object().value("ocs").toObject().value("data").toArray();

ActivityList list;
auto ast = qvariant_cast<QPointer<AccountState>>(sender()->property("AccountStatePtr"));
Expand All @@ -152,17 +154,19 @@ void ActivityListModel::slotActivitiesReceived(const QVariantMap& json, int stat
_currentlyFetching.remove(ast);

foreach( auto activ, activities ) {
auto json = activ.toMap();
auto json = activ.toObject();

qDebug() << "ZZZ" << json;

Activity a;
a._type = Activity::ActivityType;
a._accName = ast->account()->displayName();
a._id = json.value("id").toLongLong();
a._id = json.value("id").toInt();
a._subject = json.value("subject").toString();
a._message = json.value("message").toString();
a._file = json.value("file").toString();
a._link = json.value("link").toUrl();
a._dateTime = json.value("date").toDateTime();
a._link = QUrl(json.value("link").toString());
a._dateTime = QDateTime::fromString(json.value("date").toString(), Qt::ISODate);
list.append(a);
}

Expand Down
4 changes: 3 additions & 1 deletion src/gui/activitylistmodel.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@

#include "activitydata.h"

class QJsonDocument;

namespace OCC {

class AccountState;
Expand Down Expand Up @@ -49,7 +51,7 @@ public slots:
void slotRemoveAccount( AccountState *ast );

private slots:
void slotActivitiesReceived(const QVariantMap& json, int statusCode);
void slotActivitiesReceived(const QJsonDocument& json, int statusCode);

signals:
void activityJobStatusCode(AccountState* ast, int statusCode);
Expand Down
10 changes: 6 additions & 4 deletions src/gui/creds/shibboleth/shibbolethuserjob.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,23 +14,25 @@

#include "shibbolethuserjob.h"
#include <account.h>
#include <json.h>

#include <QJsonDocument>
#include <QJsonObject>

namespace OCC {

ShibbolethUserJob::ShibbolethUserJob(AccountPtr account, QObject* parent)
: JsonApiJob(account, QLatin1String("ocs/v1.php/cloud/user"), parent)
{
setIgnoreCredentialFailure(true);
connect(this, SIGNAL(jsonReceived(QVariantMap, int)), this, SLOT(slotJsonReceived(QVariantMap, int)));
connect(this, SIGNAL(jsonReceived(QJsonDocument, int)), this, SLOT(slotJsonReceived(QJsonDocument, int)));
}

void ShibbolethUserJob::slotJsonReceived(const QVariantMap &json, int statusCode)
void ShibbolethUserJob::slotJsonReceived(const QJsonDocument &json, int statusCode)
{
if( statusCode != 100 ) {
qWarning() << "JSON Api call resulted in status code != 100";
}
QString user = json.value("ocs").toMap().value("data").toMap().value("id").toString();
QString user = json.object().value("ocs").toObject().value("data").toObject().value("id").toString();
//qDebug() << "cloud/user: " << json << "->" << user;
emit userFetched(user);
}
Expand Down
4 changes: 3 additions & 1 deletion src/gui/creds/shibboleth/shibbolethuserjob.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@

#include <networkjobs.h>

class QJsonDocument;

namespace OCC
{

Expand All @@ -33,7 +35,7 @@ class ShibbolethUserJob : public JsonApiJob {
void userFetched(const QString &user);

private slots:
void slotJsonReceived(const QVariantMap &, int statusCode);
void slotJsonReceived(const QJsonDocument &, int statusCode);
};


Expand Down
1 change: 0 additions & 1 deletion src/gui/notificationconfirmjob.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
#include "notificationconfirmjob.h"
#include "networkjobs.h"
#include "account.h"
#include "json.h"

#include <QBuffer>

Expand Down
4 changes: 2 additions & 2 deletions src/gui/ocsjob.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -100,10 +100,10 @@ void OcsJob::start()

bool OcsJob::finished()
{
const QString replyData = reply()->readAll();
const QByteArray replyData = reply()->readAll();

QJsonParseError error;
auto json = QJsonDocument::fromJson(replyData.toUtf8(), &error);
auto json = QJsonDocument::fromJson(replyData, &error);
if (error.error != QJsonParseError::NoError) {
qDebug() << "Could not parse reply to"
<< _verb
Expand Down
4 changes: 2 additions & 2 deletions src/gui/owncloudsetupwizard.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -176,14 +176,14 @@ void OwncloudSetupWizard::slotContinueDetermineAuth()
account->setCredentials(CredentialsFactory::create("dummy"));
CheckServerJob *job = new CheckServerJob(_ocWizard->account(), this);
job->setIgnoreCredentialFailure(true);
connect(job, SIGNAL(instanceFound(QUrl,QVariantMap)), SLOT(slotOwnCloudFoundAuth(QUrl,QVariantMap)));
connect(job, SIGNAL(instanceFound(QUrl,QJsonObject)), SLOT(slotOwnCloudFoundAuth(QUrl,QJsonObject)));
connect(job, SIGNAL(instanceNotFound(QNetworkReply*)), SLOT(slotNoOwnCloudFoundAuth(QNetworkReply*)));
connect(job, SIGNAL(timeout(const QUrl&)), SLOT(slotNoOwnCloudFoundAuthTimeout(const QUrl&)));
job->setTimeout((account->url().scheme() == "https") ? 30*1000 : 10*1000);
job->start();
}

void OwncloudSetupWizard::slotOwnCloudFoundAuth(const QUrl& url, const QVariantMap &info)
void OwncloudSetupWizard::slotOwnCloudFoundAuth(const QUrl& url, const QJsonObject &info)
{
auto serverVersion = CheckServerJob::version(info);

Expand Down
2 changes: 1 addition & 1 deletion src/gui/owncloudsetupwizard.h
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ private slots:
void slotDetermineAuthType(const QString&);
void slotSystemProxyLookupDone(const QNetworkProxy &proxy);
void slotContinueDetermineAuth();
void slotOwnCloudFoundAuth(const QUrl&, const QVariantMap&);
void slotOwnCloudFoundAuth(const QUrl&, const QJsonObject&);
void slotNoOwnCloudFoundAuth(QNetworkReply *reply);
void slotNoOwnCloudFoundAuthTimeout(const QUrl&url);

Expand Down
26 changes: 14 additions & 12 deletions src/gui/servernotificationhandler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,11 @@
#include "servernotificationhandler.h"
#include "accountstate.h"
#include "capabilities.h"
#include "json.h"
#include "networkjobs.h"

#include <QJsonDocument>
#include <QJsonObject>

namespace OCC
{

Expand Down Expand Up @@ -48,48 +50,48 @@ void ServerNotificationHandler::slotFetchNotifications(AccountState *ptr)

// if the previous notification job has finished, start next.
_notificationJob = new JsonApiJob( ptr->account(), QLatin1String("ocs/v2.php/apps/notifications/api/v1/notifications"), this );
QObject::connect(_notificationJob.data(), SIGNAL(jsonReceived(QVariantMap, int)),
this, SLOT(slotNotificationsReceived(QVariantMap, int)));
QObject::connect(_notificationJob.data(), SIGNAL(jsonReceived(QJsonDocument, int)),
this, SLOT(slotNotificationsReceived(QJsonDocument, int)));
_notificationJob->setProperty("AccountStatePtr", QVariant::fromValue<AccountState*>(ptr));

_notificationJob->start();
}

void ServerNotificationHandler::slotNotificationsReceived(const QVariantMap& json, int statusCode)
void ServerNotificationHandler::slotNotificationsReceived(const QJsonDocument& json, int statusCode)
{
if( statusCode != 200 ) {
qDebug() << Q_FUNC_INFO << "Notifications failed with status code " << statusCode;
deleteLater();
return;
}

auto notifies = json.value("ocs").toMap().value("data").toList();
auto notifies = json.object().value("ocs").toObject().value("data").toArray();

AccountState* ai = qvariant_cast<AccountState*>(sender()->property("AccountStatePtr"));

ActivityList list;

foreach( auto element, notifies ) {
Activity a;
auto json = element.toMap();
auto json = element.toObject();
a._type = Activity::NotificationType;
a._accName = ai->account()->displayName();
a._id = json.value("notification_id").toLongLong();
a._id = json.value("notification_id").toInt();
a._subject = json.value("subject").toString();
a._message = json.value("message").toString();
QString s = json.value("link").toString();
if( !s.isEmpty() ) {
a._link = QUrl(s);
}
a._dateTime = json.value("datetime").toDateTime();
a._dateTime = QDateTime::fromString(json.value("datetime").toString(), Qt::ISODate);

auto actions = json.value("actions").toList();
auto actions = json.value("actions").toArray();
foreach( auto action, actions) {
auto actionJson = action.toMap();
auto actionJson = action.toObject();
ActivityLink al;
al._label = QUrl::fromPercentEncoding(actionJson.value("label").toByteArray());
al._label = QUrl::fromPercentEncoding(actionJson.value("label").toString().toUtf8());
al._link = actionJson.value("link").toString();
al._verb = actionJson.value("type").toByteArray();
al._verb = actionJson.value("type").toString().toUtf8();
al._isPrimary = actionJson.value("primary").toBool();

a._links.append(al);
Expand Down
4 changes: 3 additions & 1 deletion src/gui/servernotificationhandler.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@

#include "activitywidget.h"

class QJsonDocument;

namespace OCC
{

Expand All @@ -35,7 +37,7 @@ public slots:
void slotFetchNotifications(AccountState *ptr);

private slots:
void slotNotificationsReceived(const QVariantMap& json, int statusCode);
void slotNotificationsReceived(const QJsonDocument& json, int statusCode);

private:
QPointer<JsonApiJob> _notificationJob;
Expand Down
1 change: 0 additions & 1 deletion src/gui/thumbnailjob.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
#include "thumbnailjob.h"
#include "networkjobs.h"
#include "account.h"
#include "json.h"

namespace OCC {

Expand Down
2 changes: 0 additions & 2 deletions src/libsync/abstractnetworkjob.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,6 @@
#include <QDebug>
#include <QCoreApplication>

#include "json.h"

#include "networkjobs.h"
#include "account.h"
#include "owncloudpropagator.h"
Expand Down
20 changes: 10 additions & 10 deletions src/libsync/connectionvalidator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -107,13 +107,13 @@ void ConnectionValidator::slotCheckServerAndAuth()
CheckServerJob *checkJob = new CheckServerJob(_account, this);
checkJob->setTimeout(timeoutToUseMsec);
checkJob->setIgnoreCredentialFailure(true);
connect(checkJob, SIGNAL(instanceFound(QUrl,QVariantMap)), SLOT(slotStatusFound(QUrl,QVariantMap)));
connect(checkJob, SIGNAL(instanceFound(QUrl,QJsonObject)), SLOT(slotStatusFound(QUrl,QJsonObject)));
connect(checkJob, SIGNAL(instanceNotFound(QNetworkReply*)), SLOT(slotNoStatusFound(QNetworkReply*)));
connect(checkJob, SIGNAL(timeout(QUrl)), SLOT(slotJobTimeout(QUrl)));
checkJob->start();
}

void ConnectionValidator::slotStatusFound(const QUrl&url, const QVariantMap &info)
void ConnectionValidator::slotStatusFound(const QUrl&url, const QJsonObject &info)
{
// Newer servers don't disclose any version in status.php anymore
// https://github.com/owncloud/core/pull/27473/files
Expand Down Expand Up @@ -223,18 +223,18 @@ void ConnectionValidator::checkServerCapabilities()
{
JsonApiJob *job = new JsonApiJob(_account, QLatin1String("ocs/v1.php/cloud/capabilities"), this);
job->setTimeout(timeoutToUseMsec);
QObject::connect(job, SIGNAL(jsonReceived(QVariantMap, int)), this, SLOT(slotCapabilitiesRecieved(QVariantMap)));
QObject::connect(job, SIGNAL(jsonReceived(QJsonDocument, int)), this, SLOT(slotCapabilitiesRecieved(QJsonDocument)));
job->start();
}

void ConnectionValidator::slotCapabilitiesRecieved(const QVariantMap &json)
void ConnectionValidator::slotCapabilitiesRecieved(const QJsonDocument &json)
{
auto caps = json.value("ocs").toMap().value("data").toMap().value("capabilities");
auto caps = json.object().value("ocs").toObject().value("data").toObject().value("capabilities").toObject();
qDebug() << "Server capabilities" << caps;
_account->setCapabilities(caps.toMap());
_account->setCapabilities(caps.toVariantMap());

// New servers also report the version in the capabilities
QString serverVersion = caps.toMap()["core"].toMap()["status"].toMap()["version"].toString();
QString serverVersion = caps["core"].toObject()["status"].toObject()["version"].toString();
if (!serverVersion.isEmpty() && !setAndCheckServerVersion(serverVersion)) {
return;
}
Expand All @@ -247,7 +247,7 @@ void ConnectionValidator::fetchUser()

JsonApiJob *job = new JsonApiJob(_account, QLatin1String("ocs/v1.php/cloud/user"), this);
job->setTimeout(timeoutToUseMsec);
QObject::connect(job, SIGNAL(jsonReceived(QVariantMap, int)), this, SLOT(slotUserFetched(QVariantMap)));
QObject::connect(job, SIGNAL(jsonReceived(QJsonDocument, int)), this, SLOT(slotUserFetched(QJsonDocument)));
job->start();
}

Expand All @@ -271,9 +271,9 @@ bool ConnectionValidator::setAndCheckServerVersion(const QString& version)
return true;
}

void ConnectionValidator::slotUserFetched(const QVariantMap &json)
void ConnectionValidator::slotUserFetched(const QJsonDocument &json)
{
QString user = json.value("ocs").toMap().value("data").toMap().value("id").toString();
QString user = json.object().value("ocs").toObject().value("data").toObject().value("id").toString();
if (!user.isEmpty()) {
_account->setDavUser(user);

Expand Down
6 changes: 3 additions & 3 deletions src/libsync/connectionvalidator.h
Original file line number Diff line number Diff line change
Expand Up @@ -113,15 +113,15 @@ public slots:
protected slots:
void slotCheckServerAndAuth();

void slotStatusFound(const QUrl&url, const QVariantMap &info);
void slotStatusFound(const QUrl&url, const QJsonObject &info);
void slotNoStatusFound(QNetworkReply *reply);
void slotJobTimeout(const QUrl& url);

void slotAuthFailed(QNetworkReply *reply);
void slotAuthSuccess();

void slotCapabilitiesRecieved(const QVariantMap&);
void slotUserFetched(const QVariantMap &);
void slotCapabilitiesRecieved(const QJsonDocument&);
void slotUserFetched(const QJsonDocument &);
void slotAvatarImage(const QImage &img);

private:
Expand Down

0 comments on commit 1121db9

Please sign in to comment.