1 /* 2 * SPDX-FileCopyrightText: 2014 Daniel Vrátil <dvratil@redhat.com> 3 * 4 * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 5 */ 6 7 #include "comment.h" 8 9 #include <QVariant> 10 #include <QJsonDocument> 11 #include <QUrlQuery> 12 13 using namespace KGAPI2; 14 using namespace KGAPI2::Blogger; 15 16 class Q_DECL_HIDDEN Comment::Private 17 { 18 public: 19 Private(); 20 21 static CommentPtr fromJSON(const QVariant &json); 22 23 QString id; 24 QString postId; 25 QString blogId; 26 QDateTime published; 27 QDateTime updated; 28 QString content; 29 QString authorId; 30 QString authorName; 31 QUrl authorUrl; 32 QUrl authorImageUrl; 33 QString inReplyTo; 34 QString status; 35 }; 36 Private()37Comment::Private::Private() 38 { 39 } 40 Comment()41Comment::Comment() 42 : Object() 43 , d(new Private) 44 { 45 } 46 ~Comment()47Comment::~Comment() 48 { 49 delete d; 50 } 51 id() const52QString Comment::id() const 53 { 54 return d->id; 55 } 56 setId(const QString & id)57void Comment::setId(const QString &id) 58 { 59 d->id = id; 60 } 61 postId() const62QString Comment::postId() const 63 { 64 return d->postId; 65 } 66 setPostId(const QString & postId)67void Comment::setPostId(const QString &postId) 68 { 69 d->postId = postId; 70 } 71 blogId() const72QString Comment::blogId() const 73 { 74 return d->blogId; 75 } 76 setBlogId(const QString & blogId)77void Comment::setBlogId(const QString &blogId) 78 { 79 d->blogId = blogId; 80 } 81 published() const82QDateTime Comment::published() const 83 { 84 return d->published; 85 } 86 setPublished(const QDateTime & published)87void Comment::setPublished(const QDateTime &published) 88 { 89 d->published = published; 90 } 91 updated() const92QDateTime Comment::updated() const 93 { 94 return d->updated; 95 } 96 setUpdated(const QDateTime & updated)97void Comment::setUpdated(const QDateTime &updated) 98 { 99 d->updated = updated; 100 } 101 content() const102QString Comment::content() const 103 { 104 return d->content; 105 } 106 setContent(const QString & content)107void Comment::setContent(const QString &content) 108 { 109 d->content = content; 110 } 111 authorId() const112QString Comment::authorId() const 113 { 114 return d->authorId; 115 } 116 setAuthorId(const QString & authorId)117void Comment::setAuthorId(const QString &authorId) 118 { 119 d->authorId = authorId; 120 } 121 authorName() const122QString Comment::authorName() const 123 { 124 return d->authorName; 125 } 126 setAuthorName(const QString & authorName)127void Comment::setAuthorName(const QString &authorName) 128 { 129 d->authorName = authorName; 130 } 131 authorUrl() const132QUrl Comment::authorUrl() const 133 { 134 return d->authorUrl; 135 } 136 setAuthorUrl(const QUrl & url)137void Comment::setAuthorUrl(const QUrl &url) 138 { 139 d->authorUrl = url; 140 } 141 authorImageUrl() const142QUrl Comment::authorImageUrl() const 143 { 144 return d->authorImageUrl; 145 } 146 setAuthorImageUrl(const QUrl & authorImageUrl)147void Comment::setAuthorImageUrl(const QUrl &authorImageUrl) 148 { 149 d->authorImageUrl = authorImageUrl; 150 } 151 inReplyTo() const152QString Comment::inReplyTo() const 153 { 154 return d->inReplyTo; 155 } 156 setInReplyTo(const QString & inReplyTo)157void Comment::setInReplyTo(const QString &inReplyTo) 158 { 159 d->inReplyTo = inReplyTo; 160 } 161 status() const162QString Comment::status() const 163 { 164 return d->status; 165 } 166 setStatus(const QString & status)167void Comment::setStatus(const QString &status) 168 { 169 d->status = status; 170 } 171 fromJSON(const QVariant & json)172CommentPtr Comment::Private::fromJSON(const QVariant &json) 173 { 174 CommentPtr comment(new Comment); 175 const QVariantMap map = json.toMap(); 176 177 comment->d->id = map[QStringLiteral("id")].toString(); 178 comment->d->postId = map[QStringLiteral("post")].toMap()[QStringLiteral("id")].toString(); 179 comment->d->blogId = map[QStringLiteral("blog")].toMap()[QStringLiteral("id")].toString(); 180 comment->d->published = QDateTime::fromString(map[QStringLiteral("published")].toString(), Qt::ISODate); 181 comment->d->updated = QDateTime::fromString(map[QStringLiteral("updated")].toString(), Qt::ISODate); 182 comment->d->content = map[QStringLiteral("content")].toString(); 183 const QVariantMap author = map[QStringLiteral("author")].toMap(); 184 comment->d->authorId = author[QStringLiteral("id")].toString(); 185 comment->d->authorName = author[QStringLiteral("displayName")].toString(); 186 comment->d->authorUrl = author[QStringLiteral("url")].toUrl(); 187 comment->d->authorImageUrl = author[QStringLiteral("image")].toMap()[QStringLiteral("url")].toUrl(); 188 comment->d->inReplyTo = map[QStringLiteral("inReplyTo")].toMap()[QStringLiteral("id")].toString(); 189 comment->d->status = map[QStringLiteral("status")].toString(); 190 191 return comment; 192 } 193 fromJSON(const QByteArray & rawData)194CommentPtr Comment::fromJSON(const QByteArray &rawData) 195 { 196 QJsonDocument document = QJsonDocument::fromJson(rawData); 197 if (document.isNull()) { 198 return CommentPtr(); 199 } 200 const QVariant json = document.toVariant(); 201 const QVariantMap map = json.toMap(); 202 if (map[QStringLiteral("kind")].toString() != QLatin1String("blogger#comment")) { 203 return CommentPtr(); 204 } 205 206 return Comment::Private::fromJSON(map); 207 } 208 fromJSONFeed(const QByteArray & rawData,FeedData & feedData)209ObjectsList Comment::fromJSONFeed(const QByteArray &rawData, FeedData &feedData) 210 { 211 QJsonDocument document = QJsonDocument::fromJson(rawData); 212 if (document.isNull()) { 213 return ObjectsList(); 214 } 215 const QVariant json = document.toVariant(); 216 const QVariantMap map = json.toMap(); 217 if (map[QStringLiteral("kind")].toString() != QLatin1String("blogger#commentList")) { 218 return ObjectsList(); 219 } 220 221 ObjectsList items; 222 if (!map[QStringLiteral("nextPageToken")].toString().isEmpty()) { 223 feedData.nextPageUrl = feedData.requestUrl; 224 QUrlQuery query(feedData.nextPageUrl); 225 query.removeQueryItem(QStringLiteral("pageToken")); 226 query.addQueryItem(QStringLiteral("pageToken"), map[QStringLiteral("nextPageToken")].toString()); 227 feedData.nextPageUrl.setQuery(query); 228 } 229 const QVariantList variantList = map[QStringLiteral("items")].toList(); 230 items.reserve(variantList.size()); 231 for (const QVariant &v : variantList) { 232 items << Comment::Private::fromJSON(v); 233 } 234 235 return items; 236 } 237