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"