INitial support for multipart.
This commit is contained in:
parent
af01e5b499
commit
2091ee7a9c
@ -1 +1 @@
|
|||||||
Subproject commit ae7084718c41afc01919779e58cd449e0eebd401
|
Subproject commit 4a01edaec7d67d3b2ae81aeea2a3c876216fbab8
|
@ -4,12 +4,13 @@
|
|||||||
|
|
||||||
#include "network-web/silentnetworkaccessmanager.h"
|
#include "network-web/silentnetworkaccessmanager.h"
|
||||||
|
|
||||||
|
#include <QHttpMultiPart>
|
||||||
#include <QTimer>
|
#include <QTimer>
|
||||||
|
|
||||||
Downloader::Downloader(QObject* parent)
|
Downloader::Downloader(QObject* parent)
|
||||||
: QObject(parent), m_activeReply(nullptr), m_downloadManager(new SilentNetworkAccessManager(this)),
|
: QObject(parent), m_activeReply(nullptr), m_downloadManager(new SilentNetworkAccessManager(this)),
|
||||||
m_timer(new QTimer(this)), m_customHeaders(QHash<QByteArray, QByteArray>()), m_inputData(QByteArray()),
|
m_timer(new QTimer(this)), m_customHeaders(QHash<QByteArray, QByteArray>()), m_inputData(QByteArray()),
|
||||||
m_targetProtected(false), m_targetUsername(QString()), m_targetPassword(QString()),
|
m_inputMultipartData(nullptr), m_targetProtected(false), m_targetUsername(QString()), m_targetPassword(QString()),
|
||||||
m_lastOutputData(QByteArray()), m_lastOutputError(QNetworkReply::NoError), m_lastContentType(QVariant()) {
|
m_lastOutputData(QByteArray()), m_lastOutputError(QNetworkReply::NoError), m_lastContentType(QVariant()) {
|
||||||
m_timer->setInterval(DOWNLOAD_TIMEOUT);
|
m_timer->setInterval(DOWNLOAD_TIMEOUT);
|
||||||
m_timer->setSingleShot(true);
|
m_timer->setSingleShot(true);
|
||||||
@ -29,8 +30,25 @@ void Downloader::uploadFile(const QString& url, const QByteArray& data, int time
|
|||||||
manipulateData(url, QNetworkAccessManager::PostOperation, data, timeout, protected_contents, username, password);
|
manipulateData(url, QNetworkAccessManager::PostOperation, data, timeout, protected_contents, username, password);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Downloader::manipulateData(const QString& url, QNetworkAccessManager::Operation operation,
|
||||||
|
QHttpMultiPart* multipart_data, int timeout,
|
||||||
|
bool protected_contents, const QString& username, const QString& password) {
|
||||||
|
manipulateData(url, operation, QByteArray(), multipart_data, timeout, protected_contents, username, password);
|
||||||
|
}
|
||||||
|
|
||||||
void Downloader::manipulateData(const QString& url, QNetworkAccessManager::Operation operation, const QByteArray& data,
|
void Downloader::manipulateData(const QString& url, QNetworkAccessManager::Operation operation, const QByteArray& data,
|
||||||
int timeout, bool protected_contents, const QString& username, const QString& password) {
|
int timeout, bool protected_contents, const QString& username, const QString& password) {
|
||||||
|
manipulateData(url, operation, data, nullptr, timeout, protected_contents, username, password);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Downloader::manipulateData(const QString& url,
|
||||||
|
QNetworkAccessManager::Operation operation,
|
||||||
|
const QByteArray& data,
|
||||||
|
QHttpMultiPart* multipart_data,
|
||||||
|
int timeout,
|
||||||
|
bool protected_contents,
|
||||||
|
const QString& username,
|
||||||
|
const QString& password) {
|
||||||
QNetworkRequest request;
|
QNetworkRequest request;
|
||||||
QString non_const_url = url;
|
QString non_const_url = url;
|
||||||
|
|
||||||
@ -42,6 +60,7 @@ void Downloader::manipulateData(const QString& url, QNetworkAccessManager::Opera
|
|||||||
}
|
}
|
||||||
|
|
||||||
m_inputData = data;
|
m_inputData = data;
|
||||||
|
m_inputMultipartData = multipart_data;
|
||||||
|
|
||||||
// Set url for this request and fire it up.
|
// Set url for this request and fire it up.
|
||||||
m_timer->setInterval(timeout);
|
m_timer->setInterval(timeout);
|
||||||
@ -59,8 +78,13 @@ void Downloader::manipulateData(const QString& url, QNetworkAccessManager::Opera
|
|||||||
m_targetPassword = password;
|
m_targetPassword = password;
|
||||||
|
|
||||||
if (operation == QNetworkAccessManager::PostOperation) {
|
if (operation == QNetworkAccessManager::PostOperation) {
|
||||||
|
if (m_inputMultipartData == nullptr) {
|
||||||
runPostRequest(request, m_inputData);
|
runPostRequest(request, m_inputData);
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
runPostRequest(request, m_inputMultipartData);
|
||||||
|
}
|
||||||
|
}
|
||||||
else if (operation == QNetworkAccessManager::GetOperation) {
|
else if (operation == QNetworkAccessManager::GetOperation) {
|
||||||
runGetRequest(request);
|
runGetRequest(request);
|
||||||
}
|
}
|
||||||
@ -117,6 +141,11 @@ void Downloader::finished() {
|
|||||||
m_lastOutputError = reply->error();
|
m_lastOutputError = reply->error();
|
||||||
m_activeReply->deleteLater();
|
m_activeReply->deleteLater();
|
||||||
m_activeReply = nullptr;
|
m_activeReply = nullptr;
|
||||||
|
|
||||||
|
if (m_inputMultipartData != nullptr) {
|
||||||
|
m_inputMultipartData->deleteLater();
|
||||||
|
}
|
||||||
|
|
||||||
emit completed(m_lastOutputError, m_lastOutputData);
|
emit completed(m_lastOutputError, m_lastOutputData);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -149,6 +178,16 @@ void Downloader::runPutRequest(const QNetworkRequest& request, const QByteArray&
|
|||||||
connect(m_activeReply, &QNetworkReply::finished, this, &Downloader::finished);
|
connect(m_activeReply, &QNetworkReply::finished, this, &Downloader::finished);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Downloader::runPostRequest(const QNetworkRequest& request, QHttpMultiPart* multipart_data) {
|
||||||
|
m_timer->start();
|
||||||
|
m_activeReply = m_downloadManager->post(request, multipart_data);
|
||||||
|
m_activeReply->setProperty("protected", m_targetProtected);
|
||||||
|
m_activeReply->setProperty("username", m_targetUsername);
|
||||||
|
m_activeReply->setProperty("password", m_targetPassword);
|
||||||
|
connect(m_activeReply, &QNetworkReply::downloadProgress, this, &Downloader::progressInternal);
|
||||||
|
connect(m_activeReply, &QNetworkReply::finished, this, &Downloader::finished);
|
||||||
|
}
|
||||||
|
|
||||||
void Downloader::runPostRequest(const QNetworkRequest& request, const QByteArray& data) {
|
void Downloader::runPostRequest(const QNetworkRequest& request, const QByteArray& data) {
|
||||||
m_timer->start();
|
m_timer->start();
|
||||||
m_activeReply = m_downloadManager->post(request, data);
|
m_activeReply = m_downloadManager->post(request, data);
|
||||||
|
@ -40,6 +40,11 @@ class Downloader : public QObject {
|
|||||||
bool protected_contents = false, const QString& username = QString(),
|
bool protected_contents = false, const QString& username = QString(),
|
||||||
const QString& password = QString());
|
const QString& password = QString());
|
||||||
|
|
||||||
|
void manipulateData(const QString& url, QNetworkAccessManager::Operation operation,
|
||||||
|
QHttpMultiPart* multipart_data,
|
||||||
|
int timeout = DOWNLOAD_TIMEOUT, bool protected_contents = false,
|
||||||
|
const QString& username = QString(), const QString& password = QString());
|
||||||
|
|
||||||
void manipulateData(const QString& url, QNetworkAccessManager::Operation operation,
|
void manipulateData(const QString& url, QNetworkAccessManager::Operation operation,
|
||||||
const QByteArray& data = QByteArray(),
|
const QByteArray& data = QByteArray(),
|
||||||
int timeout = DOWNLOAD_TIMEOUT, bool protected_contents = false,
|
int timeout = DOWNLOAD_TIMEOUT, bool protected_contents = false,
|
||||||
@ -60,8 +65,13 @@ class Downloader : public QObject {
|
|||||||
void progressInternal(qint64 bytes_received, qint64 bytes_total);
|
void progressInternal(qint64 bytes_received, qint64 bytes_total);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void manipulateData(const QString& url, QNetworkAccessManager::Operation operation,
|
||||||
|
const QByteArray& data, QHttpMultiPart* multipart_data,
|
||||||
|
int timeout = DOWNLOAD_TIMEOUT, bool protected_contents = false,
|
||||||
|
const QString& username = QString(), const QString& password = QString());
|
||||||
void runDeleteRequest(const QNetworkRequest& request);
|
void runDeleteRequest(const QNetworkRequest& request);
|
||||||
void runPutRequest(const QNetworkRequest& request, const QByteArray& data);
|
void runPutRequest(const QNetworkRequest& request, const QByteArray& data);
|
||||||
|
void runPostRequest(const QNetworkRequest& request, QHttpMultiPart* multipart_data);
|
||||||
void runPostRequest(const QNetworkRequest& request, const QByteArray& data);
|
void runPostRequest(const QNetworkRequest& request, const QByteArray& data);
|
||||||
void runGetRequest(const QNetworkRequest& request);
|
void runGetRequest(const QNetworkRequest& request);
|
||||||
|
|
||||||
@ -73,6 +83,7 @@ class Downloader : public QObject {
|
|||||||
|
|
||||||
QHash<QByteArray, QByteArray> m_customHeaders;
|
QHash<QByteArray, QByteArray> m_customHeaders;
|
||||||
QByteArray m_inputData;
|
QByteArray m_inputData;
|
||||||
|
QHttpMultiPart* m_inputMultipartData;
|
||||||
bool m_targetProtected;
|
bool m_targetProtected;
|
||||||
QString m_targetUsername;
|
QString m_targetUsername;
|
||||||
QString m_targetPassword;
|
QString m_targetPassword;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user