summaryrefslogtreecommitdiffstats
path: root/src/network
diff options
context:
space:
mode:
authorUwe Klotz <uklotz@mixxx.org>2021-01-05 14:37:16 +0100
committerUwe Klotz <uklotz@mixxx.org>2021-01-05 15:35:27 +0100
commit0dab49f0e56c4bf14c5bc1f22b5fa0750736d299 (patch)
treea34270de677ce71dadfb22f74784fc32f337313a /src/network
parent9e3985ff354bc83dd6c77704bec6729bd4017504 (diff)
Network response data: Replace inheritance with composition
Diffstat (limited to 'src/network')
-rw-r--r--src/network/jsonwebtask.cpp25
-rw-r--r--src/network/jsonwebtask.h35
-rw-r--r--src/network/webtask.cpp11
-rw-r--r--src/network/webtask.h85
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.