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 }