File indexing completed on 2024-05-12 05:22:17
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 "childreferencecreatejob.h" 0010 #include "childreference.h" 0011 #include "driveservice.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 ChildReferenceCreateJob::Private 0022 { 0023 public: 0024 Private(ChildReferenceCreateJob *parent); 0025 void processNext(); 0026 0027 QString folderId; 0028 ChildReferencesList references; 0029 bool supportsAllDrives = true; 0030 0031 private: 0032 ChildReferenceCreateJob *const q; 0033 }; 0034 0035 ChildReferenceCreateJob::Private::Private(ChildReferenceCreateJob *parent) 0036 : q(parent) 0037 { 0038 } 0039 0040 void ChildReferenceCreateJob::Private::processNext() 0041 { 0042 if (references.isEmpty()) { 0043 q->emitFinished(); 0044 return; 0045 } 0046 0047 const ChildReferencePtr reference = references.takeFirst(); 0048 QUrl url = DriveService::createChildReference(folderId); 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 = ChildReference::toJSON(reference); 0057 q->enqueueRequest(request, rawData, QStringLiteral("application/json")); 0058 } 0059 0060 ChildReferenceCreateJob::ChildReferenceCreateJob(const QString &folderId, const QString &childId, const AccountPtr &account, QObject *parent) 0061 : CreateJob(account, parent) 0062 , d(new Private(this)) 0063 { 0064 d->folderId = folderId; 0065 d->references << ChildReferencePtr(new ChildReference(childId)); 0066 } 0067 0068 ChildReferenceCreateJob::ChildReferenceCreateJob(const QString &folderId, const QStringList &childrenIds, const AccountPtr &account, QObject *parent) 0069 : CreateJob(account, parent) 0070 , d(new Private(this)) 0071 { 0072 d->folderId = folderId; 0073 for (const QString &childId : std::as_const(childrenIds)) { 0074 d->references << ChildReferencePtr(new ChildReference(childId)); 0075 } 0076 } 0077 0078 ChildReferenceCreateJob::ChildReferenceCreateJob(const QString &folderId, const ChildReferencePtr &reference, const AccountPtr &account, QObject *parent) 0079 : CreateJob(account, parent) 0080 , d(new Private(this)) 0081 { 0082 d->folderId = folderId; 0083 d->references << reference; 0084 } 0085 0086 ChildReferenceCreateJob::ChildReferenceCreateJob(const QString &folderId, const ChildReferencesList &references, const AccountPtr &account, QObject *parent) 0087 : CreateJob(account, parent) 0088 , d(new Private(this)) 0089 { 0090 d->folderId = folderId; 0091 d->references << references; 0092 } 0093 0094 ChildReferenceCreateJob::~ChildReferenceCreateJob() 0095 { 0096 delete d; 0097 } 0098 0099 bool ChildReferenceCreateJob::supportsAllDrives() const 0100 { 0101 return d->supportsAllDrives; 0102 } 0103 0104 void ChildReferenceCreateJob::setSupportsAllDrives(bool supportsAllDrives) 0105 { 0106 d->supportsAllDrives = supportsAllDrives; 0107 } 0108 0109 void ChildReferenceCreateJob::start() 0110 { 0111 d->processNext(); 0112 } 0113 0114 ObjectsList ChildReferenceCreateJob::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 << ChildReference::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_childreferencecreatejob.cpp"