File indexing completed on 2024-05-12 05:22:33
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 #include "tasklistfetchjob.h" 0009 #include "tasksservice.h" 0010 #include "utils.h" 0011 0012 #include <QNetworkReply> 0013 #include <QNetworkRequest> 0014 0015 using namespace KGAPI2; 0016 0017 class Q_DECL_HIDDEN TaskListFetchJob::Private 0018 { 0019 public: 0020 Private(TaskListFetchJob *parent); 0021 QNetworkRequest createRequest(const QUrl &url); 0022 0023 private: 0024 TaskListFetchJob *const q; 0025 }; 0026 0027 TaskListFetchJob::Private::Private(TaskListFetchJob *parent) 0028 : q(parent) 0029 { 0030 } 0031 0032 QNetworkRequest TaskListFetchJob::Private::createRequest(const QUrl &url) 0033 { 0034 QNetworkRequest request(url); 0035 0036 QStringList headers; 0037 const auto rawHeaderList = request.rawHeaderList(); 0038 headers.reserve(rawHeaderList.size()); 0039 for (const QByteArray &str : std::as_const(rawHeaderList)) { 0040 headers << QLatin1StringView(str) + QLatin1StringView(": ") + QLatin1StringView(request.rawHeader(str)); 0041 } 0042 0043 return request; 0044 } 0045 0046 TaskListFetchJob::TaskListFetchJob(const AccountPtr &account, QObject *parent) 0047 : FetchJob(account, parent) 0048 , d(new Private(this)) 0049 { 0050 } 0051 0052 TaskListFetchJob::~TaskListFetchJob() = default; 0053 0054 void TaskListFetchJob::start() 0055 { 0056 const QUrl url = TasksService::fetchTaskListsUrl(); 0057 const QNetworkRequest request = d->createRequest(url); 0058 enqueueRequest(request); 0059 } 0060 0061 ObjectsList TaskListFetchJob::handleReplyWithItems(const QNetworkReply *reply, const QByteArray &rawData) 0062 { 0063 FeedData feedData; 0064 ObjectsList items; 0065 const QString contentType = reply->header(QNetworkRequest::ContentTypeHeader).toString(); 0066 ContentType ct = Utils::stringToContentType(contentType); 0067 if (ct == KGAPI2::JSON) { 0068 items = TasksService::parseJSONFeed(rawData, feedData); 0069 } else { 0070 setError(KGAPI2::InvalidResponse); 0071 setErrorString(tr("Invalid response content type")); 0072 emitFinished(); 0073 return items; 0074 } 0075 0076 if (feedData.nextPageUrl.isValid()) { 0077 const QNetworkRequest request = d->createRequest(feedData.nextPageUrl); 0078 enqueueRequest(request); 0079 } 0080 0081 return items; 0082 } 0083 0084 #include "moc_tasklistfetchjob.cpp"