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"