File indexing completed on 2024-05-12 05:22:12

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 "calendarmodifyjob.h"
0010 #include "calendar.h"
0011 #include "calendarservice.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 CalendarModifyJob::Private
0021 {
0022 public:
0023     QueueHelper<CalendarPtr> calendars;
0024 };
0025 
0026 CalendarModifyJob::CalendarModifyJob(const CalendarPtr &calendar, const AccountPtr &account, QObject *parent)
0027     : ModifyJob(account, parent)
0028     , d(new Private)
0029 {
0030     d->calendars << calendar;
0031 }
0032 
0033 CalendarModifyJob::CalendarModifyJob(const CalendarsList &calendars, const AccountPtr &account, QObject *parent)
0034     : ModifyJob(account, parent)
0035     , d(new Private)
0036 {
0037     d->calendars = calendars;
0038 }
0039 
0040 CalendarModifyJob::~CalendarModifyJob() = default;
0041 
0042 void CalendarModifyJob::start()
0043 {
0044     if (d->calendars.atEnd()) {
0045         emitFinished();
0046         return;
0047     }
0048 
0049     const CalendarPtr calendar = d->calendars.current();
0050     const auto request = CalendarService::prepareRequest(CalendarService::updateCalendarUrl(calendar->uid()));
0051     const QByteArray rawData = CalendarService::calendarToJSON(calendar);
0052 
0053     enqueueRequest(request, rawData, QStringLiteral("application/json"));
0054 }
0055 
0056 ObjectsList CalendarModifyJob::handleReplyWithItems(const QNetworkReply *reply, const QByteArray &rawData)
0057 {
0058     const QString contentType = reply->header(QNetworkRequest::ContentTypeHeader).toString();
0059     ContentType ct = Utils::stringToContentType(contentType);
0060     ObjectsList items;
0061     if (ct != KGAPI2::JSON) {
0062         setError(KGAPI2::InvalidResponse);
0063         setErrorString(tr("Invalid response content type"));
0064         emitFinished();
0065         return items;
0066     }
0067 
0068     items << CalendarService::JSONToCalendar(rawData).dynamicCast<Object>();
0069     d->calendars.currentProcessed();
0070     // Enqueue next item or finish
0071     start();
0072 
0073     return items;
0074 }