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 "childreferencefetchjob.h"
0010 #include "childreference.h"
0011 #include "driveservice.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 ChildReferenceFetchJob::Private
0021 {
0022 public:
0023     Private(ChildReferenceFetchJob *parent);
0024 
0025     QString folderId;
0026     QString childId;
0027 
0028 private:
0029     ChildReferenceFetchJob *const q;
0030 };
0031 
0032 ChildReferenceFetchJob::Private::Private(ChildReferenceFetchJob *parent)
0033     : q(parent)
0034 {
0035 }
0036 
0037 ChildReferenceFetchJob::ChildReferenceFetchJob(const QString &folderId, const AccountPtr &account, QObject *parent)
0038     : FetchJob(account, parent)
0039     , d(new Private(this))
0040 {
0041     d->folderId = folderId;
0042 }
0043 
0044 ChildReferenceFetchJob::ChildReferenceFetchJob(const QString &folderId, const QString &childId, const AccountPtr &account, QObject *parent)
0045     : FetchJob(account, parent)
0046     , d(new Private(this))
0047 {
0048     d->folderId = folderId;
0049     d->childId = childId;
0050 }
0051 
0052 ChildReferenceFetchJob::~ChildReferenceFetchJob()
0053 {
0054     delete d;
0055 }
0056 
0057 void ChildReferenceFetchJob::start()
0058 {
0059     QUrl url;
0060     if (d->childId.isEmpty()) {
0061         url = DriveService::fetchChildReferences(d->folderId);
0062     } else {
0063         url = DriveService::fetchParentReferenceUrl(d->folderId, d->childId);
0064     }
0065 
0066     QNetworkRequest request(url);
0067     enqueueRequest(request);
0068 }
0069 
0070 ObjectsList ChildReferenceFetchJob::handleReplyWithItems(const QNetworkReply *reply, const QByteArray &rawData)
0071 {
0072     ObjectsList items;
0073     FeedData feedData;
0074 
0075     const QString contentType = reply->header(QNetworkRequest::ContentTypeHeader).toString();
0076     ContentType ct = Utils::stringToContentType(contentType);
0077     if (ct == KGAPI2::JSON) {
0078         if (d->childId.isEmpty()) {
0079             items << ChildReference::fromJSONFeed(rawData, feedData);
0080         } else {
0081             items << ChildReference::fromJSON(rawData);
0082         }
0083     } else {
0084         setError(KGAPI2::InvalidResponse);
0085         setErrorString(tr("Invalid response content type"));
0086         emitFinished();
0087         return items;
0088     }
0089 
0090     if (feedData.nextPageUrl.isValid()) {
0091         QNetworkRequest request(feedData.nextPageUrl);
0092         enqueueRequest(request);
0093     }
0094 
0095     return items;
0096 }
0097 
0098 #include "moc_childreferencefetchjob.cpp"