File indexing completed on 2024-05-12 05:22:12

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 "postsearchjob.h"
0008 #include "bloggerservice.h"
0009 #include "post.h"
0010 #include "utils.h"
0011 
0012 #include <QNetworkReply>
0013 #include <QNetworkRequest>
0014 #include <QUrlQuery>
0015 
0016 using namespace KGAPI2;
0017 using namespace KGAPI2::Blogger;
0018 
0019 class Q_DECL_HIDDEN PostSearchJob::Private
0020 {
0021 public:
0022     Private(const QString &blogId, const QString &query, PostSearchJob *parent);
0023 
0024     const QString blogId;
0025     const QString query;
0026     bool fetchBodies = true;
0027 
0028 private:
0029     PostSearchJob *const q;
0030 };
0031 
0032 PostSearchJob::Private::Private(const QString &blogId_, const QString &query_, PostSearchJob *parent)
0033     : blogId(blogId_)
0034     , query(query_)
0035     , fetchBodies(true)
0036     , q(parent)
0037 {
0038 }
0039 
0040 PostSearchJob::PostSearchJob(const QString &blogId, const QString &query, const AccountPtr &account, QObject *parent)
0041     : FetchJob(account, parent)
0042     , d(new Private(blogId, query, this))
0043 {
0044 }
0045 
0046 PostSearchJob::~PostSearchJob()
0047 {
0048     delete d;
0049 }
0050 
0051 bool PostSearchJob::fetchBodies() const
0052 {
0053     return d->fetchBodies;
0054 }
0055 
0056 void PostSearchJob::setFetchBodies(bool fetchBodies)
0057 {
0058     d->fetchBodies = fetchBodies;
0059 }
0060 
0061 void PostSearchJob::start()
0062 {
0063     QUrl url = BloggerService::searchPostUrl(d->blogId);
0064     QUrlQuery query(url);
0065     query.addQueryItem(QStringLiteral("q"), d->query);
0066     query.addQueryItem(QStringLiteral("fetchBodies"), Utils::bool2Str(d->fetchBodies));
0067     url.setQuery(query);
0068     const QNetworkRequest request(url);
0069     enqueueRequest(request);
0070 }
0071 
0072 ObjectsList PostSearchJob::handleReplyWithItems(const QNetworkReply *reply, const QByteArray &rawData)
0073 {
0074     FeedData feedData;
0075     feedData.requestUrl = reply->request().url();
0076 
0077     ObjectsList items;
0078 
0079     const QString contentType = reply->header(QNetworkRequest::ContentTypeHeader).toString();
0080     ContentType ct = Utils::stringToContentType(contentType);
0081     if (ct == KGAPI2::JSON) {
0082         items = Post::fromJSONFeed(rawData, feedData);
0083     } else {
0084         setError(KGAPI2::InvalidResponse);
0085         setErrorString(tr("Invalid response content type"));
0086         emitFinished();
0087         return items;
0088     }
0089 
0090     if (feedData.nextPageUrl.isValid()) {
0091         const QNetworkRequest request(feedData.nextPageUrl);
0092         enqueueRequest(request);
0093     } else {
0094         emitFinished();
0095     }
0096 
0097     return items;
0098 }
0099 
0100 #include "moc_postsearchjob.cpp"