File indexing completed on 2024-05-12 05:22:15
0001 /* 0002 * This file is part of LibKGAPI library 0003 * 0004 * SPDX-FileCopyrightText: 2013 Daniel Vrátil <dvratil@redhat.com> 0005 * 0006 * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0007 */ 0008 0009 #include "modifyjob.h" 0010 #include "debug.h" 0011 #include "object.h" 0012 0013 #include <QBuffer> 0014 #include <QNetworkAccessManager> 0015 #include <QNetworkRequest> 0016 0017 using namespace KGAPI2; 0018 0019 class Q_DECL_HIDDEN ModifyJob::Private 0020 { 0021 public: 0022 ObjectsList items; 0023 QBuffer buffer; 0024 }; 0025 0026 ModifyJob::ModifyJob(QObject *parent) 0027 : Job(parent) 0028 , d(new Private) 0029 { 0030 } 0031 0032 ModifyJob::ModifyJob(const AccountPtr &account, QObject *parent) 0033 : Job(account, parent) 0034 , d(new Private) 0035 { 0036 } 0037 0038 ModifyJob::~ModifyJob() 0039 { 0040 delete d; 0041 } 0042 0043 ObjectsList ModifyJob::items() const 0044 { 0045 return d->items; 0046 } 0047 0048 void ModifyJob::dispatchRequest(QNetworkAccessManager *accessManager, const QNetworkRequest &request, const QByteArray &data, const QString &contentType) 0049 { 0050 QNetworkRequest r = request; 0051 if (!r.hasRawHeader("Content-Type")) { 0052 r.setHeader(QNetworkRequest::ContentTypeHeader, contentType); 0053 } 0054 0055 if (!r.hasRawHeader("If-Match")) { 0056 r.setRawHeader("If-Match", "*"); 0057 } 0058 0059 // Note: there is a problem with PUT when using QNAM - it 0060 // doesn't transfer the body correctly. 0061 // Using sendCustomRequest() works just fine. 0062 // accessManager->put(r, data); 0063 if (!data.isEmpty()) { 0064 r.setHeader(QNetworkRequest::ContentLengthHeader, data.size()); 0065 0066 d->buffer.close(); 0067 d->buffer.setData(data); 0068 d->buffer.open(QIODevice::ReadOnly); 0069 accessManager->sendCustomRequest(r, "PUT", &d->buffer); 0070 } else { 0071 accessManager->sendCustomRequest(r, "PUT"); 0072 } 0073 } 0074 0075 void ModifyJob::handleReply(const QNetworkReply *reply, const QByteArray &rawData) 0076 { 0077 d->buffer.close(); 0078 d->items << handleReplyWithItems(reply, rawData); 0079 } 0080 0081 void ModifyJob::aboutToStart() 0082 { 0083 d->items.clear(); 0084 0085 Job::aboutToStart(); 0086 } 0087 0088 ObjectsList ModifyJob::handleReplyWithItems(const QNetworkReply *reply, const QByteArray &rawData) 0089 { 0090 Q_UNUSED(reply) 0091 Q_UNUSED(rawData) 0092 0093 return ObjectsList(); 0094 } 0095 0096 #include "moc_modifyjob.cpp"