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 "postpublishjob.h"
0008 #include "bloggerservice.h"
0009 #include "post.h"
0010 #include "utils.h"
0011 
0012 #include <QNetworkAccessManager>
0013 #include <QNetworkReply>
0014 #include <QNetworkRequest>
0015 #include <QUrlQuery>
0016 
0017 using namespace KGAPI2;
0018 using namespace KGAPI2::Blogger;
0019 
0020 class Q_DECL_HIDDEN PostPublishJob::Private
0021 {
0022 public:
0023     Private(const QString &blogId, const QString &postId, PostPublishJob::PublishAction action, const QDateTime &publishDate = QDateTime());
0024 
0025     const QString blogId;
0026     const QString postId;
0027     const PublishAction action;
0028     const QDateTime publishDate;
0029 
0030     ObjectPtr response;
0031 };
0032 
0033 PostPublishJob::Private::Private(const QString &blogId_, const QString &postId_, PostPublishJob::PublishAction action_, const QDateTime &publishDate_)
0034     : blogId(blogId_)
0035     , postId(postId_)
0036     , action(action_)
0037     , publishDate(publishDate_)
0038 {
0039 }
0040 
0041 PostPublishJob::PostPublishJob(const PostPtr &post, PublishAction action, const AccountPtr &account, QObject *parent)
0042     : Job(account, parent)
0043     , d(new Private(post->blogId(), post->id(), action))
0044 {
0045 }
0046 
0047 PostPublishJob::PostPublishJob(const QString &blogId, const QString &postId, PublishAction action, const AccountPtr &account, QObject *parent)
0048     : Job(account, parent)
0049     , d(new Private(blogId, postId, action))
0050 {
0051 }
0052 
0053 PostPublishJob::PostPublishJob(const PostPtr &post, const QDateTime &publishDate, const AccountPtr &account, QObject *parent)
0054     : Job(account, parent)
0055     , d(new Private(post->blogId(), post->id(), Publish, publishDate))
0056 {
0057 }
0058 
0059 PostPublishJob::PostPublishJob(const QString &blogId, const QString &postId, const QDateTime &publishDate, const AccountPtr &account, QObject *parent)
0060     : Job(account, parent)
0061     , d(new Private(blogId, postId, Publish, publishDate))
0062 {
0063 }
0064 
0065 PostPublishJob::~PostPublishJob()
0066 {
0067     delete d;
0068 }
0069 
0070 ObjectPtr PostPublishJob::item() const
0071 {
0072     return d->response;
0073 }
0074 
0075 void PostPublishJob::start()
0076 {
0077     QUrl url;
0078     if (d->action == Blogger::PostPublishJob::Publish) {
0079         url = BloggerService::publishPostUrl(d->blogId, d->postId);
0080         QUrlQuery query(url);
0081         if (d->publishDate.isValid()) {
0082             query.addQueryItem(QStringLiteral("publishDate"), d->publishDate.toString(Qt::ISODate));
0083         }
0084         url.setQuery(query);
0085     } else {
0086         url = BloggerService::revertPostUrl(d->blogId, d->postId);
0087     }
0088 
0089     const QNetworkRequest request(url);
0090     enqueueRequest(request);
0091 }
0092 
0093 void PostPublishJob::dispatchRequest(QNetworkAccessManager *accessManager, const QNetworkRequest &request, const QByteArray &data, const QString &contentType)
0094 {
0095     Q_UNUSED(contentType)
0096     accessManager->post(request, data);
0097 }
0098 
0099 void PostPublishJob::handleReply(const QNetworkReply *reply, const QByteArray &rawData)
0100 {
0101     const QString contentType = reply->header(QNetworkRequest::ContentTypeHeader).toString();
0102     ContentType ct = Utils::stringToContentType(contentType);
0103     if (ct != KGAPI2::JSON) {
0104         setError(KGAPI2::InvalidResponse);
0105         setErrorString(tr("Invalid response content type"));
0106         emitFinished();
0107     }
0108 
0109     d->response = Post::fromJSON(rawData);
0110     emitFinished();
0111 }
0112 
0113 #include "moc_postpublishjob.cpp"