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 }