File indexing completed on 2024-05-12 05:22:10
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 "comment.h" 0008 0009 #include <QJsonDocument> 0010 #include <QUrlQuery> 0011 #include <QVariant> 0012 0013 using namespace KGAPI2; 0014 using namespace KGAPI2::Blogger; 0015 0016 class Q_DECL_HIDDEN Comment::Private 0017 { 0018 public: 0019 Private(); 0020 0021 static CommentPtr fromJSON(const QVariant &json); 0022 0023 QString id; 0024 QString postId; 0025 QString blogId; 0026 QDateTime published; 0027 QDateTime updated; 0028 QString content; 0029 QString authorId; 0030 QString authorName; 0031 QUrl authorUrl; 0032 QUrl authorImageUrl; 0033 QString inReplyTo; 0034 QString status; 0035 }; 0036 0037 Comment::Private::Private() 0038 { 0039 } 0040 0041 Comment::Comment() 0042 : Object() 0043 , d(new Private) 0044 { 0045 } 0046 0047 Comment::~Comment() 0048 { 0049 delete d; 0050 } 0051 0052 QString Comment::id() const 0053 { 0054 return d->id; 0055 } 0056 0057 void Comment::setId(const QString &id) 0058 { 0059 d->id = id; 0060 } 0061 0062 QString Comment::postId() const 0063 { 0064 return d->postId; 0065 } 0066 0067 void Comment::setPostId(const QString &postId) 0068 { 0069 d->postId = postId; 0070 } 0071 0072 QString Comment::blogId() const 0073 { 0074 return d->blogId; 0075 } 0076 0077 void Comment::setBlogId(const QString &blogId) 0078 { 0079 d->blogId = blogId; 0080 } 0081 0082 QDateTime Comment::published() const 0083 { 0084 return d->published; 0085 } 0086 0087 void Comment::setPublished(const QDateTime &published) 0088 { 0089 d->published = published; 0090 } 0091 0092 QDateTime Comment::updated() const 0093 { 0094 return d->updated; 0095 } 0096 0097 void Comment::setUpdated(const QDateTime &updated) 0098 { 0099 d->updated = updated; 0100 } 0101 0102 QString Comment::content() const 0103 { 0104 return d->content; 0105 } 0106 0107 void Comment::setContent(const QString &content) 0108 { 0109 d->content = content; 0110 } 0111 0112 QString Comment::authorId() const 0113 { 0114 return d->authorId; 0115 } 0116 0117 void Comment::setAuthorId(const QString &authorId) 0118 { 0119 d->authorId = authorId; 0120 } 0121 0122 QString Comment::authorName() const 0123 { 0124 return d->authorName; 0125 } 0126 0127 void Comment::setAuthorName(const QString &authorName) 0128 { 0129 d->authorName = authorName; 0130 } 0131 0132 QUrl Comment::authorUrl() const 0133 { 0134 return d->authorUrl; 0135 } 0136 0137 void Comment::setAuthorUrl(const QUrl &url) 0138 { 0139 d->authorUrl = url; 0140 } 0141 0142 QUrl Comment::authorImageUrl() const 0143 { 0144 return d->authorImageUrl; 0145 } 0146 0147 void Comment::setAuthorImageUrl(const QUrl &authorImageUrl) 0148 { 0149 d->authorImageUrl = authorImageUrl; 0150 } 0151 0152 QString Comment::inReplyTo() const 0153 { 0154 return d->inReplyTo; 0155 } 0156 0157 void Comment::setInReplyTo(const QString &inReplyTo) 0158 { 0159 d->inReplyTo = inReplyTo; 0160 } 0161 0162 QString Comment::status() const 0163 { 0164 return d->status; 0165 } 0166 0167 void Comment::setStatus(const QString &status) 0168 { 0169 d->status = status; 0170 } 0171 0172 CommentPtr Comment::Private::fromJSON(const QVariant &json) 0173 { 0174 CommentPtr comment(new Comment); 0175 const QVariantMap map = json.toMap(); 0176 0177 comment->d->id = map[QStringLiteral("id")].toString(); 0178 comment->d->postId = map[QStringLiteral("post")].toMap()[QStringLiteral("id")].toString(); 0179 comment->d->blogId = map[QStringLiteral("blog")].toMap()[QStringLiteral("id")].toString(); 0180 comment->d->published = QDateTime::fromString(map[QStringLiteral("published")].toString(), Qt::ISODate); 0181 comment->d->updated = QDateTime::fromString(map[QStringLiteral("updated")].toString(), Qt::ISODate); 0182 comment->d->content = map[QStringLiteral("content")].toString(); 0183 const QVariantMap author = map[QStringLiteral("author")].toMap(); 0184 comment->d->authorId = author[QStringLiteral("id")].toString(); 0185 comment->d->authorName = author[QStringLiteral("displayName")].toString(); 0186 comment->d->authorUrl = author[QStringLiteral("url")].toUrl(); 0187 comment->d->authorImageUrl = author[QStringLiteral("image")].toMap()[QStringLiteral("url")].toUrl(); 0188 comment->d->inReplyTo = map[QStringLiteral("inReplyTo")].toMap()[QStringLiteral("id")].toString(); 0189 comment->d->status = map[QStringLiteral("status")].toString(); 0190 0191 return comment; 0192 } 0193 0194 CommentPtr Comment::fromJSON(const QByteArray &rawData) 0195 { 0196 QJsonDocument document = QJsonDocument::fromJson(rawData); 0197 if (document.isNull()) { 0198 return CommentPtr(); 0199 } 0200 const QVariant json = document.toVariant(); 0201 const QVariantMap map = json.toMap(); 0202 if (map[QStringLiteral("kind")].toString() != QLatin1StringView("blogger#comment")) { 0203 return CommentPtr(); 0204 } 0205 0206 return Comment::Private::fromJSON(map); 0207 } 0208 0209 ObjectsList Comment::fromJSONFeed(const QByteArray &rawData, FeedData &feedData) 0210 { 0211 QJsonDocument document = QJsonDocument::fromJson(rawData); 0212 if (document.isNull()) { 0213 return ObjectsList(); 0214 } 0215 const QVariant json = document.toVariant(); 0216 const QVariantMap map = json.toMap(); 0217 if (map[QStringLiteral("kind")].toString() != QLatin1StringView("blogger#commentList")) { 0218 return ObjectsList(); 0219 } 0220 0221 ObjectsList items; 0222 if (!map[QStringLiteral("nextPageToken")].toString().isEmpty()) { 0223 feedData.nextPageUrl = feedData.requestUrl; 0224 QUrlQuery query(feedData.nextPageUrl); 0225 query.removeQueryItem(QStringLiteral("pageToken")); 0226 query.addQueryItem(QStringLiteral("pageToken"), map[QStringLiteral("nextPageToken")].toString()); 0227 feedData.nextPageUrl.setQuery(query); 0228 } 0229 const QVariantList variantList = map[QStringLiteral("items")].toList(); 0230 items.reserve(variantList.size()); 0231 for (const QVariant &v : variantList) { 0232 items << Comment::Private::fromJSON(v); 0233 } 0234 0235 return items; 0236 }