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