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 }