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 }