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 "postcreatejob.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 PostCreateJob::Private
0020 {
0021 public:
0022     Private(const PostPtr &post, bool isDraft);
0023 
0024     const PostPtr post;
0025     const bool isDraft;
0026 };
0027 
0028 PostCreateJob::Private::Private(const PostPtr &post_, bool isDraft_)
0029     : post(post_)
0030     , isDraft(isDraft_)
0031 {
0032 }
0033 
0034 PostCreateJob::PostCreateJob(const PostPtr &post, bool isDraft, const AccountPtr &account, QObject *parent)
0035     : CreateJob(account, parent)
0036     , d(new Private(post, isDraft))
0037 {
0038 }
0039 
0040 PostCreateJob::~PostCreateJob()
0041 {
0042     delete d;
0043 }
0044 
0045 void PostCreateJob::start()
0046 {
0047     QUrl url = BloggerService::createPostUrl(d->post->blogId());
0048     if (d->isDraft) {
0049         QUrlQuery query(url);
0050         query.addQueryItem(QStringLiteral("isDraft"), Utils::bool2Str(d->isDraft));
0051         url.setQuery(query);
0052     }
0053     QNetworkRequest request(url);
0054 
0055     const QByteArray rawData = Post::toJSON(d->post);
0056 
0057     enqueueRequest(request, rawData, QStringLiteral("application/json"));
0058 }
0059 
0060 ObjectsList PostCreateJob::handleReplyWithItems(const QNetworkReply *reply, const QByteArray &rawData)
0061 {
0062     const QString contentType = reply->header(QNetworkRequest::ContentTypeHeader).toString();
0063     ContentType ct = Utils::stringToContentType(contentType);
0064     ObjectsList items;
0065     if (ct != KGAPI2::JSON) {
0066         setError(KGAPI2::InvalidResponse);
0067         setErrorString(tr("Invalid response content type"));
0068         emitFinished();
0069         return items;
0070     }
0071 
0072     items << Post::fromJSON(rawData);
0073     emitFinished();
0074     return items;
0075 }
0076 
0077 #include "moc_postcreatejob.cpp"