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"