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 "taskmovejob.h" 0010 #include "private/queuehelper_p.h" 0011 #include "task.h" 0012 #include "tasksservice.h" 0013 0014 #include <QNetworkReply> 0015 #include <QNetworkRequest> 0016 0017 using namespace KGAPI2; 0018 0019 class Q_DECL_HIDDEN TaskMoveJob::Private 0020 { 0021 public: 0022 Private(TaskMoveJob *parent); 0023 void processNextTask(); 0024 0025 QueueHelper<QString> tasksIds; 0026 QString taskListId; 0027 QString newParentId; 0028 0029 private: 0030 TaskMoveJob *const q; 0031 }; 0032 0033 TaskMoveJob::Private::Private(TaskMoveJob *parent) 0034 : q(parent) 0035 { 0036 } 0037 0038 void TaskMoveJob::Private::processNextTask() 0039 { 0040 if (tasksIds.atEnd()) { 0041 q->emitFinished(); 0042 return; 0043 } 0044 0045 const QString taskId = tasksIds.current(); 0046 const QUrl url = TasksService::moveTaskUrl(taskListId, taskId, newParentId); 0047 QNetworkRequest request(url); 0048 0049 QStringList headers; 0050 const auto rawHeaderList = request.rawHeaderList(); 0051 headers.reserve(rawHeaderList.size()); 0052 for (const QByteArray &str : std::as_const(rawHeaderList)) { 0053 headers << QLatin1StringView(str) + QLatin1StringView(": ") + QLatin1StringView(request.rawHeader(str)); 0054 } 0055 0056 q->enqueueRequest(request); 0057 } 0058 0059 TaskMoveJob::TaskMoveJob(const TaskPtr &task, const QString &taskListId, const QString &newParentId, const AccountPtr &account, QObject *parent) 0060 : ModifyJob(account, parent) 0061 , d(new Private(this)) 0062 { 0063 d->tasksIds << task->uid(); 0064 d->taskListId = taskListId; 0065 d->newParentId = newParentId; 0066 } 0067 0068 TaskMoveJob::TaskMoveJob(const TasksList &tasks, const QString &taskListId, const QString &newParentId, const AccountPtr &account, QObject *parent) 0069 : ModifyJob(account, parent) 0070 , d(new Private(this)) 0071 { 0072 d->tasksIds.reserve(tasks.size()); 0073 for (const TaskPtr &task : tasks) { 0074 d->tasksIds << task->uid(); 0075 } 0076 d->taskListId = taskListId; 0077 d->newParentId = newParentId; 0078 } 0079 0080 TaskMoveJob::TaskMoveJob(const QString &taskId, const QString &taskListId, const QString &newParentId, const AccountPtr &account, QObject *parent) 0081 : ModifyJob(account, parent) 0082 , d(new Private(this)) 0083 { 0084 d->tasksIds << taskId; 0085 d->taskListId = taskListId; 0086 d->newParentId = newParentId; 0087 } 0088 0089 TaskMoveJob::TaskMoveJob(const QStringList &tasksIds, const QString &taskListId, const QString &newParentId, const AccountPtr &account, QObject *parent) 0090 : ModifyJob(account, parent) 0091 , d(new Private(this)) 0092 { 0093 d->tasksIds = tasksIds; 0094 d->taskListId = taskListId; 0095 d->newParentId = newParentId; 0096 } 0097 0098 TaskMoveJob::~TaskMoveJob() = default; 0099 0100 void TaskMoveJob::start() 0101 { 0102 d->processNextTask(); 0103 } 0104 0105 void TaskMoveJob::dispatchRequest(QNetworkAccessManager *accessManager, const QNetworkRequest &request, const QByteArray &data, const QString &contentType) 0106 { 0107 Q_UNUSED(data) 0108 Q_UNUSED(contentType) 0109 0110 accessManager->post(request, QByteArray()); 0111 } 0112 0113 void TaskMoveJob::handleReply(const QNetworkReply *reply, const QByteArray &rawData) 0114 { 0115 Q_UNUSED(reply) 0116 Q_UNUSED(rawData) 0117 0118 d->tasksIds.currentProcessed(); 0119 d->processNextTask(); 0120 } 0121 0122 #include "moc_taskmovejob.cpp"