diff options
author | Uwe Klotz <uklotz@mixxx.org> | 2021-01-05 14:37:16 +0100 |
---|---|---|
committer | Uwe Klotz <uklotz@mixxx.org> | 2021-01-05 15:35:27 +0100 |
commit | 0dab49f0e56c4bf14c5bc1f22b5fa0750736d299 (patch) | |
tree | a34270de677ce71dadfb22f74784fc32f337313a /src/network | |
parent | 9e3985ff354bc83dd6c77704bec6729bd4017504 (diff) |
Network response data: Replace inheritance with composition
Diffstat (limited to 'src/network')
-rw-r--r-- | src/network/jsonwebtask.cpp | 25 | ||||
-rw-r--r-- | src/network/jsonwebtask.h | 35 | ||||
-rw-r--r-- | src/network/webtask.cpp | 11 | ||||
-rw-r--r-- | src/network/webtask.h | 85 |
4 files changed, 93 insertions, 63 deletions
diff --git a/src/network/jsonwebtask.cpp b/src/network/jsonwebtask.cpp index 1c4429f6b1..0bcef44626 100644 --- a/src/network/jsonwebtask.cpp +++ b/src/network/jsonwebtask.cpp @@ -115,10 +115,10 @@ QNetworkRequest newRequest( QDebug operator<<(QDebug dbg, const JsonWebResponse& arg) { return dbg - << "CustomWebResponse{" - << static_cast<const WebResponse&>(arg) - << arg.content - << '}'; + << "CustomWebResponse{" + << arg.m_response + << arg.m_content + << '}'; } JsonWebTask::JsonWebTask( @@ -134,24 +134,20 @@ JsonWebTask::JsonWebTask( } void JsonWebTask::onFinished( - JsonWebResponse&& response) { + JsonWebResponse&& jsonResponse) { kLogger.info() << this - << "Response received" - << response.replyUrl - << response.statusCode - << response.content; + << "Received JSON response" + << jsonResponse; deleteLater(); } void JsonWebTask::onFinishedCustom( - CustomWebResponse&& response) { + CustomWebResponse&& customResponse) { kLogger.info() << this - << "Custom response received" - << response.replyUrl - << response.statusCode - << response.content; + << "Received custom response" + << customResponse; deleteLater(); } @@ -282,6 +278,7 @@ void JsonWebTask::doNetworkReplyFinished( WebResponse{ finishedNetworkReply->url(), statusCode}, + readContentType(finishedNetworkReply), finishedNetworkReply->readAll()}); } else { onFinished(JsonWebResponse{ diff --git a/src/network/jsonwebtask.h b/src/network/jsonwebtask.h index 67d2c58fc5..1bd22b2d74 100644 --- a/src/network/jsonwebtask.h +++ b/src/network/jsonwebtask.h @@ -25,28 +25,45 @@ struct JsonWebRequest final { QJsonDocument content; }; -struct JsonWebResponse : public WebResponse { +class JsonWebResponse final { public: static void registerMetaType(); JsonWebResponse() = default; JsonWebResponse( - WebResponse response, - QJsonDocument content) - : WebResponse(std::move(response)), - content(std::move(content)) { + WebResponse&& response, + QJsonDocument&& content) + : m_response(std::move(response)), + m_content(std::move(content)) { } JsonWebResponse(const JsonWebResponse&) = default; JsonWebResponse(JsonWebResponse&&) = default; - ~JsonWebResponse() override = default; JsonWebResponse& operator=(const JsonWebResponse&) = default; JsonWebResponse& operator=(JsonWebResponse&&) = default; - QJsonDocument content; -}; + bool isStatusCodeSuccess() const { + return m_response.isStatusCodeSuccess(); + } + + HttpStatusCode statusCode() const { + return m_response.statusCode(); + } + + const QUrl& replyUrl() const { + return m_response.replyUrl(); + } + + const QJsonDocument& content() const { + return m_content; + } -QDebug operator<<(QDebug dbg, const JsonWebResponse& arg); + friend QDebug operator<<(QDebug dbg, const JsonWebResponse& arg); + + private: + WebResponse m_response; + QJsonDocument m_content; +}; class JsonWebTask : public WebTask { Q_OBJECT diff --git a/src/network/webtask.cpp b/src/network/webtask.cpp index 99e779d1cc..6b5f878baf 100644 --- a/src/network/webtask.cpp +++ b/src/network/webtask.cpp @@ -48,8 +48,8 @@ int readStatusCode( QDebug operator<<(QDebug dbg, const WebResponse& arg) { return dbg << "WebResponse{" - << arg.replyUrl - << arg.statusCode + << arg.m_replyUrl + << arg.m_statusCode << '}'; } @@ -60,8 +60,9 @@ QDebug operator<<(QDebug dbg, const WebResponse& arg) { QDebug operator<<(QDebug dbg, const CustomWebResponse& arg) { return dbg << "CustomWebResponse{" - << static_cast<const WebResponse&>(arg) - << arg.content + << arg.m_response + << arg.m_contentType + << arg.m_contentBytes << '}'; } @@ -221,7 +222,7 @@ void WebTask::slotNetworkReplyFinished() { VERIFY_OR_DEBUG_ASSERT(pFinishedNetworkReply) { return; } - const auto deleteFinishedNetworkReply = ScopedDeleteLater(pFinishedNetworkReply); + const auto finishedNetworkReplyDeleter = ScopedDeleteLater(pFinishedNetworkReply); if (kLogger.debugEnabled()) { if (pFinishedNetworkReply->url() == pFinishedNetworkReply->request().url()) { diff --git a/src/network/webtask.h b/src/network/webtask.h index 088408d832..79174281cb 100644 --- a/src/network/webtask.h +++ b/src/network/webtask.h @@ -1,5 +1,6 @@ #pragma once +#include <QMimeType> #include <QNetworkAccessManager> #include <QNetworkReply> #include <QPointer> @@ -13,76 +14,90 @@ namespace mixxx { namespace network { -struct WebResponse { +class WebResponse final { public: static void registerMetaType(); WebResponse() - : statusCode(kHttpStatusCodeInvalid) { + : m_statusCode(kHttpStatusCodeInvalid) { } explicit WebResponse( QUrl replyUrl, HttpStatusCode statusCode = kHttpStatusCodeInvalid) - : replyUrl(std::move(replyUrl)), - statusCode(statusCode) { + : m_replyUrl(std::move(replyUrl)), + m_statusCode(statusCode) { } WebResponse(const WebResponse&) = default; WebResponse(WebResponse&&) = default; - virtual ~WebResponse() = default; WebResponse& operator=(const WebResponse&) = default; WebResponse& operator=(WebResponse&&) = default; - bool isStatusCodeValid() const { - return HttpStatusCode_isValid(statusCode); - } bool isStatusCodeSuccess() const { - return HttpStatusCode_isSuccess(statusCode); - } - bool isStatusCodeRedirection() const { - return HttpStatusCode_isRedirection(statusCode); - } - bool isStatusCodeClientError() const { - return HttpStatusCode_isClientError(statusCode); + return HttpStatusCode_isSuccess(m_statusCode); } - bool isStatusCodeServerError() const { - return HttpStatusCode_isServerError(statusCode); - } - bool isStatusCodeCustomError() const { - return HttpStatusCode_isCustomError(statusCode); + + HttpStatusCode statusCode() const { + return m_statusCode; } - bool isStatusCodeError() const { - return HttpStatusCode_isError(statusCode); + + const QUrl& replyUrl() const { + return m_replyUrl; } - QUrl replyUrl; - HttpStatusCode statusCode; -}; + friend QDebug operator<<(QDebug dbg, const WebResponse& arg); -QDebug operator<<(QDebug dbg, const WebResponse& arg); + private: + QUrl m_replyUrl; + HttpStatusCode m_statusCode; +}; -struct CustomWebResponse : public WebResponse { +class CustomWebResponse final { public: static void registerMetaType(); CustomWebResponse() = default; CustomWebResponse( - WebResponse response, - QByteArray content) - : WebResponse(std::move(response)), - content(std::move(content)) { + WebResponse&& response, + QMimeType&& contentType, + QByteArray&& contentBytes) + : m_response(std::move(response)), + m_contentType(std::move(contentType)), + m_contentBytes(std::move(contentBytes)) { } CustomWebResponse(const CustomWebResponse&) = default; CustomWebResponse(CustomWebResponse&&) = default; - ~CustomWebResponse() override = default; CustomWebResponse& operator=(const CustomWebResponse&) = default; CustomWebResponse& operator=(CustomWebResponse&&) = default; - QByteArray content; -}; + bool isStatusCodeSuccess() const { + return m_response.isStatusCodeSuccess(); + } -QDebug operator<<(QDebug dbg, const CustomWebResponse& arg); + HttpStatusCode statusCode() const { + return m_response.statusCode(); + } + + const QUrl& replyUrl() const { + return m_response.replyUrl(); + } + + const QMimeType& contentType() const { + return m_contentType; + } + + const QByteArray& contentBytes() const { + return m_contentBytes; + } + + friend QDebug operator<<(QDebug dbg, const CustomWebResponse& arg); + + private: + WebResponse m_response; + QMimeType m_contentType; + QByteArray m_contentBytes; +}; /// A transient task for performing a single HTTP network request /// asynchronously. |