#include <QUrl>
#include <QFile>
#include <QFileInfo>
+#include <QJsonDocument>
+#include <QJsonObject>
#include <qdebug.h>
#include "account.h"
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();
#include <QAbstractListModel>
#include <QWidget>
#include <QIcon>
+#include <QJsonObject>
+#include <QJsonDocument>
#include "account.h"
#include "accountstate.h"
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;
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"));
_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);
}
#include "activitydata.h"
+class QJsonDocument;
+
namespace OCC {
class AccountState;
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);
#include "shibbolethuserjob.h"
#include <account.h>
-#include <json.h>
+
+#include <QJsonDocument>
+#include <QJsonObject>
namespace OCC {
: 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);
}
#include <networkjobs.h>
+class QJsonDocument;
+
namespace OCC
{
void userFetched(const QString &user);
private slots:
- void slotJsonReceived(const QVariantMap &, int statusCode);
+ void slotJsonReceived(const QJsonDocument &, int statusCode);
};
#include "notificationconfirmjob.h"
#include "networkjobs.h"
#include "account.h"
-#include "json.h"
#include <QBuffer>
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
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);
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);
#include "servernotificationhandler.h"
#include "accountstate.h"
#include "capabilities.h"
-#include "json.h"
#include "networkjobs.h"
+#include <QJsonDocument>
+#include <QJsonObject>
+
namespace OCC
{
// 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;
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"));
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);
#include "activitywidget.h"
+class QJsonDocument;
+
namespace OCC
{
void slotFetchNotifications(AccountState *ptr);
private slots:
- void slotNotificationsReceived(const QVariantMap& json, int statusCode);
+ void slotNotificationsReceived(const QJsonDocument& json, int statusCode);
private:
QPointer<JsonApiJob> _notificationJob;
#include "thumbnailjob.h"
#include "networkjobs.h"
#include "account.h"
-#include "json.h"
namespace OCC {
#include <QDebug>
#include <QCoreApplication>
-#include "json.h"
-
#include "networkjobs.h"
#include "account.h"
#include "owncloudpropagator.h"
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
{
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;
}
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();
}
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);
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:
#include <QDebug>
#include <QCoreApplication>
#include <QPixmap>
-
-#include "json.h"
+#include <QJsonDocument>
+#include <QJsonObject>
#include "networkjobs.h"
#include "account.h"
deleteLater();
}
-QString CheckServerJob::version(const QVariantMap &info)
+QString CheckServerJob::version(const QJsonObject &info)
{
return info.value(QLatin1String("version")).toString();
}
-QString CheckServerJob::versionString(const QVariantMap &info)
+QString CheckServerJob::versionString(const QJsonObject &info)
{
return info.value(QLatin1String("versionstring")).toString();
}
-bool CheckServerJob::installed(const QVariantMap &info)
+bool CheckServerJob::installed(const QJsonObject &info)
{
return info.value(QLatin1String("installed")).toBool();
}
return false;
}
- bool success = false;
QByteArray body = reply()->peek(4*1024);
int httpStatus = reply()->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
if( body.isEmpty() || httpStatus != 200) {
qDebug() << "error: status.php replied " << httpStatus << body;
emit instanceNotFound(reply());
} else {
- QVariantMap status = QtJson::parse(QString::fromUtf8(body), success).toMap();
+ QJsonParseError error;
+ auto status = QJsonDocument::fromJson(body, &error);
// empty or invalid response
- if (!success || status.isEmpty()) {
- qDebug() << "status.php from server is not valid JSON!" << body << reply()->request().url();
+ if (error.error != QJsonParseError::NoError || status.isNull()) {
+ qDebug() << "status.php from server is not valid JSON!" << body << reply()->request().url() << error.errorString();
}
qDebug() << "status.php returns: " << status << " " << reply()->error() << " Reply: " << reply();
- if( status.contains("installed") ) {
- emit instanceFound(reply()->url(), status);
+ if( status.object().contains("installed") ) {
+ emit instanceFound(reply()->url(), status.object());
} else {
qDebug() << "No proper answer on " << reply()->url();
emit instanceNotFound(reply());
if (reply()->error() != QNetworkReply::NoError) {
qWarning() << "Network error: " << path() << errorString() << reply()->attribute(QNetworkRequest::HttpStatusCodeAttribute);
- emit jsonReceived(QVariantMap(), statusCode);
+ emit jsonReceived(QJsonDocument(), statusCode);
return true;
}
}
}
- bool success = false;
- QVariantMap json = QtJson::parse(jsonStr, success).toMap();
+ QJsonParseError error;
+ auto json = QJsonDocument::fromJson(jsonStr.toUtf8(), &error);
// empty or invalid response
- if (!success || json.isEmpty()) {
- qWarning() << "invalid JSON!" << jsonStr;
- emit jsonReceived(QVariantMap(), statusCode);
+ if (error.error != QJsonParseError::NoError || json.isNull()) {
+ qWarning() << "invalid JSON!" << jsonStr << error.errorString();
+ emit jsonReceived(json, statusCode);
return true;
}
#include "abstractnetworkjob.h"
class QUrl;
+class QJsonObject;
namespace OCC {
explicit CheckServerJob(AccountPtr account, QObject *parent = 0);
void start() Q_DECL_OVERRIDE;
- static QString version(const QVariantMap &info);
- static QString versionString(const QVariantMap &info);
- static bool installed(const QVariantMap &info);
+ static QString version(const QJsonObject &info);
+ static QString versionString(const QJsonObject &info);
+ static bool installed(const QJsonObject &info);
signals:
- void instanceFound(const QUrl&url, const QVariantMap &info);
+ void instanceFound(const QUrl&url, const QJsonObject &info);
/** Emitted on invalid status.php reply.
*
* To be used like this:
* \code
* _job = new JsonApiJob(account, QLatin1String("ocs/v1.php/foo/bar"), this);
- * connect(job, SIGNAL(jsonReceived(QVariantMap)), ...)
- * The received QVariantMap is empty in case of error or otherwise is a map as parsed by QtJson
+ * connect(job, SIGNAL(jsonReceived(QJsonDocument)), ...)
+ * The received QVariantMap is null in case of error
* \encode
*
* @ingroup libsync
/**
* @brief jsonReceived - signal to report the json answer from ocs
- * @param json - the raw json string
+ * @param json - the parsed json document
* @param statusCode - the OCS status code: 100 (!) for success
*/
- void jsonReceived(const QVariantMap &json, int statusCode);
+ void jsonReceived(const QJsonDocument &json, int statusCode);
private:
QList< QPair<QString,QString> > _additionalParams;
#include "utility.h"
#include "account.h"
#include "asserts.h"
-#include <json.h>
#ifdef Q_OS_WIN
#include <windef.h>
#include "checksums.h"
#include "asserts.h"
-#include <json.h>
#include <QNetworkAccessManager>
#include <QFileInfo>
#include <QDir>
#include "propagateremotedelete.h"
#include "asserts.h"
-#include <json.h>
#include <QNetworkAccessManager>
#include <QFileInfo>
#include <QDir>