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 }