File indexing completed on 2024-05-12 09:23:52
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"