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 "calendarfetchjob.h"
0010 #include "account.h"
0011 #include "calendar.h"
0012 #include "calendarservice.h"
0013 #include "debug.h"
0014 #include "utils.h"
0015 
0016 #include <QNetworkReply>
0017 #include <QNetworkRequest>
0018 
0019 using namespace KGAPI2;
0020 
0021 class Q_DECL_HIDDEN CalendarFetchJob::Private
0022 {
0023 public:
0024     QString calendarId;
0025 };
0026 
0027 CalendarFetchJob::CalendarFetchJob(const AccountPtr &account, QObject *parent)
0028     : FetchJob(account, parent)
0029     , d(new Private())
0030 {
0031 }
0032 
0033 CalendarFetchJob::CalendarFetchJob(const QString &calendarId, const AccountPtr &account, QObject *parent)
0034     : FetchJob(account, parent)
0035     , d(new Private())
0036 {
0037     d->calendarId = calendarId;
0038 }
0039 
0040 CalendarFetchJob::~CalendarFetchJob() = default;
0041 
0042 void CalendarFetchJob::start()
0043 {
0044     QUrl url;
0045     if (d->calendarId.isEmpty()) {
0046         url = CalendarService::fetchCalendarsUrl();
0047     } else {
0048         url = CalendarService::fetchCalendarUrl(d->calendarId);
0049     }
0050     const auto request = CalendarService::prepareRequest(url);
0051     enqueueRequest(request);
0052 }
0053 
0054 ObjectsList CalendarFetchJob::handleReplyWithItems(const QNetworkReply *reply, const QByteArray &rawData)
0055 {
0056     FeedData feedData;
0057     feedData.requestUrl = reply->request().url();
0058 
0059     ObjectsList items;
0060     const QString contentType = reply->header(QNetworkRequest::ContentTypeHeader).toString();
0061     ContentType ct = Utils::stringToContentType(contentType);
0062     if (ct == KGAPI2::JSON) {
0063         if (d->calendarId.isEmpty()) {
0064             items = CalendarService::parseCalendarJSONFeed(rawData, feedData);
0065         } else {
0066             items << CalendarService::JSONToCalendar(rawData);
0067         }
0068     } else {
0069         setError(KGAPI2::InvalidResponse);
0070         setErrorString(tr("Invalid response content type"));
0071         emitFinished();
0072         return items;
0073     }
0074 
0075     if (feedData.nextPageUrl.isValid()) {
0076         const auto request = CalendarService::prepareRequest(feedData.nextPageUrl);
0077         enqueueRequest(request);
0078     }
0079 
0080     return items;
0081 }