File indexing completed on 2024-05-12 05:22:21
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 "parentreferencecreatejob.h" 0010 #include "driveservice.h" 0011 #include "parentreference.h" 0012 #include "utils.h" 0013 0014 #include <QNetworkReply> 0015 #include <QNetworkRequest> 0016 #include <QUrlQuery> 0017 0018 using namespace KGAPI2; 0019 using namespace KGAPI2::Drive; 0020 0021 class Q_DECL_HIDDEN ParentReferenceCreateJob::Private 0022 { 0023 public: 0024 Private(ParentReferenceCreateJob *parent); 0025 void processNext(); 0026 bool supportsAllDrives = true; 0027 0028 QString fileId; 0029 ParentReferencesList references; 0030 0031 private: 0032 ParentReferenceCreateJob *const q; 0033 }; 0034 0035 ParentReferenceCreateJob::Private::Private(ParentReferenceCreateJob *parent) 0036 : q(parent) 0037 { 0038 } 0039 0040 void ParentReferenceCreateJob::Private::processNext() 0041 { 0042 if (references.isEmpty()) { 0043 q->emitFinished(); 0044 return; 0045 } 0046 0047 const ParentReferencePtr reference = references.takeFirst(); 0048 QUrl url = DriveService::createParentReferenceUrl(fileId); 0049 0050 QUrlQuery withDriveSupportQuery(url); 0051 withDriveSupportQuery.addQueryItem(QStringLiteral("supportsAllDrives"), Utils::bool2Str(supportsAllDrives)); 0052 url.setQuery(withDriveSupportQuery); 0053 0054 QNetworkRequest request(url); 0055 0056 const QByteArray rawData = ParentReference::toJSON(reference); 0057 q->enqueueRequest(request, rawData, QStringLiteral("application/json")); 0058 } 0059 0060 ParentReferenceCreateJob::ParentReferenceCreateJob(const QString &fileId, const QString &parentId, const AccountPtr &account, QObject *parent) 0061 : CreateJob(account, parent) 0062 , d(new Private(this)) 0063 { 0064 d->fileId = fileId; 0065 d->references << ParentReferencePtr(new ParentReference(parentId)); 0066 } 0067 0068 ParentReferenceCreateJob::ParentReferenceCreateJob(const QString &fileId, const QStringList &parentsIds, const AccountPtr &account, QObject *parent) 0069 : CreateJob(account, parent) 0070 , d(new Private(this)) 0071 { 0072 d->fileId = fileId; 0073 for (const QString &parentId : std::as_const(parentsIds)) { 0074 d->references << ParentReferencePtr(new ParentReference(parentId)); 0075 } 0076 } 0077 0078 ParentReferenceCreateJob::ParentReferenceCreateJob(const QString &fileId, const ParentReferencePtr &reference, const AccountPtr &account, QObject *parent) 0079 : CreateJob(account, parent) 0080 , d(new Private(this)) 0081 { 0082 d->fileId = fileId; 0083 d->references << reference; 0084 } 0085 0086 ParentReferenceCreateJob::ParentReferenceCreateJob(const QString &fileId, const ParentReferencesList &references, const AccountPtr &account, QObject *parent) 0087 : CreateJob(account, parent) 0088 , d(new Private(this)) 0089 { 0090 d->fileId = fileId; 0091 d->references << references; 0092 } 0093 0094 ParentReferenceCreateJob::~ParentReferenceCreateJob() 0095 { 0096 delete d; 0097 } 0098 0099 bool ParentReferenceCreateJob::supportsAllDrives() const 0100 { 0101 return d->supportsAllDrives; 0102 } 0103 0104 void ParentReferenceCreateJob::setSupportsAllDrives(bool supportsAllDrives) 0105 { 0106 d->supportsAllDrives = supportsAllDrives; 0107 } 0108 0109 void ParentReferenceCreateJob::start() 0110 { 0111 d->processNext(); 0112 } 0113 0114 ObjectsList ParentReferenceCreateJob::handleReplyWithItems(const QNetworkReply *reply, const QByteArray &rawData) 0115 { 0116 const QString contentType = reply->header(QNetworkRequest::ContentTypeHeader).toString(); 0117 ContentType ct = Utils::stringToContentType(contentType); 0118 ObjectsList items; 0119 if (ct == KGAPI2::JSON) { 0120 items << ParentReference::fromJSON(rawData); 0121 } else { 0122 setError(KGAPI2::InvalidResponse); 0123 setErrorString(tr("Invalid response content type")); 0124 emitFinished(); 0125 } 0126 0127 // Enqueue next item or finish 0128 d->processNext(); 0129 0130 return items; 0131 } 0132 0133 #include "moc_parentreferencecreatejob.cpp"