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"