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"