File indexing completed on 2024-05-12 05:22:23
0001 /* 0002 * This file is part of LibKGAPI library 0003 * 0004 * SPDX-FileCopyrightText: 2019 David Barchiesi <david@barchie.si> 0005 * 0006 * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0007 */ 0008 0009 #include "teamdrivecreatejob.h" 0010 #include "driveservice.h" 0011 #include "teamdrive.h" 0012 #include "utils.h" 0013 0014 #include <QNetworkReply> 0015 #include <QNetworkRequest> 0016 #include <QUrlQuery> 0017 0018 namespace 0019 { 0020 static const QString RequestIdParam = QStringLiteral("requestId"); 0021 } 0022 using namespace KGAPI2; 0023 using namespace KGAPI2::Drive; 0024 0025 class Q_DECL_HIDDEN TeamdriveCreateJob::Private 0026 { 0027 public: 0028 Private(TeamdriveCreateJob *parent); 0029 void processNext(); 0030 0031 TeamdrivesList teamdrives; 0032 QString requestId; 0033 0034 private: 0035 TeamdriveCreateJob *const q; 0036 }; 0037 0038 TeamdriveCreateJob::Private::Private(TeamdriveCreateJob *parent) 0039 : q(parent) 0040 { 0041 } 0042 0043 void TeamdriveCreateJob::Private::processNext() 0044 { 0045 if (teamdrives.isEmpty()) { 0046 q->emitFinished(); 0047 return; 0048 } 0049 0050 const TeamdrivePtr teamdrive = teamdrives.takeFirst(); 0051 0052 QUrl url = DriveService::fetchTeamdrivesUrl(); 0053 0054 QUrlQuery query(url); 0055 if (!requestId.isEmpty()) { 0056 query.addQueryItem(RequestIdParam, requestId); 0057 } 0058 url.setQuery(query); 0059 0060 QNetworkRequest request(url); 0061 0062 const QByteArray rawData = Teamdrive::toJSON(teamdrive); 0063 q->enqueueRequest(request, rawData, QStringLiteral("application/json")); 0064 } 0065 0066 TeamdriveCreateJob::TeamdriveCreateJob(const QString &requestId, const TeamdrivePtr &teamdrive, const AccountPtr &account, QObject *parent) 0067 : CreateJob(account, parent) 0068 , d(new Private(this)) 0069 { 0070 d->requestId = requestId; 0071 d->teamdrives << teamdrive; 0072 } 0073 0074 TeamdriveCreateJob::TeamdriveCreateJob(const QString &requestId, const TeamdrivesList &teamdrives, const AccountPtr &account, QObject *parent) 0075 : CreateJob(account, parent) 0076 , d(new Private(this)) 0077 { 0078 d->requestId = requestId; 0079 d->teamdrives = teamdrives; 0080 } 0081 0082 TeamdriveCreateJob::~TeamdriveCreateJob() = default; 0083 0084 QString TeamdriveCreateJob::requestId() const 0085 { 0086 return d->requestId; 0087 } 0088 0089 void TeamdriveCreateJob::start() 0090 { 0091 d->processNext(); 0092 } 0093 0094 ObjectsList TeamdriveCreateJob::handleReplyWithItems(const QNetworkReply *reply, const QByteArray &rawData) 0095 { 0096 const QString contentType = reply->header(QNetworkRequest::ContentTypeHeader).toString(); 0097 ContentType ct = Utils::stringToContentType(contentType); 0098 ObjectsList items; 0099 if (ct == KGAPI2::JSON) { 0100 items << Teamdrive::fromJSON(rawData); 0101 } else { 0102 setError(KGAPI2::InvalidResponse); 0103 setErrorString(tr("Invalid response content type")); 0104 emitFinished(); 0105 return items; 0106 } 0107 0108 // Enqueue next item or finish 0109 d->processNext(); 0110 0111 return items; 0112 } 0113 0114 #include "moc_teamdrivecreatejob.cpp"