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 "eventmodifyjob.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 EventModifyJob::Private 0021 { 0022 public: 0023 QueueHelper<EventPtr> events; 0024 QString calendarId; 0025 SendUpdatesPolicy updatesPolicy = SendUpdatesPolicy::All; 0026 }; 0027 0028 EventModifyJob::EventModifyJob(const EventPtr &event, const QString &calendarId, const AccountPtr &account, QObject *parent) 0029 : ModifyJob(account, parent) 0030 , d(new Private) 0031 { 0032 d->events << event; 0033 d->calendarId = calendarId; 0034 } 0035 0036 EventModifyJob::EventModifyJob(const EventsList &events, const QString &calendarId, const AccountPtr &account, QObject *parent) 0037 : ModifyJob(account, parent) 0038 , d(new Private) 0039 { 0040 d->events = events; 0041 d->calendarId = calendarId; 0042 } 0043 0044 EventModifyJob::~EventModifyJob() = default; 0045 0046 void EventModifyJob::setSendUpdates(KGAPI2::SendUpdatesPolicy updatesPolicy) 0047 { 0048 if (d->updatesPolicy != updatesPolicy) { 0049 d->updatesPolicy = updatesPolicy; 0050 Q_EMIT sendUpdatesChanged(d->updatesPolicy); 0051 } 0052 } 0053 0054 SendUpdatesPolicy EventModifyJob::sendUpdates() const 0055 { 0056 return d->updatesPolicy; 0057 } 0058 0059 void EventModifyJob::start() 0060 { 0061 if (d->events.atEnd()) { 0062 emitFinished(); 0063 return; 0064 } 0065 0066 const EventPtr event = d->events.current(); 0067 const auto request = CalendarService::prepareRequest(CalendarService::updateEventUrl(d->calendarId, event->id(), d->updatesPolicy)); 0068 const QByteArray rawData = CalendarService::eventToJSON(event); 0069 0070 enqueueRequest(request, rawData, QStringLiteral("application/json")); 0071 } 0072 0073 ObjectsList EventModifyJob::handleReplyWithItems(const QNetworkReply *reply, const QByteArray &rawData) 0074 { 0075 const QString contentType = reply->header(QNetworkRequest::ContentTypeHeader).toString(); 0076 ContentType ct = Utils::stringToContentType(contentType); 0077 ObjectsList items; 0078 if (ct != KGAPI2::JSON) { 0079 setError(KGAPI2::InvalidResponse); 0080 setErrorString(tr("Invalid response content type")); 0081 emitFinished(); 0082 return items; 0083 } 0084 0085 items << CalendarService::JSONToEvent(rawData).dynamicCast<Event>(); 0086 d->events.currentProcessed(); 0087 // Enqueue next item or finish 0088 start(); 0089 0090 return items; 0091 }