From 6a9b1876bf8ebeca398c9c57ef90e01c25a7ada6 Mon Sep 17 00:00:00 2001 From: Kitsune Ral Date: Sun, 4 Feb 2018 23:12:42 +0900 Subject: MediaThumbnailJob::parseReply: Do not ignore underlying errors --- jobs/mediathumbnailjob.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'jobs') diff --git a/jobs/mediathumbnailjob.cpp b/jobs/mediathumbnailjob.cpp index 261978ec..dda1cdb4 100644 --- a/jobs/mediathumbnailjob.cpp +++ b/jobs/mediathumbnailjob.cpp @@ -52,10 +52,12 @@ QImage MediaThumbnailJob::scaledThumbnail(QSize toSize) const BaseJob::Status MediaThumbnailJob::parseReply(QNetworkReply* reply) { - GetContentThumbnailJob::parseReply(reply); - if( !_thumbnail.loadFromData(content()->readAll()) ) - { - qCDebug(JOBS) << "MediaThumbnailJob: could not read image data"; - } - return Success; + auto result = GetContentThumbnailJob::parseReply(reply); + if (!result.good()) + return result; + + if( _thumbnail.loadFromData(content()->readAll()) ) + return Success; + + return { IncorrectResponseError, "Could not read image data" }; } -- cgit v1.2.3 From d54bdd710163afe9e09b2c4c65bbf21454ed2ceb Mon Sep 17 00:00:00 2001 From: Kitsune Ral Date: Tue, 20 Feb 2018 10:38:37 +0900 Subject: BaseJob: added Abandoned status For a very brief period between calling BaseJob::abandon() and deletion of the job object. --- jobs/basejob.cpp | 1 + jobs/basejob.h | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) (limited to 'jobs') diff --git a/jobs/basejob.cpp b/jobs/basejob.cpp index c35a7711..5f5aa410 100644 --- a/jobs/basejob.cpp +++ b/jobs/basejob.cpp @@ -448,6 +448,7 @@ void BaseJob::setStatus(int code, QString message) void BaseJob::abandon() { beforeAbandon(d->reply.data()); + setStatus(Abandoned); this->disconnect(); if (d->reply) d->reply->disconnect(this); diff --git a/jobs/basejob.h b/jobs/basejob.h index c03c914f..a5b457c5 100644 --- a/jobs/basejob.h +++ b/jobs/basejob.h @@ -53,7 +53,8 @@ namespace QMatrixClient enum StatusCode { NoError = 0 // To be compatible with Qt conventions , Success = 0 , Pending = 1 - , ErrorLevel = 100 // Errors have codes starting from this + , Abandoned = 50 //< A very brief period between abandoning and object deletion + , ErrorLevel = 100 //< Errors have codes starting from this , NetworkError = 100 , JsonParseError , TimeoutError -- cgit v1.2.3 From 8fbbd6063a2d313c630d14842bbce4de8c1e7851 Mon Sep 17 00:00:00 2001 From: Kitsune Ral Date: Fri, 23 Feb 2018 10:42:44 +0900 Subject: BaseJob: In case of 4xx errors, fill the status with the message from the response --- jobs/basejob.cpp | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'jobs') diff --git a/jobs/basejob.cpp b/jobs/basejob.cpp index 5f5aa410..c3b110f0 100644 --- a/jobs/basejob.cpp +++ b/jobs/basejob.cpp @@ -267,6 +267,12 @@ void BaseJob::gotReply() setStatus(checkReply(d->reply.data())); if (status().good()) setStatus(parseReply(d->reply.data())); + else + { + auto json = QJsonDocument::fromJson(d->reply->readAll()).object(); + if (!json.isEmpty()) + setStatus(IncorrectRequestError, json.value("error").toString()); + } finishJob(); } -- cgit v1.2.3 From a2f991555bec7b317606093e95ec2b5684b0005a Mon Sep 17 00:00:00 2001 From: Kitsune Ral Date: Sun, 25 Feb 2018 15:09:17 +0900 Subject: SyncJob: parse events from global account data too Closes #123 (room account data were parsed even before). No specific event classes for account data yet, though. --- jobs/syncjob.cpp | 11 ++++++++--- jobs/syncjob.h | 36 +++++++++++++++++++----------------- 2 files changed, 27 insertions(+), 20 deletions(-) (limited to 'jobs') diff --git a/jobs/syncjob.cpp b/jobs/syncjob.cpp index ce5dd894..7b066f4f 100644 --- a/jobs/syncjob.cpp +++ b/jobs/syncjob.cpp @@ -54,6 +54,11 @@ SyncDataList&& SyncData::takeRoomData() return std::move(roomData); } +SyncBatch&& SyncData::takeAccountData() +{ + return std::move(accountData); +} + BaseJob::Status SyncJob::parseJson(const QJsonDocument& data) { return d.parseJson(data); @@ -63,12 +68,12 @@ BaseJob::Status SyncData::parseJson(const QJsonDocument &data) { QElapsedTimer et; et.start(); - QJsonObject json = data.object(); + auto json { data.object() }; nextBatch_ = json.value("next_batch").toString(); // TODO: presence - // TODO: account_data - QJsonObject rooms = json.value("rooms").toObject(); + accountData.fromJson(json); + QJsonObject rooms = json.value("rooms").toObject(); for (size_t i = 0; i < JoinStateStrings.size(); ++i) { const auto rs = rooms.value(JoinStateStrings[i]).toObject(); diff --git a/jobs/syncjob.h b/jobs/syncjob.h index aed36e0b..5956e73b 100644 --- a/jobs/syncjob.h +++ b/jobs/syncjob.h @@ -26,30 +26,30 @@ namespace QMatrixClient { - class SyncRoomData + template + class SyncBatch : public EventsBatch { public: - template - class Batch : public EventsBatch + explicit SyncBatch(QString k) : jsonKey(std::move(k)) { } + void fromJson(const QJsonObject& roomContents) { - public: - explicit Batch(QString k) : jsonKey(std::move(k)) { } - void fromJson(const QJsonObject& roomContents) - { - EventsBatch::fromJson( - roomContents[jsonKey].toObject(), "events"); - } + EventsBatch::fromJson( + roomContents[jsonKey].toObject(), "events"); + } - private: - QString jsonKey; - }; + private: + QString jsonKey; + }; + class SyncRoomData + { + public: QString roomId; JoinState joinState; - Batch state; - Batch timeline; - Batch ephemeral; - Batch accountData; + SyncBatch state; + SyncBatch timeline; + SyncBatch ephemeral; + SyncBatch accountData; bool timelineLimited; QString timelinePrevBatch; @@ -68,11 +68,13 @@ namespace QMatrixClient { public: BaseJob::Status parseJson(const QJsonDocument &data); + SyncBatch&& takeAccountData(); SyncDataList&& takeRoomData(); QString nextBatch() const; private: QString nextBatch_; + SyncBatch accountData { "account_data" }; SyncDataList roomData; }; -- cgit v1.2.3