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"