File indexing completed on 2024-05-12 05:22:22

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 "revisionmodifyjob.h"
0010 #include "driveservice.h"
0011 #include "revision.h"
0012 #include "utils.h"
0013 
0014 #include <QNetworkReply>
0015 #include <QNetworkRequest>
0016 
0017 using namespace KGAPI2;
0018 using namespace KGAPI2::Drive;
0019 
0020 class Q_DECL_HIDDEN RevisionModifyJob::Private
0021 {
0022 public:
0023     Private(RevisionModifyJob *parent);
0024     void processNext();
0025 
0026     QString fileId;
0027     RevisionsList revisions;
0028 
0029 private:
0030     RevisionModifyJob *const q;
0031 };
0032 
0033 RevisionModifyJob::Private::Private(RevisionModifyJob *parent)
0034     : q(parent)
0035 {
0036 }
0037 
0038 void RevisionModifyJob::Private::processNext()
0039 {
0040     if (revisions.isEmpty()) {
0041         q->emitFinished();
0042         return;
0043     }
0044 
0045     const RevisionPtr revision = revisions.takeFirst();
0046     const QUrl url = DriveService::modifyRevisionUrl(fileId, revision->id());
0047 
0048     QNetworkRequest request(url);
0049 
0050     const QByteArray rawData = Revision::toJSON(revision);
0051     q->enqueueRequest(request, rawData, QStringLiteral("application/json"));
0052 }
0053 
0054 RevisionModifyJob::RevisionModifyJob(const QString &fileId, const RevisionPtr &revision, const AccountPtr &account, QObject *parent)
0055     : ModifyJob(account, parent)
0056     , d(new Private(this))
0057 {
0058     d->fileId = fileId;
0059     d->revisions << revision;
0060 }
0061 
0062 RevisionModifyJob::RevisionModifyJob(const QString &fileId, const RevisionsList &revisions, const AccountPtr &account, QObject *parent)
0063     : ModifyJob(account, parent)
0064     , d(new Private(this))
0065 {
0066     d->fileId = fileId;
0067     d->revisions << revisions;
0068 }
0069 
0070 RevisionModifyJob::~RevisionModifyJob()
0071 {
0072     delete d;
0073 }
0074 
0075 void RevisionModifyJob::start()
0076 {
0077     d->processNext();
0078 }
0079 
0080 ObjectsList RevisionModifyJob::handleReplyWithItems(const QNetworkReply *reply, const QByteArray &rawData)
0081 {
0082     const QString contentType = reply->header(QNetworkRequest::ContentTypeHeader).toString();
0083     ContentType ct = Utils::stringToContentType(contentType);
0084     ObjectsList items;
0085     if (ct == KGAPI2::JSON) {
0086         items << Revision::fromJSON(rawData);
0087     } else {
0088         setError(KGAPI2::InvalidResponse);
0089         setErrorString(tr("Invalid response content type"));
0090         emitFinished();
0091     }
0092 
0093     // Enqueue next item or finish
0094     d->processNext();
0095 
0096     return items;
0097 }
0098 
0099 #include "moc_revisionmodifyjob.cpp"