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"