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"