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"