File indexing completed on 2024-05-12 05:22:13
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 "eventmovejob.h" 0010 #include "calendarservice.h" 0011 #include "event.h" 0012 #include "private/queuehelper_p.h" 0013 #include "utils.h" 0014 0015 #include <QNetworkReply> 0016 #include <QNetworkRequest> 0017 0018 using namespace KGAPI2; 0019 0020 class Q_DECL_HIDDEN EventMoveJob::Private 0021 { 0022 public: 0023 QueueHelper<QString> eventsIds; 0024 QString source; 0025 QString destination; 0026 }; 0027 0028 EventMoveJob::EventMoveJob(const EventPtr &event, 0029 const QString &sourceCalendarId, 0030 const QString &destinationCalendarId, 0031 const AccountPtr &account, 0032 QObject *parent) 0033 : ModifyJob(account, parent) 0034 , d(new Private()) 0035 { 0036 d->eventsIds << event->id(); 0037 d->source = sourceCalendarId; 0038 d->destination = destinationCalendarId; 0039 } 0040 0041 EventMoveJob::EventMoveJob(const EventsList &events, 0042 const QString &sourceCalendarId, 0043 const QString &destinationCalendarId, 0044 const AccountPtr &account, 0045 QObject *parent) 0046 : ModifyJob(account, parent) 0047 , d(new Private()) 0048 { 0049 for (const EventPtr &event : events) { 0050 d->eventsIds << event->id(); 0051 } 0052 d->source = sourceCalendarId; 0053 d->destination = destinationCalendarId; 0054 } 0055 0056 EventMoveJob::EventMoveJob(const QString &eventId, 0057 const QString &sourceCalendarId, 0058 const QString &destinationCalendarId, 0059 const AccountPtr &account, 0060 QObject *parent) 0061 : ModifyJob(account, parent) 0062 , d(new Private()) 0063 { 0064 d->eventsIds << eventId; 0065 d->source = sourceCalendarId; 0066 d->destination = destinationCalendarId; 0067 } 0068 0069 EventMoveJob::EventMoveJob(const QStringList &eventsIds, 0070 const QString &sourceCalendarId, 0071 const QString &destinationCalendarId, 0072 const AccountPtr &account, 0073 QObject *parent) 0074 : ModifyJob(account, parent) 0075 , d(new Private()) 0076 { 0077 d->eventsIds = eventsIds; 0078 d->source = sourceCalendarId; 0079 d->destination = destinationCalendarId; 0080 } 0081 0082 EventMoveJob::~EventMoveJob() = default; 0083 0084 void EventMoveJob::start() 0085 { 0086 if (d->eventsIds.atEnd()) { 0087 emitFinished(); 0088 return; 0089 } 0090 0091 const QString eventId = d->eventsIds.current(); 0092 const auto request = CalendarService::prepareRequest(CalendarService::moveEventUrl(d->source, d->destination, eventId)); 0093 0094 enqueueRequest(request); 0095 } 0096 0097 void EventMoveJob::dispatchRequest(QNetworkAccessManager *accessManager, const QNetworkRequest &request, const QByteArray &data, const QString &contentType) 0098 { 0099 Q_UNUSED(data) 0100 Q_UNUSED(contentType) 0101 0102 accessManager->post(request, QByteArray()); 0103 } 0104 0105 KGAPI2::ObjectsList EventMoveJob::handleReplyWithItems(const QNetworkReply *reply, const QByteArray &rawData) 0106 { 0107 const QString contentType = reply->header(QNetworkRequest::ContentTypeHeader).toString(); 0108 ContentType ct = Utils::stringToContentType(contentType); 0109 ObjectsList items; 0110 if (ct != KGAPI2::JSON) { 0111 setError(KGAPI2::InvalidResponse); 0112 setErrorString(tr("Invalid response content type")); 0113 emitFinished(); 0114 return items; 0115 } 0116 0117 items << CalendarService::JSONToEvent(rawData).dynamicCast<Event>(); 0118 d->eventsIds.currentProcessed(); 0119 // Enqueue next item or finish 0120 start(); 0121 0122 return items; 0123 }