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"