File indexing completed on 2024-04-28 05:19:53

0001 /*
0002  * SPDX-FileCopyrightText: 2018 Daniel Vrátil <dvratil@kde.org>
0003  *
0004  * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0005  */
0006 
0007 #include "fakenetworkreply.h"
0008 #include "types.h"
0009 
0010 FakeNetworkReply::FakeNetworkReply(const FakeNetworkAccessManager::Scenario &scenario)
0011     : QNetworkReply()
0012 {
0013     setUrl(scenario.requestUrl);
0014     setOperation(scenario.requestMethod);
0015     setAttribute(QNetworkRequest::HttpStatusCodeAttribute, scenario.responseCode);
0016     setHeader(QNetworkRequest::ContentLengthHeader, scenario.responseData.size());
0017     if (scenario.responseData.startsWith('<')) {
0018         setHeader(QNetworkRequest::ContentTypeHeader, QStringLiteral("application/atom+xml"));
0019     } else if (scenario.responseData.startsWith('{')) {
0020         setHeader(QNetworkRequest::ContentTypeHeader, QStringLiteral("application/json"));
0021     } else {
0022         setHeader(QNetworkRequest::ContentTypeHeader, QStringLiteral("text/plain"));
0023     }
0024     for (const auto &header : std::as_const(scenario.responseHeaders)) {
0025         setRawHeader(header.first, header.second);
0026     }
0027 
0028     if (scenario.responseCode == KGAPI2::TemporarilyMoved) {
0029         setHeader(QNetworkRequest::LocationHeader, QString::fromUtf8(scenario.responseData));
0030     } else {
0031         mBuffer.setData(scenario.responseData);
0032     }
0033     mBuffer.open(QIODevice::ReadOnly);
0034 
0035     open(QIODevice::ReadOnly);
0036     setFinished(true);
0037     QMetaObject::invokeMethod(this, "readyRead", Qt::QueuedConnection);
0038     QMetaObject::invokeMethod(this, "finished", Qt::QueuedConnection);
0039 }
0040 
0041 FakeNetworkReply::FakeNetworkReply(QNetworkAccessManager::Operation method, const QNetworkRequest &originalRequest)
0042     : QNetworkReply()
0043 {
0044     setOperation(method);
0045     setUrl(originalRequest.url());
0046 
0047     open(QIODevice::ReadOnly);
0048     setFinished(true);
0049     QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection, Q_ARG(QNetworkReply::NetworkError, QNetworkReply::UnknownServerError));
0050     QMetaObject::invokeMethod(this, "finished", Qt::QueuedConnection);
0051 }
0052 
0053 void FakeNetworkReply::abort()
0054 {
0055     // NOOP
0056 }
0057 
0058 bool FakeNetworkReply::atEnd() const
0059 {
0060     return mBuffer.atEnd();
0061 }
0062 
0063 qint64 FakeNetworkReply::bytesAvailable() const
0064 {
0065     return mBuffer.bytesAvailable();
0066 }
0067 
0068 bool FakeNetworkReply::canReadLine() const
0069 {
0070     return mBuffer.canReadLine();
0071 }
0072 
0073 void FakeNetworkReply::close()
0074 {
0075     mBuffer.close();
0076 }
0077 
0078 qint64 FakeNetworkReply::pos() const
0079 {
0080     return mBuffer.pos();
0081 }
0082 
0083 qint64 FakeNetworkReply::size() const
0084 {
0085     return mBuffer.size();
0086 }
0087 
0088 qint64 FakeNetworkReply::readData(char *data, qint64 maxLen)
0089 {
0090     return mBuffer.read(data, maxLen);
0091 }
0092 
0093 qint64 FakeNetworkReply::writeData(const char *data, qint64 len)
0094 {
0095     return mBuffer.write(data, len);
0096 }
0097 
0098 #include "moc_fakenetworkreply.cpp"