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"