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 0009 #include "taskmodifyjob.h" 0010 #include "private/queuehelper_p.h" 0011 #include "task.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 TaskModifyJob::Private 0021 { 0022 public: 0023 QueueHelper<TaskPtr> tasks; 0024 QString taskListId; 0025 }; 0026 0027 TaskModifyJob::TaskModifyJob(const TaskPtr &task, const QString &taskListId, const AccountPtr &account, QObject *parent) 0028 : ModifyJob(account, parent) 0029 , d(new Private) 0030 { 0031 d->tasks << task; 0032 d->taskListId = taskListId; 0033 } 0034 0035 TaskModifyJob::TaskModifyJob(const TasksList &tasks, const QString &taskListId, const AccountPtr &account, QObject *parent) 0036 : ModifyJob(account, parent) 0037 , d(new Private) 0038 { 0039 d->tasks = tasks; 0040 d->taskListId = taskListId; 0041 } 0042 0043 TaskModifyJob::~TaskModifyJob() = default; 0044 0045 void TaskModifyJob::start() 0046 { 0047 if (d->tasks.atEnd()) { 0048 emitFinished(); 0049 return; 0050 } 0051 0052 const TaskPtr task = d->tasks.current(); 0053 const QUrl url = TasksService::updateTaskUrl(d->taskListId, task->uid()); 0054 QNetworkRequest request(url); 0055 0056 const QByteArray rawData = TasksService::taskToJSON(task); 0057 0058 QStringList headers; 0059 const auto rawHeaderList = request.rawHeaderList(); 0060 headers.reserve(rawHeaderList.size()); 0061 for (const QByteArray &str : std::as_const(rawHeaderList)) { 0062 headers << QLatin1StringView(str) + QLatin1StringView(": ") + QLatin1StringView(request.rawHeader(str)); 0063 } 0064 0065 enqueueRequest(request, rawData, QStringLiteral("application/json")); 0066 } 0067 0068 ObjectsList TaskModifyJob::handleReplyWithItems(const QNetworkReply *reply, const QByteArray &rawData) 0069 { 0070 const QString contentType = reply->header(QNetworkRequest::ContentTypeHeader).toString(); 0071 ContentType ct = Utils::stringToContentType(contentType); 0072 ObjectsList items; 0073 if (ct != KGAPI2::JSON) { 0074 setError(KGAPI2::InvalidResponse); 0075 setErrorString(tr("Invalid response content type")); 0076 emitFinished(); 0077 return items; 0078 } 0079 0080 items << TasksService::JSONToTask(rawData).dynamicCast<Object>(); 0081 d->tasks.currentProcessed(); 0082 // Enqueue next item or finish 0083 start(); 0084 0085 return items; 0086 } 0087 0088 #include "moc_taskmodifyjob.cpp"