File indexing completed on 2024-05-12 05:22:11
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 "page.h" 0008 0009 #include <QJsonDocument> 0010 #include <QVariant> 0011 0012 using namespace KGAPI2; 0013 using namespace KGAPI2::Blogger; 0014 0015 class Q_DECL_HIDDEN Page::Private 0016 { 0017 public: 0018 Private(); 0019 ~Private(); 0020 0021 static PagePtr fromJSON(const QVariant &json); 0022 static QVariant toJSON(const PagePtr &page); 0023 0024 QString id; 0025 QString blogId; 0026 QDateTime published; 0027 QDateTime updated; 0028 QUrl url; 0029 QString title; 0030 QString content; 0031 QString authorId; 0032 QString authorName; 0033 QUrl authorUrl; 0034 QUrl authorImageUrl; 0035 Status status; 0036 }; 0037 0038 Page::Private::Private() 0039 : status(Page::UnknownStatus) 0040 { 0041 } 0042 0043 Page::Private::~Private() 0044 { 0045 } 0046 0047 Page::Page() 0048 : Object() 0049 , d(new Private) 0050 { 0051 } 0052 0053 Page::~Page() 0054 { 0055 delete d; 0056 } 0057 0058 QString Page::id() const 0059 { 0060 return d->id; 0061 } 0062 0063 void Page::setId(const QString &id) 0064 { 0065 d->id = id; 0066 } 0067 0068 QString Page::blogId() const 0069 { 0070 return d->blogId; 0071 } 0072 0073 void Page::setBlogId(const QString &blogId) 0074 { 0075 d->blogId = blogId; 0076 } 0077 0078 QDateTime Page::published() const 0079 { 0080 return d->published; 0081 } 0082 0083 void Page::setPublished(const QDateTime &published) 0084 { 0085 d->published = published; 0086 } 0087 0088 QDateTime Page::updated() const 0089 { 0090 return d->updated; 0091 } 0092 0093 void Page::setUpdated(const QDateTime &updated) 0094 { 0095 d->updated = updated; 0096 } 0097 0098 QUrl Page::url() const 0099 { 0100 return d->url; 0101 } 0102 0103 void Page::setUrl(const QUrl &url) 0104 { 0105 d->url = url; 0106 } 0107 0108 QString Page::title() const 0109 { 0110 return d->title; 0111 } 0112 0113 void Page::setTitle(const QString &title) 0114 { 0115 d->title = title; 0116 } 0117 0118 QString Page::content() const 0119 { 0120 return d->content; 0121 } 0122 0123 void Page::setContent(const QString &content) 0124 { 0125 d->content = content; 0126 } 0127 0128 QString Page::authorId() const 0129 { 0130 return d->authorId; 0131 } 0132 0133 QString Page::authorName() const 0134 { 0135 return d->authorName; 0136 } 0137 0138 QUrl Page::authorUrl() const 0139 { 0140 return d->authorUrl; 0141 } 0142 0143 QUrl Page::authorImageUrl() const 0144 { 0145 return d->authorImageUrl; 0146 } 0147 0148 Page::Status Page::status() const 0149 { 0150 return d->status; 0151 } 0152 0153 void Page::setStatus(Page::Status status) 0154 { 0155 d->status = status; 0156 } 0157 0158 PagePtr Page::Private::fromJSON(const QVariant &json) 0159 { 0160 PagePtr page(new Page); 0161 const QVariantMap map = json.toMap(); 0162 0163 page->d->id = map[QStringLiteral("id")].toString(); 0164 page->d->blogId = map[QStringLiteral("blog")].toMap()[QStringLiteral("id")].toString(); 0165 page->d->published = QDateTime::fromString(map[QStringLiteral("published")].toString(), Qt::ISODate); 0166 page->d->updated = QDateTime::fromString(map[QStringLiteral("updated")].toString(), Qt::ISODate); 0167 page->d->url = map[QStringLiteral("url")].toUrl(); 0168 page->d->title = map[QStringLiteral("title")].toString(); 0169 page->d->content = map[QStringLiteral("content")].toString(); 0170 const QVariantMap author = map[QStringLiteral("author")].toMap(); 0171 page->d->authorId = author[QStringLiteral("id")].toString(); 0172 page->d->authorName = author[QStringLiteral("displayName")].toString(); 0173 page->d->authorUrl = author[QStringLiteral("url")].toUrl(); 0174 page->d->authorImageUrl = author[QStringLiteral("image")].toMap()[QStringLiteral("url")].toUrl(); 0175 0176 const QString status = map[QStringLiteral("status")].toString(); 0177 if (status == QLatin1StringView("LIVE")) { 0178 page->d->status = Live; 0179 } else if (status == QLatin1StringView("DRAFT")) { 0180 page->d->status = Draft; 0181 } else if (status == QLatin1StringView("IMPORTED")) { 0182 page->d->status = Imported; 0183 } else { 0184 page->d->status = UnknownStatus; 0185 } 0186 0187 return page; 0188 } 0189 0190 QVariant Page::Private::toJSON(const PagePtr &page) 0191 { 0192 QVariantMap map; 0193 map[QStringLiteral("kind")] = QLatin1StringView("blogger#page"); 0194 0195 if (!page->d->id.isEmpty()) { 0196 map[QStringLiteral("id")] = page->d->id; 0197 } 0198 map[QStringLiteral("blogId")] = page->d->blogId; 0199 if (page->d->published.isValid()) { 0200 map[QStringLiteral("published")] = page->d->published.toString(Qt::ISODate); 0201 } 0202 if (page->d->updated.isValid()) { 0203 map[QStringLiteral("updated")] = page->d->updated.toString(Qt::ISODate); 0204 } 0205 map[QStringLiteral("url")] = page->d->url.toString(); 0206 map[QStringLiteral("title")] = page->d->title; 0207 map[QStringLiteral("content")] = page->d->content; 0208 switch (page->d->status) { 0209 case Blogger::Page::Draft: 0210 map[QStringLiteral("status")] = QLatin1StringView("DRAFT"); 0211 break; 0212 case Blogger::Page::Live: 0213 map[QStringLiteral("status")] = QLatin1StringView("LIVE"); 0214 break; 0215 default: 0216 break; // not supported for writing 0217 } 0218 0219 return map; 0220 } 0221 0222 PagePtr Page::fromJSON(const QByteArray &rawData) 0223 { 0224 QJsonDocument document = QJsonDocument::fromJson(rawData); 0225 if (document.isNull()) { 0226 return PagePtr(); 0227 } 0228 0229 const QVariant json = document.toVariant(); 0230 const QVariantMap map = json.toMap(); 0231 if (map[QStringLiteral("kind")].toString() != QLatin1StringView("blogger#page")) { 0232 return PagePtr(); 0233 } 0234 0235 return Private::fromJSON(map); 0236 } 0237 0238 ObjectsList Page::fromJSONFeed(const QByteArray &rawData) 0239 { 0240 QJsonDocument document = QJsonDocument::fromJson(rawData); 0241 if (document.isNull()) { 0242 return ObjectsList(); 0243 } 0244 const QVariant json = document.toVariant(); 0245 const QVariantMap map = json.toMap(); 0246 if (map[QStringLiteral("kind")].toString() != QLatin1StringView("blogger#pageList")) { 0247 return ObjectsList(); 0248 } 0249 0250 ObjectsList list; 0251 const QVariantList variantList = map[QStringLiteral("items")].toList(); 0252 list.reserve(variantList.size()); 0253 for (const QVariant &item : variantList) { 0254 list << Private::fromJSON(item); 0255 } 0256 return list; 0257 } 0258 0259 QByteArray Page::toJSON(const PagePtr &page) 0260 { 0261 QJsonDocument document = QJsonDocument::fromVariant(Private::toJSON(page)); 0262 return document.toJson(QJsonDocument::Compact); 0263 }