File indexing completed on 2024-05-12 05:22:11
0001 /* 0002 * SPDX-FileCopyrightText: 2014 Daniel Vrátil <dvratil@redhat.com> 0003 * 0004 * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0005 */ 0006 0007 #include "pagefetchjob.h" 0008 #include "bloggerservice.h" 0009 #include "utils.h" 0010 0011 #include <QNetworkReply> 0012 #include <QNetworkRequest> 0013 #include <QUrlQuery> 0014 0015 using namespace KGAPI2; 0016 using namespace KGAPI2::Blogger; 0017 0018 class Q_DECL_HIDDEN PageFetchJob::Private 0019 { 0020 public: 0021 Private(const QString &blogId, const QString &pageId); 0022 0023 const QString blogId; 0024 const QString pageId; 0025 0026 bool fetchContent = true; 0027 StatusFilters statusFilter = All; 0028 }; 0029 0030 PageFetchJob::Private::Private(const QString &blogId_, const QString &pageId_) 0031 : blogId(blogId_) 0032 , pageId(pageId_) 0033 { 0034 } 0035 0036 PageFetchJob::PageFetchJob(const QString &blogId, const AccountPtr &account, QObject *parent) 0037 : FetchJob(account, parent) 0038 , d(new Private(blogId, QString())) 0039 { 0040 } 0041 0042 PageFetchJob::PageFetchJob(const QString &blogId, const QString &pageId, const AccountPtr &account, QObject *parent) 0043 : FetchJob(account, parent) 0044 , d(new Private(blogId, pageId)) 0045 { 0046 } 0047 0048 PageFetchJob::~PageFetchJob() 0049 { 0050 delete d; 0051 } 0052 0053 bool PageFetchJob::fetchContent() const 0054 { 0055 return d->fetchContent; 0056 } 0057 0058 void PageFetchJob::setFetchContent(bool fetchContent) 0059 { 0060 d->fetchContent = fetchContent; 0061 } 0062 0063 PageFetchJob::StatusFilters PageFetchJob::statusFilter() const 0064 { 0065 return d->statusFilter; 0066 } 0067 0068 void PageFetchJob::setStatusFilter(StatusFilters status) 0069 { 0070 d->statusFilter = status; 0071 } 0072 0073 void PageFetchJob::start() 0074 { 0075 QUrl url = BloggerService::fetchPageUrl(d->blogId, d->pageId); 0076 QUrlQuery query(url); 0077 query.addQueryItem(QStringLiteral("fetchBodies"), Utils::bool2Str(d->fetchContent)); 0078 if (d->statusFilter & Draft) { 0079 query.addQueryItem(QStringLiteral("status"), QStringLiteral("draft")); 0080 } 0081 if (d->statusFilter & Imported) { 0082 query.addQueryItem(QStringLiteral("status"), QStringLiteral("imported")); 0083 } 0084 if (d->statusFilter & Live) { 0085 query.addQueryItem(QStringLiteral("status"), QStringLiteral("live")); 0086 } 0087 if (account()) { 0088 query.addQueryItem(QStringLiteral("view"), QStringLiteral("ADMIN")); 0089 } 0090 url.setQuery(query); 0091 QNetworkRequest request(url); 0092 enqueueRequest(request); 0093 } 0094 0095 ObjectsList PageFetchJob::handleReplyWithItems(const QNetworkReply *reply, const QByteArray &rawData) 0096 { 0097 ObjectsList items; 0098 0099 const QString contentType = reply->header(QNetworkRequest::ContentTypeHeader).toString(); 0100 ContentType ct = Utils::stringToContentType(contentType); 0101 if (ct == KGAPI2::JSON) { 0102 if (d->pageId.isEmpty()) { 0103 items = Page::fromJSONFeed(rawData); 0104 } else { 0105 items << Page::fromJSON(rawData); 0106 } 0107 } else { 0108 setError(KGAPI2::InvalidResponse); 0109 setErrorString(tr("Invalid response content type")); 0110 emitFinished(); 0111 return items; 0112 } 0113 0114 emitFinished(); 0115 return items; 0116 } 0117 0118 #include "moc_pagefetchjob.cpp"