File indexing completed on 2024-05-12 05:22:24
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 "teamdrivemodifyjob.h" 0010 #include "driveservice.h" 0011 #include "teamdrive.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 TeamdriveModifyJob::Private 0021 { 0022 public: 0023 Private(TeamdriveModifyJob *parent); 0024 void processNext(); 0025 0026 TeamdrivesList teamdrives; 0027 0028 private: 0029 TeamdriveModifyJob *const q; 0030 }; 0031 0032 TeamdriveModifyJob::Private::Private(TeamdriveModifyJob *parent) 0033 : q(parent) 0034 { 0035 } 0036 0037 void TeamdriveModifyJob::Private::processNext() 0038 { 0039 if (teamdrives.isEmpty()) { 0040 q->emitFinished(); 0041 return; 0042 } 0043 0044 const TeamdrivePtr teamdrive = teamdrives.takeFirst(); 0045 const QUrl url = DriveService::fetchTeamdriveUrl(teamdrive->id()); 0046 0047 QNetworkRequest request(url); 0048 0049 const QByteArray rawData = Teamdrive::toJSON(teamdrive); 0050 q->enqueueRequest(request, rawData, QStringLiteral("application/json")); 0051 } 0052 0053 TeamdriveModifyJob::TeamdriveModifyJob(const TeamdrivePtr &teamdrive, const AccountPtr &account, QObject *parent) 0054 : ModifyJob(account, parent) 0055 , d(new Private(this)) 0056 { 0057 d->teamdrives << teamdrive; 0058 } 0059 0060 TeamdriveModifyJob::TeamdriveModifyJob(const TeamdrivesList &teamdrives, const AccountPtr &account, QObject *parent) 0061 : ModifyJob(account, parent) 0062 , d(new Private(this)) 0063 { 0064 d->teamdrives << teamdrives; 0065 } 0066 0067 TeamdriveModifyJob::~TeamdriveModifyJob() = default; 0068 0069 void TeamdriveModifyJob::start() 0070 { 0071 d->processNext(); 0072 } 0073 0074 ObjectsList TeamdriveModifyJob::handleReplyWithItems(const QNetworkReply *reply, const QByteArray &rawData) 0075 { 0076 const QString contentType = reply->header(QNetworkRequest::ContentTypeHeader).toString(); 0077 ContentType ct = Utils::stringToContentType(contentType); 0078 ObjectsList items; 0079 if (ct == KGAPI2::JSON) { 0080 items << Teamdrive::fromJSON(rawData); 0081 } else { 0082 setError(KGAPI2::InvalidResponse); 0083 setErrorString(tr("Invalid response content type")); 0084 emitFinished(); 0085 return items; 0086 } 0087 0088 // Enqueue next item or finish 0089 d->processNext(); 0090 0091 return items; 0092 } 0093 0094 #include "moc_teamdrivemodifyjob.cpp"