aboutsummaryrefslogtreecommitdiff
path: root/jobs
diff options
context:
space:
mode:
Diffstat (limited to 'jobs')
-rw-r--r--jobs/syncjob.cpp32
-rw-r--r--jobs/syncjob.h19
2 files changed, 28 insertions, 23 deletions
diff --git a/jobs/syncjob.cpp b/jobs/syncjob.cpp
index 29ddc2e6..3adf6b0c 100644
--- a/jobs/syncjob.cpp
+++ b/jobs/syncjob.cpp
@@ -22,20 +22,13 @@
using namespace QMatrixClient;
-class SyncJob::Private
-{
- public:
- QString nextBatch;
- SyncData roomData;
-};
-
static size_t jobId = 0;
SyncJob::SyncJob(const ConnectionData* connection, const QString& since,
const QString& filter, int timeout, const QString& presence)
: BaseJob(connection, HttpVerb::Get, QString("SyncJob-%1").arg(++jobId),
"_matrix/client/r0/sync")
- , d(new Private)
+ , d(new SyncData)
{
setLoggingCategory(SYNCJOB);
QUrlQuery query;
@@ -57,21 +50,26 @@ SyncJob::~SyncJob()
delete d;
}
-QString SyncJob::nextBatch() const
+QString SyncData::nextBatch() const
{
- return d->nextBatch;
+ return nextBatch_;
}
-SyncData&& SyncJob::takeRoomData()
+SyncDataList&& SyncData::takeRoomData()
{
- return std::move(d->roomData);
+ return std::move(roomData);
}
BaseJob::Status SyncJob::parseJson(const QJsonDocument& data)
{
+ d->parseJson(data);
+ return Success;
+}
+
+void SyncData::parseJson(const QJsonDocument &data) {
QElapsedTimer et; et.start();
QJsonObject json = data.object();
- d->nextBatch = json.value("next_batch").toString();
+ nextBatch_ = json.value("next_batch").toString();
// TODO: presence
// TODO: account_data
QJsonObject rooms = json.value("rooms").toObject();
@@ -86,13 +84,11 @@ BaseJob::Status SyncJob::parseJson(const QJsonDocument& data)
{
const QJsonObject rs = rooms.value(roomState.jsonKey).toObject();
// We have a Qt container on the right and an STL one on the left
- d->roomData.reserve(static_cast<size_t>(rs.size()));
+ roomData.reserve(static_cast<size_t>(rs.size()));
for( auto rkey: rs.keys() )
- d->roomData.emplace_back(rkey, roomState.enumVal, rs[rkey].toObject());
+ roomData.emplace_back(rkey, roomState.enumVal, rs[rkey].toObject());
}
- qCDebug(PROFILER) << "*** SyncJob::parseJson():" << et.elapsed() << "ms";
-
- return Success;
+ qCDebug(PROFILER) << "*** SyncData::parseJson():" << et.elapsed() << "ms";
}
SyncRoomData::SyncRoomData(const QString& roomId_, JoinState joinState_,
diff --git a/jobs/syncjob.h b/jobs/syncjob.h
index 07824e23..9dc221b5 100644
--- a/jobs/syncjob.h
+++ b/jobs/syncjob.h
@@ -67,7 +67,18 @@ Q_DECLARE_TYPEINFO(QMatrixClient::SyncRoomData, Q_MOVABLE_TYPE);
namespace QMatrixClient
{
// QVector cannot work with non-copiable objects, std::vector can.
- using SyncData = std::vector<SyncRoomData>;
+ using SyncDataList = std::vector<SyncRoomData>;
+
+ class SyncData {
+ public:
+ void parseJson(const QJsonDocument &data);
+ SyncDataList&& takeRoomData();
+ QString nextBatch() const;
+
+ private:
+ QString nextBatch_;
+ SyncDataList roomData;
+ };
class SyncJob: public BaseJob
{
@@ -77,14 +88,12 @@ namespace QMatrixClient
int timeout = -1, const QString& presence = {});
virtual ~SyncJob();
- SyncData&& takeRoomData();
- QString nextBatch() const;
+ SyncData *data() const { return d; }
protected:
Status parseJson(const QJsonDocument& data) override;
private:
- class Private;
- Private* d;
+ SyncData* d;
};
} // namespace QMatrixClient