diff options
author | Kitsune Ral <KitsuneRal@users.noreply.github.com> | 2016-04-05 20:46:45 +0300 |
---|---|---|
committer | Kitsune Ral <KitsuneRal@users.noreply.github.com> | 2016-04-05 20:46:45 +0300 |
commit | 7abdc7ec386776602758d84edc6b583d6dad4ecd (patch) | |
tree | 247b6affaa7828e5122f1c338dd35a729cc4ee19 /jobs/initialsyncjob.cpp | |
download | libquotient-7abdc7ec386776602758d84edc6b583d6dad4ecd.tar.gz libquotient-7abdc7ec386776602758d84edc6b583d6dad4ecd.zip |
Imported the current source tree from Quaternion/lib.
Diffstat (limited to 'jobs/initialsyncjob.cpp')
-rw-r--r-- | jobs/initialsyncjob.cpp | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/jobs/initialsyncjob.cpp b/jobs/initialsyncjob.cpp new file mode 100644 index 00000000..9512e0ea --- /dev/null +++ b/jobs/initialsyncjob.cpp @@ -0,0 +1,117 @@ +/****************************************************************************** + * Copyright (C) 2015 Felix Rohrbach <kde@fxrh.de> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "initialsyncjob.h" + +#include <QtNetwork/QNetworkAccessManager> +#include <QtNetwork/QNetworkReply> +#include <QtCore/QUrlQuery> +#include <QtCore/QJsonDocument> +#include <QtCore/QJsonObject> +#include <QtCore/QJsonArray> +#include <QtCore/QJsonValue> + +#include "../connectiondata.h" +#include "../room.h" +#include "../state.h" +#include "../events/event.h" + +using namespace QMatrixClient; + +class InitialSyncJob::Private +{ + public: + Private() {} + + QList<Event*> events; + QList<State*> initialState; +}; + +InitialSyncJob::InitialSyncJob(ConnectionData* connection) + : BaseJob(connection, JobHttpType::GetJob) + , d(new Private) +{ +} + +InitialSyncJob::~InitialSyncJob() +{ + delete d; +} + +QList< Event* > InitialSyncJob::events() +{ + return d->events; +} + +QList< State* > InitialSyncJob::initialState() +{ + return d->initialState; +} + +QString InitialSyncJob::apiPath() +{ + return "_matrix/client/r0/initialSync"; +} + +QUrlQuery InitialSyncJob::query() +{ + QUrlQuery query; + query.addQueryItem("limit", "200"); + return query; +} + +void InitialSyncJob::parseJson(const QJsonDocument& data) +{ + QJsonObject json = data.object(); + if( !json.contains("rooms") || !json.value("rooms").isArray() ) + { + fail( KJob::UserDefinedError+2, "Didn't find rooms" ); + qDebug() << json; + return; + } + QJsonArray array = json.value("rooms").toArray(); + for( const QJsonValue& val : array ) + { + if( !val.isObject() ) + { + qWarning() << "Strange: " << val; + continue; + } + QJsonObject obj = val.toObject(); + QJsonObject messages = obj.value("messages").toObject(); + QJsonArray chunk = messages.value("chunk").toArray(); + for( const QJsonValue& val: chunk ) + { + Event* event = Event::fromJson(val.toObject()); + if( event ) + d->events.append( event ); + } + QJsonArray state = obj.value("state").toArray(); + for( const QJsonValue& val: state ) + { +// qDebug() << val.toObject(); + State* state = State::fromJson(val.toObject()); + if( state ) + d->initialState.append( state ); + } + } + connection()->setLastEvent( json.value("end").toString() ); + qDebug() << connection()->lastEvent(); + emitResult(); +} + |