[C++] [Qt5]Add support for response compression and add response body to error s… (#5060)

* Add support for response compression and add response body to error string

* Improve robustness while parsing quality and compression levels
This commit is contained in:
sunn 2020-01-21 12:11:43 +01:00 committed by GitHub
parent ff7203875f
commit a1d21f6d3a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
19 changed files with 189 additions and 20 deletions

View File

@ -6,6 +6,7 @@ sidebar_label: cpp-qt5-client
| Option | Description | Values | Default | | Option | Description | Values | Default |
| ------ | ----------- | ------ | ------- | | ------ | ----------- | ------ | ------- |
|allowUnicodeIdentifiers|boolean, toggles whether unicode identifiers are allowed in names or not, default is false| |false| |allowUnicodeIdentifiers|boolean, toggles whether unicode identifiers are allowed in names or not, default is false| |false|
|contentCompression|Enable Compressed Content Encoding for requests and responses| |false|
|cppNamespace|C++ namespace (convention: name::space::for::api).| |OpenAPI| |cppNamespace|C++ namespace (convention: name::space::for::api).| |OpenAPI|
|ensureUniqueParams|Whether to ensure parameter names are unique in an operation (rename parameters that are not).| |true| |ensureUniqueParams|Whether to ensure parameter names are unique in an operation (rename parameters that are not).| |true|
|modelNamePrefix|Prefix that will be prepended to all model names.| |OAI| |modelNamePrefix|Prefix that will be prepended to all model names.| |OAI|

View File

@ -6,6 +6,7 @@ sidebar_label: cpp-qt5-qhttpengine-server
| Option | Description | Values | Default | | Option | Description | Values | Default |
| ------ | ----------- | ------ | ------- | | ------ | ----------- | ------ | ------- |
|allowUnicodeIdentifiers|boolean, toggles whether unicode identifiers are allowed in names or not, default is false| |false| |allowUnicodeIdentifiers|boolean, toggles whether unicode identifiers are allowed in names or not, default is false| |false|
|contentCompression|Enable Compressed Content Encoding for requests and responses| |false|
|cppNamespace|C++ namespace (convention: name::space::for::api).| |OpenAPI| |cppNamespace|C++ namespace (convention: name::space::for::api).| |OpenAPI|
|ensureUniqueParams|Whether to ensure parameter names are unique in an operation (rename parameters that are not).| |true| |ensureUniqueParams|Whether to ensure parameter names are unique in an operation (rename parameters that are not).| |true|
|modelNamePrefix|Prefix that will be prepended to all model names.| |OAI| |modelNamePrefix|Prefix that will be prepended to all model names.| |OAI|

View File

@ -21,10 +21,13 @@ public class CppQt5AbstractCodegen extends AbstractCppCodegen implements Codegen
protected String apiVersion = "1.0.0"; protected String apiVersion = "1.0.0";
protected static final String CPP_NAMESPACE = "cppNamespace"; protected static final String CPP_NAMESPACE = "cppNamespace";
protected static final String CPP_NAMESPACE_DESC = "C++ namespace (convention: name::space::for::api)."; protected static final String CPP_NAMESPACE_DESC = "C++ namespace (convention: name::space::for::api).";
protected static final String CONTENT_COMPRESSION_ENABLED = "contentCompression";
protected static final String CONTENT_COMPRESSION_ENABLED_DESC = "Enable Compressed Content Encoding for requests and responses";
protected Set<String> foundationClasses = new HashSet<String>(); protected Set<String> foundationClasses = new HashSet<String>();
protected String cppNamespace = "OpenAPI"; protected String cppNamespace = "OpenAPI";
protected Map<String, String> namespaces = new HashMap<String, String>(); protected Map<String, String> namespaces = new HashMap<String, String>();
protected Set<String> systemIncludes = new HashSet<String>(); protected Set<String> systemIncludes = new HashSet<String>();
protected boolean isContentCompressionEnabled = false;
protected Set<String> nonFrameworkPrimitives = new HashSet<String>(); protected Set<String> nonFrameworkPrimitives = new HashSet<String>();
@ -56,6 +59,7 @@ public class CppQt5AbstractCodegen extends AbstractCppCodegen implements Codegen
// CLI options // CLI options
addOption(CPP_NAMESPACE, CPP_NAMESPACE_DESC, this.cppNamespace); addOption(CPP_NAMESPACE, CPP_NAMESPACE_DESC, this.cppNamespace);
addOption(CodegenConstants.MODEL_NAME_PREFIX, CodegenConstants.MODEL_NAME_PREFIX_DESC, this.modelNamePrefix); addOption(CodegenConstants.MODEL_NAME_PREFIX, CodegenConstants.MODEL_NAME_PREFIX_DESC, this.modelNamePrefix);
addSwitch(CONTENT_COMPRESSION_ENABLED, CONTENT_COMPRESSION_ENABLED_DESC, this.isContentCompressionEnabled);
/* /*
* Additional Properties. These values can be passed to the templates and * Additional Properties. These values can be passed to the templates and
@ -137,6 +141,11 @@ public class CppQt5AbstractCodegen extends AbstractCppCodegen implements Codegen
typeMapping.put("object", modelNamePrefix + "Object"); typeMapping.put("object", modelNamePrefix + "Object");
additionalProperties().put("prefix", modelNamePrefix); additionalProperties().put("prefix", modelNamePrefix);
} }
if (additionalProperties.containsKey(CONTENT_COMPRESSION_ENABLED)) {
setContentCompressionEnabled(convertPropertyToBooleanAndWriteBack(CONTENT_COMPRESSION_ENABLED));
} else {
additionalProperties.put(CONTENT_COMPRESSION_ENABLED, isContentCompressionEnabled);
}
} }
@Override @Override
@ -379,4 +388,8 @@ public class CppQt5AbstractCodegen extends AbstractCppCodegen implements Codegen
} }
return included; return included;
} }
public void setContentCompressionEnabled(boolean flag) {
this.isContentCompressionEnabled = flag;
}
} }

View File

@ -8,14 +8,15 @@ set(CMAKE_AUTOMOC ON)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -Wall -Wno-unused-variable") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -Wall -Wno-unused-variable")
find_package(Qt5Core REQUIRED) find_package(Qt5Core REQUIRED)
find_package(Qt5Network REQUIRED) find_package(Qt5Network REQUIRED){{#contentCompression}}
find_package(ZLIB REQUIRED){{/contentCompression}}
file(GLOB SRCS file(GLOB SRCS
${CMAKE_CURRENT_SOURCE_DIR}/*.cpp ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
) )
add_library(${PROJECT_NAME} ${SRCS}) add_library(${PROJECT_NAME} ${SRCS})
target_link_libraries(${PROJECT_NAME} PRIVATE Qt5::Core Qt5::Network ssl crypto) target_link_libraries(${PROJECT_NAME} PRIVATE Qt5::Core Qt5::Network ssl crypto{{#contentCompression}} ${ZLIB_LIBRARIES}{{/contentCompression}})
set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD 14) set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD 14)
set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD_REQUIRED ON) set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD_REQUIRED ON)

View File

@ -6,7 +6,8 @@
#include <QTimer> #include <QTimer>
#include <QUrl> #include <QUrl>
#include <QUuid> #include <QUuid>
#include <QtGlobal> #include <QtGlobal>{{#contentCompression}}
#include <zlib.h>{{/contentCompression}}
#include "{{prefix}}HttpRequest.h" #include "{{prefix}}HttpRequest.h"
@ -95,6 +96,10 @@ void {{prefix}}HttpRequestWorker::setWorkingDirectory(const QString &path) {
} }
} }
void {{prefix}}HttpRequestWorker::setCompressionEnabled(bool enable) {
isCompressionEnabled = enable;
}
QString {{prefix}}HttpRequestWorker::http_attribute_encode(QString attribute_name, QString input) { QString {{prefix}}HttpRequestWorker::http_attribute_encode(QString attribute_name, QString input) {
// result structure follows RFC 5987 // result structure follows RFC 5987
bool need_utf_encoding = false; bool need_utf_encoding = false;
@ -303,6 +308,10 @@ void {{prefix}}HttpRequestWorker::execute({{prefix}}HttpRequestInput *input) {
request.setHeader(QNetworkRequest::ContentTypeHeader, "multipart/form-data; boundary=" + boundary); request.setHeader(QNetworkRequest::ContentTypeHeader, "multipart/form-data; boundary=" + boundary);
} }
if(isCompressionEnabled){
request.setRawHeader("Accept-Encoding", "deflate, gzip");
}
if (input->http_method == "GET") { if (input->http_method == "GET") {
reply = manager->get(request); reply = manager->get(request);
} else if (input->http_method == "POST") { } else if (input->http_method == "POST") {
@ -332,15 +341,14 @@ void {{prefix}}HttpRequestWorker::execute({{prefix}}HttpRequestInput *input) {
void {{prefix}}HttpRequestWorker::on_manager_finished(QNetworkReply *reply) { void {{prefix}}HttpRequestWorker::on_manager_finished(QNetworkReply *reply) {
error_type = reply->error(); error_type = reply->error();
response = reply->readAll();
error_str = reply->errorString(); error_str = reply->errorString();
if (reply->rawHeaderPairs().count() > 0) { if (reply->rawHeaderPairs().count() > 0) {
for (const auto &item : reply->rawHeaderPairs()) { for (const auto &item : reply->rawHeaderPairs()) {
headers.insert(item.first, item.second); headers.insert(item.first, item.second);
} }
} }
process_response(reply);
reply->deleteLater(); reply->deleteLater();
process_form_response();
emit on_execution_finished(this); emit on_execution_finished(this);
} }
@ -354,7 +362,7 @@ void {{prefix}}HttpRequestWorker::on_manager_timeout(QNetworkReply *reply) {
emit on_execution_finished(this); emit on_execution_finished(this);
} }
void {{prefix}}HttpRequestWorker::process_form_response() { void {{prefix}}HttpRequestWorker::process_response(QNetworkReply *reply) {
if (getResponseHeaders().contains(QString("Content-Disposition"))) { if (getResponseHeaders().contains(QString("Content-Disposition"))) {
auto contentDisposition = getResponseHeaders().value(QString("Content-Disposition").toUtf8()).split(QString(";"), QString::SkipEmptyParts); auto contentDisposition = getResponseHeaders().value(QString("Content-Disposition").toUtf8()).split(QString(";"), QString::SkipEmptyParts);
auto contentType = auto contentType =
@ -368,18 +376,61 @@ void {{prefix}}HttpRequestWorker::process_form_response() {
} }
} }
{{prefix}}HttpFileElement felement; {{prefix}}HttpFileElement felement;
felement.saveToFile(QString(), workingDirectory + QDir::separator() + filename, filename, contentType, response.data()); felement.saveToFile(QString(), workingDirectory + QDir::separator() + filename, filename, contentType, reply->readAll());
files.insert(filename, felement); files.insert(filename, felement);
} }
} else if (getResponseHeaders().contains(QString("Content-Type"))) { } else if (getResponseHeaders().contains(QString("Content-Type"))) {
auto contentType = getResponseHeaders().value(QString("Content-Type").toUtf8()).split(QString(";"), QString::SkipEmptyParts); auto contentType = getResponseHeaders().value(QString("Content-Type").toUtf8()).split(QString(";"), QString::SkipEmptyParts);
if ((contentType.count() > 0) && (contentType.first() == QString("multipart/form-data"))) { if ((contentType.count() > 0) && (contentType.first() == QString("multipart/form-data"))) {
// TODO : Handle Multipart responses
} else { } else {
if(headers.contains("Content-Encoding")){
auto encoding = headers.value("Content-Encoding").split(QString(";"), QString::SkipEmptyParts);
if(encoding.count() > 0){
auto compressionTypes = encoding.first().split(',', QString::SkipEmptyParts);
if(compressionTypes.contains("gzip", Qt::CaseInsensitive) || compressionTypes.contains("deflate", Qt::CaseInsensitive)){
response = decompress(reply->readAll());
}
}
}
else {
response = reply->readAll();
}
} }
} }
} }
QByteArray {{prefix}}HttpRequestWorker::decompress(const QByteArray& data){
QByteArray result;
bool sts = false;{{#contentCompression}}
do{
z_stream strm{};
static const int CHUNK_SIZE = 2048;
char out[CHUNK_SIZE];
if (data.size() <= 4) {
break;
}
strm.avail_in = data.size();
strm.next_in = (Bytef*)(data.data());
if(Z_OK != inflateInit2(&strm, 15 + 32)){
break;
}
do {
sts = false;
strm.avail_out = CHUNK_SIZE;
strm.next_out = (Bytef*)(out);
if(inflate(&strm, Z_NO_FLUSH) < Z_OK){
break;
}
result.append(out, CHUNK_SIZE - strm.avail_out);
sts = true;
} while (strm.avail_out == 0);
inflateEnd(&strm);
} while(false);{{/contentCompression}}
return sts ? result : QByteArray();
}
QSslConfiguration *{{prefix}}HttpRequestWorker::sslDefaultConfiguration; QSslConfiguration *{{prefix}}HttpRequestWorker::sslDefaultConfiguration;
{{#cppNamespaceDeclarations}} {{#cppNamespaceDeclarations}}

View File

@ -63,6 +63,7 @@ public:
void setWorkingDirectory(const QString &path); void setWorkingDirectory(const QString &path);
{{prefix}}HttpFileElement getHttpFileElement(const QString &fieldname = QString()); {{prefix}}HttpFileElement getHttpFileElement(const QString &fieldname = QString());
QByteArray *getMultiPartField(const QString &fieldname = QString()); QByteArray *getMultiPartField(const QString &fieldname = QString());
void setCompressionEnabled(bool enable);
signals: signals:
void on_execution_finished({{prefix}}HttpRequestWorker *worker); void on_execution_finished({{prefix}}HttpRequestWorker *worker);
@ -73,8 +74,10 @@ private:
QMap<QString, QByteArray *> multiPartFields; QMap<QString, QByteArray *> multiPartFields;
QString workingDirectory; QString workingDirectory;
int _timeOut; int _timeOut;
bool isCompressionEnabled;
void on_manager_timeout(QNetworkReply *reply); void on_manager_timeout(QNetworkReply *reply);
void process_form_response(); void process_response(QNetworkReply *reply);
QByteArray decompress(const QByteArray& data);
private slots: private slots:
void on_manager_finished(QNetworkReply *reply); void on_manager_finished(QNetworkReply *reply);
}; };

View File

@ -14,7 +14,8 @@ namespace {{this}} {
_host(host), _host(host),
_port(port), _port(port),
_basePath(basePath), _basePath(basePath),
_timeOut(timeOut) {} _timeOut(timeOut),
_compress(false) {}
{{classname}}::~{{classname}}() { {{classname}}::~{{classname}}() {
} }
@ -47,6 +48,10 @@ void {{classname}}::addHeaders(const QString &key, const QString &value) {
defaultHeaders.insert(key, value); defaultHeaders.insert(key, value);
} }
void {{classname}}::enableContentCompression() {
_compress = true;
}
{{#operations}} {{#operations}}
{{#operation}} {{#operation}}
void {{classname}}::{{nickname}}({{#allParams}}const {{{dataType}}} &{{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}}) { void {{classname}}::{{nickname}}({{#allParams}}const {{{dataType}}} &{{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}}) {
@ -109,6 +114,7 @@ void {{classname}}::{{nickname}}({{#allParams}}const {{{dataType}}} &{{paramName
{{prefix}}HttpRequestWorker *worker = new {{prefix}}HttpRequestWorker(this); {{prefix}}HttpRequestWorker *worker = new {{prefix}}HttpRequestWorker(this);
worker->setTimeOut(_timeOut); worker->setTimeOut(_timeOut);
worker->setWorkingDirectory(_workingDirectory); worker->setWorkingDirectory(_workingDirectory);
worker->setCompressionEnabled(_compress);
{{prefix}}HttpRequestInput input(fullPath, "{{httpMethod}}"); {{prefix}}HttpRequestInput input(fullPath, "{{httpMethod}}");
{{#formParams}}{{^isFile}} {{#formParams}}{{^isFile}}
input.add_var("{{baseName}}", ::{{cppNamespace}}::toStringValue({{paramName}}));{{/isFile}}{{#isFile}} input.add_var("{{baseName}}", ::{{cppNamespace}}::toStringValue({{paramName}}));{{/isFile}}{{#isFile}}
@ -144,6 +150,7 @@ void {{classname}}::{{nickname}}Callback({{prefix}}HttpRequestWorker *worker) {
msg = QString("Success! %1 bytes").arg(worker->response.length()); msg = QString("Success! %1 bytes").arg(worker->response.length());
} else { } else {
msg = "Error: " + worker->error_str; msg = "Error: " + worker->error_str;
error_str = QString("%1, %2").arg(worker->error_str).arg(QString(worker->response));
} }
{{#returnType}} {{#returnType}}
{{#isListContainer}} {{#isListContainer}}

View File

@ -27,6 +27,7 @@ public:
void setTimeOut(const int timeOut); void setTimeOut(const int timeOut);
void setWorkingDirectory(const QString &path); void setWorkingDirectory(const QString &path);
void addHeaders(const QString &key, const QString &value); void addHeaders(const QString &key, const QString &value);
void enableContentCompression();
{{#operations}}{{#operation}} {{#operations}}{{#operation}}
void {{nickname}}({{#allParams}}const {{{dataType}}} &{{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}});{{/operation}}{{/operations}} void {{nickname}}({{#allParams}}const {{{dataType}}} &{{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}});{{/operation}}{{/operations}}
@ -37,6 +38,7 @@ private:
int _timeOut; int _timeOut;
QString _workingDirectory; QString _workingDirectory;
QMap<QString, QString> defaultHeaders; QMap<QString, QString> defaultHeaders;
bool _compress;
{{#operations}}{{#operation}} {{#operations}}{{#operation}}
void {{nickname}}Callback({{prefix}}HttpRequestWorker *worker);{{/operation}}{{/operations}} void {{nickname}}Callback({{prefix}}HttpRequestWorker *worker);{{/operation}}{{/operations}}

View File

@ -1 +1 @@
4.2.2-SNAPSHOT 4.2.3-SNAPSHOT

View File

@ -103,6 +103,10 @@ void PFXHttpRequestWorker::setWorkingDirectory(const QString &path) {
} }
} }
void PFXHttpRequestWorker::setCompressionEnabled(bool enable) {
isCompressionEnabled = enable;
}
QString PFXHttpRequestWorker::http_attribute_encode(QString attribute_name, QString input) { QString PFXHttpRequestWorker::http_attribute_encode(QString attribute_name, QString input) {
// result structure follows RFC 5987 // result structure follows RFC 5987
bool need_utf_encoding = false; bool need_utf_encoding = false;
@ -311,6 +315,10 @@ void PFXHttpRequestWorker::execute(PFXHttpRequestInput *input) {
request.setHeader(QNetworkRequest::ContentTypeHeader, "multipart/form-data; boundary=" + boundary); request.setHeader(QNetworkRequest::ContentTypeHeader, "multipart/form-data; boundary=" + boundary);
} }
if(isCompressionEnabled){
request.setRawHeader("Accept-Encoding", "deflate, gzip");
}
if (input->http_method == "GET") { if (input->http_method == "GET") {
reply = manager->get(request); reply = manager->get(request);
} else if (input->http_method == "POST") { } else if (input->http_method == "POST") {
@ -340,15 +348,14 @@ void PFXHttpRequestWorker::execute(PFXHttpRequestInput *input) {
void PFXHttpRequestWorker::on_manager_finished(QNetworkReply *reply) { void PFXHttpRequestWorker::on_manager_finished(QNetworkReply *reply) {
error_type = reply->error(); error_type = reply->error();
response = reply->readAll();
error_str = reply->errorString(); error_str = reply->errorString();
if (reply->rawHeaderPairs().count() > 0) { if (reply->rawHeaderPairs().count() > 0) {
for (const auto &item : reply->rawHeaderPairs()) { for (const auto &item : reply->rawHeaderPairs()) {
headers.insert(item.first, item.second); headers.insert(item.first, item.second);
} }
} }
process_response(reply);
reply->deleteLater(); reply->deleteLater();
process_form_response();
emit on_execution_finished(this); emit on_execution_finished(this);
} }
@ -362,7 +369,7 @@ void PFXHttpRequestWorker::on_manager_timeout(QNetworkReply *reply) {
emit on_execution_finished(this); emit on_execution_finished(this);
} }
void PFXHttpRequestWorker::process_form_response() { void PFXHttpRequestWorker::process_response(QNetworkReply *reply) {
if (getResponseHeaders().contains(QString("Content-Disposition"))) { if (getResponseHeaders().contains(QString("Content-Disposition"))) {
auto contentDisposition = getResponseHeaders().value(QString("Content-Disposition").toUtf8()).split(QString(";"), QString::SkipEmptyParts); auto contentDisposition = getResponseHeaders().value(QString("Content-Disposition").toUtf8()).split(QString(";"), QString::SkipEmptyParts);
auto contentType = auto contentType =
@ -376,18 +383,37 @@ void PFXHttpRequestWorker::process_form_response() {
} }
} }
PFXHttpFileElement felement; PFXHttpFileElement felement;
felement.saveToFile(QString(), workingDirectory + QDir::separator() + filename, filename, contentType, response.data()); felement.saveToFile(QString(), workingDirectory + QDir::separator() + filename, filename, contentType, reply->readAll());
files.insert(filename, felement); files.insert(filename, felement);
} }
} else if (getResponseHeaders().contains(QString("Content-Type"))) { } else if (getResponseHeaders().contains(QString("Content-Type"))) {
auto contentType = getResponseHeaders().value(QString("Content-Type").toUtf8()).split(QString(";"), QString::SkipEmptyParts); auto contentType = getResponseHeaders().value(QString("Content-Type").toUtf8()).split(QString(";"), QString::SkipEmptyParts);
if ((contentType.count() > 0) && (contentType.first() == QString("multipart/form-data"))) { if ((contentType.count() > 0) && (contentType.first() == QString("multipart/form-data"))) {
// TODO : Handle Multipart responses
} else { } else {
if(headers.contains("Content-Encoding")){
auto encoding = headers.value("Content-Encoding").split(QString(";"), QString::SkipEmptyParts);
if(encoding.count() > 0){
auto compressionTypes = encoding.first().split(',', QString::SkipEmptyParts);
if(compressionTypes.contains("gzip", Qt::CaseInsensitive) || compressionTypes.contains("deflate", Qt::CaseInsensitive)){
response = decompress(reply->readAll());
}
}
}
else {
response = reply->readAll();
}
} }
} }
} }
QByteArray PFXHttpRequestWorker::decompress(const QByteArray& data){
QByteArray result;
bool sts = false;
return sts ? result : QByteArray();
}
QSslConfiguration *PFXHttpRequestWorker::sslDefaultConfiguration; QSslConfiguration *PFXHttpRequestWorker::sslDefaultConfiguration;
} // namespace test_namespace } // namespace test_namespace

View File

@ -71,6 +71,7 @@ public:
void setWorkingDirectory(const QString &path); void setWorkingDirectory(const QString &path);
PFXHttpFileElement getHttpFileElement(const QString &fieldname = QString()); PFXHttpFileElement getHttpFileElement(const QString &fieldname = QString());
QByteArray *getMultiPartField(const QString &fieldname = QString()); QByteArray *getMultiPartField(const QString &fieldname = QString());
void setCompressionEnabled(bool enable);
signals: signals:
void on_execution_finished(PFXHttpRequestWorker *worker); void on_execution_finished(PFXHttpRequestWorker *worker);
@ -81,8 +82,10 @@ private:
QMap<QString, QByteArray *> multiPartFields; QMap<QString, QByteArray *> multiPartFields;
QString workingDirectory; QString workingDirectory;
int _timeOut; int _timeOut;
bool isCompressionEnabled;
void on_manager_timeout(QNetworkReply *reply); void on_manager_timeout(QNetworkReply *reply);
void process_form_response(); void process_response(QNetworkReply *reply);
QByteArray decompress(const QByteArray& data);
private slots: private slots:
void on_manager_finished(QNetworkReply *reply); void on_manager_finished(QNetworkReply *reply);
}; };

View File

@ -22,7 +22,8 @@ PFXPetApi::PFXPetApi(const QString &scheme, const QString &host, int port, const
_host(host), _host(host),
_port(port), _port(port),
_basePath(basePath), _basePath(basePath),
_timeOut(timeOut) {} _timeOut(timeOut),
_compress(false) {}
PFXPetApi::~PFXPetApi() { PFXPetApi::~PFXPetApi() {
} }
@ -55,6 +56,10 @@ void PFXPetApi::addHeaders(const QString &key, const QString &value) {
defaultHeaders.insert(key, value); defaultHeaders.insert(key, value);
} }
void PFXPetApi::enableContentCompression() {
_compress = true;
}
void PFXPetApi::addPet(const PFXPet &body) { void PFXPetApi::addPet(const PFXPet &body) {
QString fullPath = QString("%1://%2%3%4%5") QString fullPath = QString("%1://%2%3%4%5")
.arg(_scheme) .arg(_scheme)
@ -66,6 +71,7 @@ void PFXPetApi::addPet(const PFXPet &body) {
PFXHttpRequestWorker *worker = new PFXHttpRequestWorker(this); PFXHttpRequestWorker *worker = new PFXHttpRequestWorker(this);
worker->setTimeOut(_timeOut); worker->setTimeOut(_timeOut);
worker->setWorkingDirectory(_workingDirectory); worker->setWorkingDirectory(_workingDirectory);
worker->setCompressionEnabled(_compress);
PFXHttpRequestInput input(fullPath, "POST"); PFXHttpRequestInput input(fullPath, "POST");
QString output = body.asJson(); QString output = body.asJson();
@ -87,6 +93,7 @@ void PFXPetApi::addPetCallback(PFXHttpRequestWorker *worker) {
msg = QString("Success! %1 bytes").arg(worker->response.length()); msg = QString("Success! %1 bytes").arg(worker->response.length());
} else { } else {
msg = "Error: " + worker->error_str; msg = "Error: " + worker->error_str;
error_str = QString("%1, %2").arg(worker->error_str).arg(QString(worker->response));
} }
worker->deleteLater(); worker->deleteLater();
@ -113,6 +120,7 @@ void PFXPetApi::deletePet(const qint64 &pet_id, const QString &api_key) {
PFXHttpRequestWorker *worker = new PFXHttpRequestWorker(this); PFXHttpRequestWorker *worker = new PFXHttpRequestWorker(this);
worker->setTimeOut(_timeOut); worker->setTimeOut(_timeOut);
worker->setWorkingDirectory(_workingDirectory); worker->setWorkingDirectory(_workingDirectory);
worker->setCompressionEnabled(_compress);
PFXHttpRequestInput input(fullPath, "DELETE"); PFXHttpRequestInput input(fullPath, "DELETE");
if (api_key != nullptr) { if (api_key != nullptr) {
@ -135,6 +143,7 @@ void PFXPetApi::deletePetCallback(PFXHttpRequestWorker *worker) {
msg = QString("Success! %1 bytes").arg(worker->response.length()); msg = QString("Success! %1 bytes").arg(worker->response.length());
} else { } else {
msg = "Error: " + worker->error_str; msg = "Error: " + worker->error_str;
error_str = QString("%1, %2").arg(worker->error_str).arg(QString(worker->response));
} }
worker->deleteLater(); worker->deleteLater();
@ -196,6 +205,7 @@ void PFXPetApi::findPetsByStatus(const QList<QString> &status) {
PFXHttpRequestWorker *worker = new PFXHttpRequestWorker(this); PFXHttpRequestWorker *worker = new PFXHttpRequestWorker(this);
worker->setTimeOut(_timeOut); worker->setTimeOut(_timeOut);
worker->setWorkingDirectory(_workingDirectory); worker->setWorkingDirectory(_workingDirectory);
worker->setCompressionEnabled(_compress);
PFXHttpRequestInput input(fullPath, "GET"); PFXHttpRequestInput input(fullPath, "GET");
foreach (QString key, this->defaultHeaders.keys()) { input.headers.insert(key, this->defaultHeaders.value(key)); } foreach (QString key, this->defaultHeaders.keys()) { input.headers.insert(key, this->defaultHeaders.value(key)); }
@ -214,6 +224,7 @@ void PFXPetApi::findPetsByStatusCallback(PFXHttpRequestWorker *worker) {
msg = QString("Success! %1 bytes").arg(worker->response.length()); msg = QString("Success! %1 bytes").arg(worker->response.length());
} else { } else {
msg = "Error: " + worker->error_str; msg = "Error: " + worker->error_str;
error_str = QString("%1, %2").arg(worker->error_str).arg(QString(worker->response));
} }
QList<PFXPet> output; QList<PFXPet> output;
QString json(worker->response); QString json(worker->response);
@ -285,6 +296,7 @@ void PFXPetApi::findPetsByTags(const QList<QString> &tags) {
PFXHttpRequestWorker *worker = new PFXHttpRequestWorker(this); PFXHttpRequestWorker *worker = new PFXHttpRequestWorker(this);
worker->setTimeOut(_timeOut); worker->setTimeOut(_timeOut);
worker->setWorkingDirectory(_workingDirectory); worker->setWorkingDirectory(_workingDirectory);
worker->setCompressionEnabled(_compress);
PFXHttpRequestInput input(fullPath, "GET"); PFXHttpRequestInput input(fullPath, "GET");
foreach (QString key, this->defaultHeaders.keys()) { input.headers.insert(key, this->defaultHeaders.value(key)); } foreach (QString key, this->defaultHeaders.keys()) { input.headers.insert(key, this->defaultHeaders.value(key)); }
@ -303,6 +315,7 @@ void PFXPetApi::findPetsByTagsCallback(PFXHttpRequestWorker *worker) {
msg = QString("Success! %1 bytes").arg(worker->response.length()); msg = QString("Success! %1 bytes").arg(worker->response.length());
} else { } else {
msg = "Error: " + worker->error_str; msg = "Error: " + worker->error_str;
error_str = QString("%1, %2").arg(worker->error_str).arg(QString(worker->response));
} }
QList<PFXPet> output; QList<PFXPet> output;
QString json(worker->response); QString json(worker->response);
@ -339,6 +352,7 @@ void PFXPetApi::getPetById(const qint64 &pet_id) {
PFXHttpRequestWorker *worker = new PFXHttpRequestWorker(this); PFXHttpRequestWorker *worker = new PFXHttpRequestWorker(this);
worker->setTimeOut(_timeOut); worker->setTimeOut(_timeOut);
worker->setWorkingDirectory(_workingDirectory); worker->setWorkingDirectory(_workingDirectory);
worker->setCompressionEnabled(_compress);
PFXHttpRequestInput input(fullPath, "GET"); PFXHttpRequestInput input(fullPath, "GET");
foreach (QString key, this->defaultHeaders.keys()) { input.headers.insert(key, this->defaultHeaders.value(key)); } foreach (QString key, this->defaultHeaders.keys()) { input.headers.insert(key, this->defaultHeaders.value(key)); }
@ -357,6 +371,7 @@ void PFXPetApi::getPetByIdCallback(PFXHttpRequestWorker *worker) {
msg = QString("Success! %1 bytes").arg(worker->response.length()); msg = QString("Success! %1 bytes").arg(worker->response.length());
} else { } else {
msg = "Error: " + worker->error_str; msg = "Error: " + worker->error_str;
error_str = QString("%1, %2").arg(worker->error_str).arg(QString(worker->response));
} }
PFXPet output(QString(worker->response)); PFXPet output(QString(worker->response));
worker->deleteLater(); worker->deleteLater();
@ -381,6 +396,7 @@ void PFXPetApi::updatePet(const PFXPet &body) {
PFXHttpRequestWorker *worker = new PFXHttpRequestWorker(this); PFXHttpRequestWorker *worker = new PFXHttpRequestWorker(this);
worker->setTimeOut(_timeOut); worker->setTimeOut(_timeOut);
worker->setWorkingDirectory(_workingDirectory); worker->setWorkingDirectory(_workingDirectory);
worker->setCompressionEnabled(_compress);
PFXHttpRequestInput input(fullPath, "PUT"); PFXHttpRequestInput input(fullPath, "PUT");
QString output = body.asJson(); QString output = body.asJson();
@ -402,6 +418,7 @@ void PFXPetApi::updatePetCallback(PFXHttpRequestWorker *worker) {
msg = QString("Success! %1 bytes").arg(worker->response.length()); msg = QString("Success! %1 bytes").arg(worker->response.length());
} else { } else {
msg = "Error: " + worker->error_str; msg = "Error: " + worker->error_str;
error_str = QString("%1, %2").arg(worker->error_str).arg(QString(worker->response));
} }
worker->deleteLater(); worker->deleteLater();
@ -428,6 +445,7 @@ void PFXPetApi::updatePetWithForm(const qint64 &pet_id, const QString &name, con
PFXHttpRequestWorker *worker = new PFXHttpRequestWorker(this); PFXHttpRequestWorker *worker = new PFXHttpRequestWorker(this);
worker->setTimeOut(_timeOut); worker->setTimeOut(_timeOut);
worker->setWorkingDirectory(_workingDirectory); worker->setWorkingDirectory(_workingDirectory);
worker->setCompressionEnabled(_compress);
PFXHttpRequestInput input(fullPath, "POST"); PFXHttpRequestInput input(fullPath, "POST");
input.add_var("name", ::test_namespace::toStringValue(name)); input.add_var("name", ::test_namespace::toStringValue(name));
@ -448,6 +466,7 @@ void PFXPetApi::updatePetWithFormCallback(PFXHttpRequestWorker *worker) {
msg = QString("Success! %1 bytes").arg(worker->response.length()); msg = QString("Success! %1 bytes").arg(worker->response.length());
} else { } else {
msg = "Error: " + worker->error_str; msg = "Error: " + worker->error_str;
error_str = QString("%1, %2").arg(worker->error_str).arg(QString(worker->response));
} }
worker->deleteLater(); worker->deleteLater();
@ -474,6 +493,7 @@ void PFXPetApi::uploadFile(const qint64 &pet_id, const QString &additional_metad
PFXHttpRequestWorker *worker = new PFXHttpRequestWorker(this); PFXHttpRequestWorker *worker = new PFXHttpRequestWorker(this);
worker->setTimeOut(_timeOut); worker->setTimeOut(_timeOut);
worker->setWorkingDirectory(_workingDirectory); worker->setWorkingDirectory(_workingDirectory);
worker->setCompressionEnabled(_compress);
PFXHttpRequestInput input(fullPath, "POST"); PFXHttpRequestInput input(fullPath, "POST");
input.add_var("additionalMetadata", ::test_namespace::toStringValue(additional_metadata)); input.add_var("additionalMetadata", ::test_namespace::toStringValue(additional_metadata));
@ -494,6 +514,7 @@ void PFXPetApi::uploadFileCallback(PFXHttpRequestWorker *worker) {
msg = QString("Success! %1 bytes").arg(worker->response.length()); msg = QString("Success! %1 bytes").arg(worker->response.length());
} else { } else {
msg = "Error: " + worker->error_str; msg = "Error: " + worker->error_str;
error_str = QString("%1, %2").arg(worker->error_str).arg(QString(worker->response));
} }
PFXApiResponse output(QString(worker->response)); PFXApiResponse output(QString(worker->response));
worker->deleteLater(); worker->deleteLater();

View File

@ -37,6 +37,7 @@ public:
void setTimeOut(const int timeOut); void setTimeOut(const int timeOut);
void setWorkingDirectory(const QString &path); void setWorkingDirectory(const QString &path);
void addHeaders(const QString &key, const QString &value); void addHeaders(const QString &key, const QString &value);
void enableContentCompression();
void addPet(const PFXPet &body); void addPet(const PFXPet &body);
void deletePet(const qint64 &pet_id, const QString &api_key); void deletePet(const qint64 &pet_id, const QString &api_key);
@ -54,6 +55,7 @@ private:
int _timeOut; int _timeOut;
QString _workingDirectory; QString _workingDirectory;
QMap<QString, QString> defaultHeaders; QMap<QString, QString> defaultHeaders;
bool _compress;
void addPetCallback(PFXHttpRequestWorker *worker); void addPetCallback(PFXHttpRequestWorker *worker);
void deletePetCallback(PFXHttpRequestWorker *worker); void deletePetCallback(PFXHttpRequestWorker *worker);

View File

@ -22,7 +22,8 @@ PFXStoreApi::PFXStoreApi(const QString &scheme, const QString &host, int port, c
_host(host), _host(host),
_port(port), _port(port),
_basePath(basePath), _basePath(basePath),
_timeOut(timeOut) {} _timeOut(timeOut),
_compress(false) {}
PFXStoreApi::~PFXStoreApi() { PFXStoreApi::~PFXStoreApi() {
} }
@ -55,6 +56,10 @@ void PFXStoreApi::addHeaders(const QString &key, const QString &value) {
defaultHeaders.insert(key, value); defaultHeaders.insert(key, value);
} }
void PFXStoreApi::enableContentCompression() {
_compress = true;
}
void PFXStoreApi::deleteOrder(const QString &order_id) { void PFXStoreApi::deleteOrder(const QString &order_id) {
QString fullPath = QString("%1://%2%3%4%5") QString fullPath = QString("%1://%2%3%4%5")
.arg(_scheme) .arg(_scheme)
@ -69,6 +74,7 @@ void PFXStoreApi::deleteOrder(const QString &order_id) {
PFXHttpRequestWorker *worker = new PFXHttpRequestWorker(this); PFXHttpRequestWorker *worker = new PFXHttpRequestWorker(this);
worker->setTimeOut(_timeOut); worker->setTimeOut(_timeOut);
worker->setWorkingDirectory(_workingDirectory); worker->setWorkingDirectory(_workingDirectory);
worker->setCompressionEnabled(_compress);
PFXHttpRequestInput input(fullPath, "DELETE"); PFXHttpRequestInput input(fullPath, "DELETE");
foreach (QString key, this->defaultHeaders.keys()) { input.headers.insert(key, this->defaultHeaders.value(key)); } foreach (QString key, this->defaultHeaders.keys()) { input.headers.insert(key, this->defaultHeaders.value(key)); }
@ -87,6 +93,7 @@ void PFXStoreApi::deleteOrderCallback(PFXHttpRequestWorker *worker) {
msg = QString("Success! %1 bytes").arg(worker->response.length()); msg = QString("Success! %1 bytes").arg(worker->response.length());
} else { } else {
msg = "Error: " + worker->error_str; msg = "Error: " + worker->error_str;
error_str = QString("%1, %2").arg(worker->error_str).arg(QString(worker->response));
} }
worker->deleteLater(); worker->deleteLater();
@ -110,6 +117,7 @@ void PFXStoreApi::getInventory() {
PFXHttpRequestWorker *worker = new PFXHttpRequestWorker(this); PFXHttpRequestWorker *worker = new PFXHttpRequestWorker(this);
worker->setTimeOut(_timeOut); worker->setTimeOut(_timeOut);
worker->setWorkingDirectory(_workingDirectory); worker->setWorkingDirectory(_workingDirectory);
worker->setCompressionEnabled(_compress);
PFXHttpRequestInput input(fullPath, "GET"); PFXHttpRequestInput input(fullPath, "GET");
foreach (QString key, this->defaultHeaders.keys()) { input.headers.insert(key, this->defaultHeaders.value(key)); } foreach (QString key, this->defaultHeaders.keys()) { input.headers.insert(key, this->defaultHeaders.value(key)); }
@ -128,6 +136,7 @@ void PFXStoreApi::getInventoryCallback(PFXHttpRequestWorker *worker) {
msg = QString("Success! %1 bytes").arg(worker->response.length()); msg = QString("Success! %1 bytes").arg(worker->response.length());
} else { } else {
msg = "Error: " + worker->error_str; msg = "Error: " + worker->error_str;
error_str = QString("%1, %2").arg(worker->error_str).arg(QString(worker->response));
} }
QMap<QString, qint32> output; QMap<QString, qint32> output;
QString json(worker->response); QString json(worker->response);
@ -164,6 +173,7 @@ void PFXStoreApi::getOrderById(const qint64 &order_id) {
PFXHttpRequestWorker *worker = new PFXHttpRequestWorker(this); PFXHttpRequestWorker *worker = new PFXHttpRequestWorker(this);
worker->setTimeOut(_timeOut); worker->setTimeOut(_timeOut);
worker->setWorkingDirectory(_workingDirectory); worker->setWorkingDirectory(_workingDirectory);
worker->setCompressionEnabled(_compress);
PFXHttpRequestInput input(fullPath, "GET"); PFXHttpRequestInput input(fullPath, "GET");
foreach (QString key, this->defaultHeaders.keys()) { input.headers.insert(key, this->defaultHeaders.value(key)); } foreach (QString key, this->defaultHeaders.keys()) { input.headers.insert(key, this->defaultHeaders.value(key)); }
@ -182,6 +192,7 @@ void PFXStoreApi::getOrderByIdCallback(PFXHttpRequestWorker *worker) {
msg = QString("Success! %1 bytes").arg(worker->response.length()); msg = QString("Success! %1 bytes").arg(worker->response.length());
} else { } else {
msg = "Error: " + worker->error_str; msg = "Error: " + worker->error_str;
error_str = QString("%1, %2").arg(worker->error_str).arg(QString(worker->response));
} }
PFXOrder output(QString(worker->response)); PFXOrder output(QString(worker->response));
worker->deleteLater(); worker->deleteLater();
@ -206,6 +217,7 @@ void PFXStoreApi::placeOrder(const PFXOrder &body) {
PFXHttpRequestWorker *worker = new PFXHttpRequestWorker(this); PFXHttpRequestWorker *worker = new PFXHttpRequestWorker(this);
worker->setTimeOut(_timeOut); worker->setTimeOut(_timeOut);
worker->setWorkingDirectory(_workingDirectory); worker->setWorkingDirectory(_workingDirectory);
worker->setCompressionEnabled(_compress);
PFXHttpRequestInput input(fullPath, "POST"); PFXHttpRequestInput input(fullPath, "POST");
QString output = body.asJson(); QString output = body.asJson();
@ -227,6 +239,7 @@ void PFXStoreApi::placeOrderCallback(PFXHttpRequestWorker *worker) {
msg = QString("Success! %1 bytes").arg(worker->response.length()); msg = QString("Success! %1 bytes").arg(worker->response.length());
} else { } else {
msg = "Error: " + worker->error_str; msg = "Error: " + worker->error_str;
error_str = QString("%1, %2").arg(worker->error_str).arg(QString(worker->response));
} }
PFXOrder output(QString(worker->response)); PFXOrder output(QString(worker->response));
worker->deleteLater(); worker->deleteLater();

View File

@ -36,6 +36,7 @@ public:
void setTimeOut(const int timeOut); void setTimeOut(const int timeOut);
void setWorkingDirectory(const QString &path); void setWorkingDirectory(const QString &path);
void addHeaders(const QString &key, const QString &value); void addHeaders(const QString &key, const QString &value);
void enableContentCompression();
void deleteOrder(const QString &order_id); void deleteOrder(const QString &order_id);
void getInventory(); void getInventory();
@ -49,6 +50,7 @@ private:
int _timeOut; int _timeOut;
QString _workingDirectory; QString _workingDirectory;
QMap<QString, QString> defaultHeaders; QMap<QString, QString> defaultHeaders;
bool _compress;
void deleteOrderCallback(PFXHttpRequestWorker *worker); void deleteOrderCallback(PFXHttpRequestWorker *worker);
void getInventoryCallback(PFXHttpRequestWorker *worker); void getInventoryCallback(PFXHttpRequestWorker *worker);

View File

@ -22,7 +22,8 @@ PFXUserApi::PFXUserApi(const QString &scheme, const QString &host, int port, con
_host(host), _host(host),
_port(port), _port(port),
_basePath(basePath), _basePath(basePath),
_timeOut(timeOut) {} _timeOut(timeOut),
_compress(false) {}
PFXUserApi::~PFXUserApi() { PFXUserApi::~PFXUserApi() {
} }
@ -55,6 +56,10 @@ void PFXUserApi::addHeaders(const QString &key, const QString &value) {
defaultHeaders.insert(key, value); defaultHeaders.insert(key, value);
} }
void PFXUserApi::enableContentCompression() {
_compress = true;
}
void PFXUserApi::createUser(const PFXUser &body) { void PFXUserApi::createUser(const PFXUser &body) {
QString fullPath = QString("%1://%2%3%4%5") QString fullPath = QString("%1://%2%3%4%5")
.arg(_scheme) .arg(_scheme)
@ -66,6 +71,7 @@ void PFXUserApi::createUser(const PFXUser &body) {
PFXHttpRequestWorker *worker = new PFXHttpRequestWorker(this); PFXHttpRequestWorker *worker = new PFXHttpRequestWorker(this);
worker->setTimeOut(_timeOut); worker->setTimeOut(_timeOut);
worker->setWorkingDirectory(_workingDirectory); worker->setWorkingDirectory(_workingDirectory);
worker->setCompressionEnabled(_compress);
PFXHttpRequestInput input(fullPath, "POST"); PFXHttpRequestInput input(fullPath, "POST");
QString output = body.asJson(); QString output = body.asJson();
@ -87,6 +93,7 @@ void PFXUserApi::createUserCallback(PFXHttpRequestWorker *worker) {
msg = QString("Success! %1 bytes").arg(worker->response.length()); msg = QString("Success! %1 bytes").arg(worker->response.length());
} else { } else {
msg = "Error: " + worker->error_str; msg = "Error: " + worker->error_str;
error_str = QString("%1, %2").arg(worker->error_str).arg(QString(worker->response));
} }
worker->deleteLater(); worker->deleteLater();
@ -110,6 +117,7 @@ void PFXUserApi::createUsersWithArrayInput(const QList<PFXUser> &body) {
PFXHttpRequestWorker *worker = new PFXHttpRequestWorker(this); PFXHttpRequestWorker *worker = new PFXHttpRequestWorker(this);
worker->setTimeOut(_timeOut); worker->setTimeOut(_timeOut);
worker->setWorkingDirectory(_workingDirectory); worker->setWorkingDirectory(_workingDirectory);
worker->setCompressionEnabled(_compress);
PFXHttpRequestInput input(fullPath, "POST"); PFXHttpRequestInput input(fullPath, "POST");
QJsonDocument doc(::test_namespace::toJsonValue(body).toArray()); QJsonDocument doc(::test_namespace::toJsonValue(body).toArray());
@ -132,6 +140,7 @@ void PFXUserApi::createUsersWithArrayInputCallback(PFXHttpRequestWorker *worker)
msg = QString("Success! %1 bytes").arg(worker->response.length()); msg = QString("Success! %1 bytes").arg(worker->response.length());
} else { } else {
msg = "Error: " + worker->error_str; msg = "Error: " + worker->error_str;
error_str = QString("%1, %2").arg(worker->error_str).arg(QString(worker->response));
} }
worker->deleteLater(); worker->deleteLater();
@ -155,6 +164,7 @@ void PFXUserApi::createUsersWithListInput(const QList<PFXUser> &body) {
PFXHttpRequestWorker *worker = new PFXHttpRequestWorker(this); PFXHttpRequestWorker *worker = new PFXHttpRequestWorker(this);
worker->setTimeOut(_timeOut); worker->setTimeOut(_timeOut);
worker->setWorkingDirectory(_workingDirectory); worker->setWorkingDirectory(_workingDirectory);
worker->setCompressionEnabled(_compress);
PFXHttpRequestInput input(fullPath, "POST"); PFXHttpRequestInput input(fullPath, "POST");
QJsonDocument doc(::test_namespace::toJsonValue(body).toArray()); QJsonDocument doc(::test_namespace::toJsonValue(body).toArray());
@ -177,6 +187,7 @@ void PFXUserApi::createUsersWithListInputCallback(PFXHttpRequestWorker *worker)
msg = QString("Success! %1 bytes").arg(worker->response.length()); msg = QString("Success! %1 bytes").arg(worker->response.length());
} else { } else {
msg = "Error: " + worker->error_str; msg = "Error: " + worker->error_str;
error_str = QString("%1, %2").arg(worker->error_str).arg(QString(worker->response));
} }
worker->deleteLater(); worker->deleteLater();
@ -203,6 +214,7 @@ void PFXUserApi::deleteUser(const QString &username) {
PFXHttpRequestWorker *worker = new PFXHttpRequestWorker(this); PFXHttpRequestWorker *worker = new PFXHttpRequestWorker(this);
worker->setTimeOut(_timeOut); worker->setTimeOut(_timeOut);
worker->setWorkingDirectory(_workingDirectory); worker->setWorkingDirectory(_workingDirectory);
worker->setCompressionEnabled(_compress);
PFXHttpRequestInput input(fullPath, "DELETE"); PFXHttpRequestInput input(fullPath, "DELETE");
foreach (QString key, this->defaultHeaders.keys()) { input.headers.insert(key, this->defaultHeaders.value(key)); } foreach (QString key, this->defaultHeaders.keys()) { input.headers.insert(key, this->defaultHeaders.value(key)); }
@ -221,6 +233,7 @@ void PFXUserApi::deleteUserCallback(PFXHttpRequestWorker *worker) {
msg = QString("Success! %1 bytes").arg(worker->response.length()); msg = QString("Success! %1 bytes").arg(worker->response.length());
} else { } else {
msg = "Error: " + worker->error_str; msg = "Error: " + worker->error_str;
error_str = QString("%1, %2").arg(worker->error_str).arg(QString(worker->response));
} }
worker->deleteLater(); worker->deleteLater();
@ -247,6 +260,7 @@ void PFXUserApi::getUserByName(const QString &username) {
PFXHttpRequestWorker *worker = new PFXHttpRequestWorker(this); PFXHttpRequestWorker *worker = new PFXHttpRequestWorker(this);
worker->setTimeOut(_timeOut); worker->setTimeOut(_timeOut);
worker->setWorkingDirectory(_workingDirectory); worker->setWorkingDirectory(_workingDirectory);
worker->setCompressionEnabled(_compress);
PFXHttpRequestInput input(fullPath, "GET"); PFXHttpRequestInput input(fullPath, "GET");
foreach (QString key, this->defaultHeaders.keys()) { input.headers.insert(key, this->defaultHeaders.value(key)); } foreach (QString key, this->defaultHeaders.keys()) { input.headers.insert(key, this->defaultHeaders.value(key)); }
@ -265,6 +279,7 @@ void PFXUserApi::getUserByNameCallback(PFXHttpRequestWorker *worker) {
msg = QString("Success! %1 bytes").arg(worker->response.length()); msg = QString("Success! %1 bytes").arg(worker->response.length());
} else { } else {
msg = "Error: " + worker->error_str; msg = "Error: " + worker->error_str;
error_str = QString("%1, %2").arg(worker->error_str).arg(QString(worker->response));
} }
PFXUser output(QString(worker->response)); PFXUser output(QString(worker->response));
worker->deleteLater(); worker->deleteLater();
@ -301,6 +316,7 @@ void PFXUserApi::loginUser(const QString &username, const QString &password) {
PFXHttpRequestWorker *worker = new PFXHttpRequestWorker(this); PFXHttpRequestWorker *worker = new PFXHttpRequestWorker(this);
worker->setTimeOut(_timeOut); worker->setTimeOut(_timeOut);
worker->setWorkingDirectory(_workingDirectory); worker->setWorkingDirectory(_workingDirectory);
worker->setCompressionEnabled(_compress);
PFXHttpRequestInput input(fullPath, "GET"); PFXHttpRequestInput input(fullPath, "GET");
foreach (QString key, this->defaultHeaders.keys()) { input.headers.insert(key, this->defaultHeaders.value(key)); } foreach (QString key, this->defaultHeaders.keys()) { input.headers.insert(key, this->defaultHeaders.value(key)); }
@ -319,6 +335,7 @@ void PFXUserApi::loginUserCallback(PFXHttpRequestWorker *worker) {
msg = QString("Success! %1 bytes").arg(worker->response.length()); msg = QString("Success! %1 bytes").arg(worker->response.length());
} else { } else {
msg = "Error: " + worker->error_str; msg = "Error: " + worker->error_str;
error_str = QString("%1, %2").arg(worker->error_str).arg(QString(worker->response));
} }
QString output; QString output;
::test_namespace::fromStringValue(QString(worker->response), output); ::test_namespace::fromStringValue(QString(worker->response), output);
@ -344,6 +361,7 @@ void PFXUserApi::logoutUser() {
PFXHttpRequestWorker *worker = new PFXHttpRequestWorker(this); PFXHttpRequestWorker *worker = new PFXHttpRequestWorker(this);
worker->setTimeOut(_timeOut); worker->setTimeOut(_timeOut);
worker->setWorkingDirectory(_workingDirectory); worker->setWorkingDirectory(_workingDirectory);
worker->setCompressionEnabled(_compress);
PFXHttpRequestInput input(fullPath, "GET"); PFXHttpRequestInput input(fullPath, "GET");
foreach (QString key, this->defaultHeaders.keys()) { input.headers.insert(key, this->defaultHeaders.value(key)); } foreach (QString key, this->defaultHeaders.keys()) { input.headers.insert(key, this->defaultHeaders.value(key)); }
@ -362,6 +380,7 @@ void PFXUserApi::logoutUserCallback(PFXHttpRequestWorker *worker) {
msg = QString("Success! %1 bytes").arg(worker->response.length()); msg = QString("Success! %1 bytes").arg(worker->response.length());
} else { } else {
msg = "Error: " + worker->error_str; msg = "Error: " + worker->error_str;
error_str = QString("%1, %2").arg(worker->error_str).arg(QString(worker->response));
} }
worker->deleteLater(); worker->deleteLater();
@ -388,6 +407,7 @@ void PFXUserApi::updateUser(const QString &username, const PFXUser &body) {
PFXHttpRequestWorker *worker = new PFXHttpRequestWorker(this); PFXHttpRequestWorker *worker = new PFXHttpRequestWorker(this);
worker->setTimeOut(_timeOut); worker->setTimeOut(_timeOut);
worker->setWorkingDirectory(_workingDirectory); worker->setWorkingDirectory(_workingDirectory);
worker->setCompressionEnabled(_compress);
PFXHttpRequestInput input(fullPath, "PUT"); PFXHttpRequestInput input(fullPath, "PUT");
QString output = body.asJson(); QString output = body.asJson();
@ -409,6 +429,7 @@ void PFXUserApi::updateUserCallback(PFXHttpRequestWorker *worker) {
msg = QString("Success! %1 bytes").arg(worker->response.length()); msg = QString("Success! %1 bytes").arg(worker->response.length());
} else { } else {
msg = "Error: " + worker->error_str; msg = "Error: " + worker->error_str;
error_str = QString("%1, %2").arg(worker->error_str).arg(QString(worker->response));
} }
worker->deleteLater(); worker->deleteLater();

View File

@ -36,6 +36,7 @@ public:
void setTimeOut(const int timeOut); void setTimeOut(const int timeOut);
void setWorkingDirectory(const QString &path); void setWorkingDirectory(const QString &path);
void addHeaders(const QString &key, const QString &value); void addHeaders(const QString &key, const QString &value);
void enableContentCompression();
void createUser(const PFXUser &body); void createUser(const PFXUser &body);
void createUsersWithArrayInput(const QList<PFXUser> &body); void createUsersWithArrayInput(const QList<PFXUser> &body);
@ -53,6 +54,7 @@ private:
int _timeOut; int _timeOut;
QString _workingDirectory; QString _workingDirectory;
QMap<QString, QString> defaultHeaders; QMap<QString, QString> defaultHeaders;
bool _compress;
void createUserCallback(PFXHttpRequestWorker *worker); void createUserCallback(PFXHttpRequestWorker *worker);
void createUsersWithArrayInputCallback(PFXHttpRequestWorker *worker); void createUsersWithArrayInputCallback(PFXHttpRequestWorker *worker);