File indexing completed on 2024-05-12 05:22:32

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 "tasklistcreatejob.h"
0010 #include "private/queuehelper_p.h"
0011 #include "tasklist.h"
0012 #include "tasksservice.h"
0013 #include "utils.h"
0014 
0015 #include <QNetworkReply>
0016 #include <QNetworkRequest>
0017 
0018 using namespace KGAPI2;
0019 
0020 class Q_DECL_HIDDEN TaskListCreateJob::Private
0021 {
0022 public:
0023     QueueHelper<TaskListPtr> taskLists;
0024 };
0025 
0026 TaskListCreateJob::TaskListCreateJob(const TaskListPtr &taskList, const AccountPtr &account, QObject *parent)
0027     : CreateJob(account, parent)
0028     , d(new Private)
0029 {
0030     d->taskLists << taskList;
0031 }
0032 
0033 TaskListCreateJob::TaskListCreateJob(const TaskListsList &taskLists, const AccountPtr &account, QObject *parent)
0034     : CreateJob(account, parent)
0035     , d(new Private)
0036 {
0037     d->taskLists = taskLists;
0038 }
0039 
0040 TaskListCreateJob::~TaskListCreateJob() = default;
0041 
0042 void TaskListCreateJob::start()
0043 {
0044     if (d->taskLists.atEnd()) {
0045         emitFinished();
0046         return;
0047     }
0048 
0049     const TaskListPtr taskList = d->taskLists.current();
0050 
0051     const QUrl url = TasksService::createTaskListUrl();
0052     QNetworkRequest request(url);
0053 
0054     const QByteArray rawData = TasksService::taskListToJSON(taskList);
0055 
0056     QStringList headers;
0057     const auto rawHeaderList = request.rawHeaderList();
0058     headers.reserve(rawHeaderList.size());
0059     for (const QByteArray &str : std::as_const(rawHeaderList)) {
0060         headers << QLatin1StringView(str) + QLatin1StringView(": ") + QLatin1StringView(request.rawHeader(str));
0061     }
0062 
0063     enqueueRequest(request, rawData, QStringLiteral("application/json"));
0064 }
0065 
0066 ObjectsList TaskListCreateJob::handleReplyWithItems(const QNetworkReply *reply, const QByteArray &rawData)
0067 {
0068     const QString contentType = reply->header(QNetworkRequest::ContentTypeHeader).toString();
0069     ContentType ct = Utils::stringToContentType(contentType);
0070     ObjectsList items;
0071     if (ct != KGAPI2::JSON) {
0072         setError(KGAPI2::InvalidResponse);
0073         setErrorString(tr("Invalid response content type"));
0074         emitFinished();
0075         return items;
0076     }
0077 
0078     items << TasksService::JSONToTaskList(rawData).dynamicCast<Object>();
0079     d->taskLists.currentProcessed();
0080     // Enqueue next item or finish
0081     start();
0082 
0083     return items;
0084 }
0085 
0086 #include "moc_tasklistcreatejob.cpp"