From 18962c32ab1753ca8feebc1afb14459ae2c6d665 Mon Sep 17 00:00:00 2001 From: Rajesh Kumar Mallah Date: Mon, 22 Apr 2024 00:57:47 +0530 Subject: [PATCH 1/2] Qt6 support --- cookiejar.cpp | 16 ++++++++++++++++ imageutils.cpp | 3 ++- response.cpp | 30 ++++++++++++++++++++++++++++-- ssl.cpp | 19 ++++++++++++++++++- 4 files changed, 64 insertions(+), 4 deletions(-) diff --git a/cookiejar.cpp b/cookiejar.cpp index cbc53b7..4696ab0 100644 --- a/cookiejar.cpp +++ b/cookiejar.cpp @@ -5,6 +5,9 @@ #include #include #include +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) +#include +#endif #include #include "cookiejar.h" @@ -58,12 +61,21 @@ void CookieJar::save() const } QTextStream out(&file); + +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + out.setEncoding( QStringConverter::Utf8 ); +#else out.setCodec("UTF-8"); +#endif QList cookies = allCookies(); foreach (QNetworkCookie c, cookies) { if (m_persistSessions || !c.isSessionCookie()) +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + out << c.toRawForm() << Qt::endl; +#else out << c.toRawForm() << endl; +#endif } file.close(); @@ -78,7 +90,11 @@ void CookieJar::load() } QTextStream in(&file); +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + in.setEncoding( QStringConverter::Utf8 ); +#else in.setCodec("UTF-8"); +#endif QList cookies; while (!in.atEnd()) { diff --git a/imageutils.cpp b/imageutils.cpp index b76b00a..e3689e6 100644 --- a/imageutils.cpp +++ b/imageutils.cpp @@ -30,7 +30,8 @@ Image::Image(QQmlEngine *engine, const QString &filename) : engine->setObjectOwnership(this, QQmlEngine::JavaScriptOwnership); if (filename.startsWith(QStringLiteral("data:"))) { int comma = filename.indexOf(QChar(',')); - QStringRef data = filename.midRef(comma+1); + // QStringRef data = filename.midRef(comma+1); + QString data = filename.mid(comma+1); QBuffer *buffer = new QBuffer(this); buffer->setData(QByteArray::fromBase64(data.toLatin1())); m_reader = new QImageReader(buffer); diff --git a/response.cpp b/response.cpp index d6f1d19..ce8f6c7 100644 --- a/response.cpp +++ b/response.cpp @@ -1,8 +1,20 @@ // Copyright 2016 Cutehacks AS. All rights reserved. // License can be found in the LICENSE file. + +#include + +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) +#include +#include +#include +#else #include #include +#endif + + + #include #include #include @@ -19,16 +31,30 @@ ResponsePrototype::ResponsePrototype(QQmlEngine *engine, QNetworkReply *reply, i { QString type = m_reply->header(QNetworkRequest::ContentTypeHeader).toString(); +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + QRegularExpression charsetRegexp(".*charset=(.*)[\\s]*", QRegularExpression::CaseInsensitiveOption ); + QRegularExpressionMatch matchResult = charsetRegexp.match(type) ; + if ( matchResult.hasMatch() ) { + m_charset = matchResult.captured(1); + } +#else QRegExp charsetRegexp(".*charset=(.*)[\\s]*", Qt::CaseInsensitive, QRegExp::RegExp2); if (charsetRegexp.exactMatch(type)) { m_charset = charsetRegexp.capturedTexts().at(1); } +#endif + if (m_reply->isReadable()) { QByteArray data = m_reply->readAll(); - QTextCodec *text = QTextCodec::codecForName(m_charset.toLatin1()); - m_text = text ? text->makeDecoder()->toUnicode(data) : QString::fromUtf8(data); +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + QStringDecoder decoder = QStringDecoder ( qUtf8Printable(m_charset) ); + m_text = decoder.isValid() ? decoder.decode(data) : QString::fromUtf8(data); +#else + QTextCodec *text = QTextCodec::codecForName(m_charset.toLatin1()); + m_text = text ? text->makeDecoder()->toUnicode(data) : QString::fromUtf8(data); +#endif switch (responseType) { diff --git a/ssl.cpp b/ssl.cpp index 1017faa..5128c21 100644 --- a/ssl.cpp +++ b/ssl.cpp @@ -104,16 +104,33 @@ QJSValue SecureConnectEvent::getPeerCertificate() QString SecureConnectEvent::getProtocol() { switch (m_ssl.sessionProtocol()) { + +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) case QSsl::SslV3: - return QStringLiteral("SSLv3"); + return QStringLiteral("SSLv3"); + case QSsl::TlsV1_0: + return QStringLiteral("TLSv1"); + case QSsl::TlsV1_1: + return QStringLiteral("TLSv1.1"); + case QSsl::TlsV1_2: + return QStringLiteral("TLSv1.2"); + default: + return QStringLiteral("unknown"); +#else case QSsl::TlsV1_0: return QStringLiteral("TLSv1"); case QSsl::TlsV1_1: return QStringLiteral("TLSv1.1"); case QSsl::TlsV1_2: return QStringLiteral("TLSv1.2"); + case QSsl::TlsV1_3: + return QStringLiteral("TLSv1.3"); + case QSsl::TlsV1_3OrLater: + return QStringLiteral("TLSv1.3 or later"); default: return QStringLiteral("unknown"); +#endif + } } From cd4c7b8b3982280fc91d38fe6b7918318d079763 Mon Sep 17 00:00:00 2001 From: Rajesh Kumar Mallah Date: Mon, 7 Oct 2024 00:47:12 +0530 Subject: [PATCH 2/2] added CMakeLists.txt so that this can be included. --- CMakeLists.txt | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..3c2e35a --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,37 @@ +#logicmodule/CMakeLists.txt +project(duperagent VERSION 0.1 LANGUAGES CXX) + +qt_add_library(${PROJECT_NAME} SHARED + qmldir + ) + + +set(HEADERS duperagent.h qpm.h request.h response.h serialization.h + jsvalueiterator.h config.h cookiejar.h promise.h + promisemodule.h networkactivityindicator.h imageutils.h + multipartsource.h ssl.h +) + +set(SOURCES duperagent.cpp request.cpp response.cpp serialization.cpp + config.cpp cookiejar.cpp promise.cpp promisemodule.cpp + networkactivityindicator.cpp imageutils.cpp multipartsource.cpp + ssl.cpp) + +qt6_add_qml_module(${PROJECT_NAME} + URI duperagent + VERSION 1.0 + NO_PLUGIN + RESOURCE_PREFIX "/qt/qml/" + SOURCES ${HEADERS} ${SOURCES} +) + +target_link_libraries(${PROJECT_NAME} PUBLIC + Qt6::Core + Qt6::Gui + Qt6::Qml + Qt6::Quick +) + +target_include_directories(${PROJECT_NAME} + PUBLIC +)