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 "taskcreatejob.h" 0010 #include "account.h" 0011 #include "debug.h" 0012 #include "private/queuehelper_p.h" 0013 #include "task.h" 0014 #include "tasksservice.h" 0015 #include "utils.h" 0016 0017 #include <QNetworkReply> 0018 #include <QNetworkRequest> 0019 #include <QUrlQuery> 0020 0021 using namespace KGAPI2; 0022 0023 namespace 0024 { 0025 static const auto ParentParam = QStringLiteral("parent"); 0026 static const auto PreviousParam = QStringLiteral("previous"); 0027 } 0028 0029 class Q_DECL_HIDDEN TaskCreateJob::Private 0030 { 0031 public: 0032 QueueHelper<TaskPtr> tasks; 0033 QString taskListId; 0034 QString parentId; 0035 QString previousId; 0036 }; 0037 0038 TaskCreateJob::TaskCreateJob(const TaskPtr &task, const QString &taskListId, const AccountPtr &account, QObject *parent) 0039 : CreateJob(account, parent) 0040 , d(new Private) 0041 { 0042 d->tasks << task; 0043 d->taskListId = taskListId; 0044 } 0045 0046 TaskCreateJob::TaskCreateJob(const TasksList &tasks, const QString &taskListId, const AccountPtr &account, QObject *parent) 0047 : CreateJob(account, parent) 0048 , d(new Private) 0049 { 0050 d->tasks = tasks; 0051 d->taskListId = taskListId; 0052 } 0053 0054 TaskCreateJob::~TaskCreateJob() = default; 0055 0056 QString TaskCreateJob::parentItem() const 0057 { 0058 return d->parentId; 0059 } 0060 0061 void TaskCreateJob::setParentItem(const QString &parentId) 0062 { 0063 if (isRunning()) { 0064 qCWarning(KGAPIDebug) << "Can't modify parentItem property when job is running!"; 0065 return; 0066 } 0067 0068 d->parentId = parentId; 0069 } 0070 0071 QString TaskCreateJob::previous() const 0072 { 0073 return d->previousId; 0074 } 0075 0076 void TaskCreateJob::setPrevious(const QString &previousId) 0077 { 0078 if (isRunning()) { 0079 qCWarning(KGAPIDebug) << "Can't modify previous property when job is running!"; 0080 return; 0081 } 0082 0083 d->previousId = previousId; 0084 } 0085 0086 void TaskCreateJob::start() 0087 { 0088 if (d->tasks.atEnd()) { 0089 emitFinished(); 0090 return; 0091 } 0092 0093 const TaskPtr task = d->tasks.current(); 0094 0095 QUrl url = TasksService::createTaskUrl(d->taskListId); 0096 QUrlQuery query(url); 0097 if (!d->parentId.isEmpty()) { 0098 query.addQueryItem(ParentParam, d->parentId); 0099 } 0100 if (!d->previousId.isEmpty()) { 0101 query.addQueryItem(PreviousParam, d->previousId); 0102 } 0103 url.setQuery(query); 0104 QNetworkRequest request(url); 0105 0106 const QByteArray rawData = TasksService::taskToJSON(task); 0107 0108 enqueueRequest(request, rawData, QStringLiteral("application/json")); 0109 } 0110 0111 ObjectsList TaskCreateJob::handleReplyWithItems(const QNetworkReply *reply, const QByteArray &rawData) 0112 { 0113 const QString contentType = reply->header(QNetworkRequest::ContentTypeHeader).toString(); 0114 ContentType ct = Utils::stringToContentType(contentType); 0115 ObjectsList items; 0116 if (ct != KGAPI2::JSON) { 0117 setError(KGAPI2::InvalidResponse); 0118 setErrorString(tr("Invalid response content type")); 0119 emitFinished(); 0120 return items; 0121 } 0122 0123 items << TasksService::JSONToTask(rawData).dynamicCast<Object>(); 0124 d->tasks.currentProcessed(); 0125 0126 // Enqueue next item or finish 0127 start(); 0128 0129 return items; 0130 } 0131 0132 #include "moc_taskcreatejob.cpp"