From 093bfcc50d5889358ed806096ac5652a9e925cfc Mon Sep 17 00:00:00 2001 From: "Felix (xq) Queißner" Date: Sun, 7 Jun 2020 01:06:07 +0200 Subject: Implements multi-protocol support. Adds support for HTTP/HTTPS, adds settings to enable/disable protocols --- src/webclient.cpp | 78 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 src/webclient.cpp (limited to 'src/webclient.cpp') diff --git a/src/webclient.cpp b/src/webclient.cpp new file mode 100644 index 0000000..6e9b5ab --- /dev/null +++ b/src/webclient.cpp @@ -0,0 +1,78 @@ +#include "webclient.hpp" + +#include +#include + +WebClient::WebClient(QObject *parent) : + QObject(parent), + current_reply(nullptr) +{ + manager.setRedirectPolicy(QNetworkRequest::NoLessSafeRedirectPolicy); +} + +WebClient::~WebClient() +{ + +} + +bool WebClient::startRequest(const QUrl &url) +{ + if(this->current_reply != nullptr) + return true; + + this->body.clear(); + + QNetworkRequest request(url); + request.setMaximumRedirectsAllowed(5); + request.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true); + + this->current_reply = manager.get(request); + if(this->current_reply == nullptr) + return false; + + connect(this->current_reply, &QNetworkReply::readyRead, this, &WebClient::on_data); + connect(this->current_reply, &QNetworkReply::finished, this, &WebClient::on_finished); + + return true; +} + +bool WebClient::isInProgress() const +{ + return (this->current_reply != nullptr); +} + +bool WebClient::cancelRequest() +{ + if(this->current_reply != nullptr) + { + this->current_reply->abort(); + this->current_reply = nullptr; + } + this->body.clear(); + return true; +} + +void WebClient::on_data() +{ + this->body.append(this->current_reply->readAll()); +} + +void WebClient::on_finished() +{ + if(this->current_reply->error() != QNetworkReply::NoError) + { + emit this->requestFailed(this->current_reply->errorString()); + } + else + { + auto mime = this->current_reply->header(QNetworkRequest::ContentTypeHeader).toString(); + + qDebug() << this->current_reply->url() << mime; + + emit this->requestComplete(this->body, mime); + + this->body.clear(); + } + this->current_reply->deleteLater(); + this->current_reply = nullptr; +} -- cgit v1.2.3