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 "blog.h" 0008 0009 #include <QJsonDocument> 0010 0011 using namespace KGAPI2::Blogger; 0012 0013 class Q_DECL_HIDDEN Blog::Private 0014 { 0015 public: 0016 Private(); 0017 0018 static BlogPtr fromJSON(const QVariant &json); 0019 0020 QString id; 0021 QString name; 0022 QString description; 0023 QDateTime published; 0024 QDateTime updated; 0025 QUrl url; 0026 uint postsCount = 0; 0027 uint pagesCount = 0; 0028 QString language; 0029 QString languageVariant; 0030 QString country; 0031 QVariant customMetaData; 0032 }; 0033 0034 Blog::Private::Private() 0035 { 0036 } 0037 0038 Blog::Blog() 0039 : Object() 0040 , d(new Private) 0041 { 0042 } 0043 0044 Blog::~Blog() 0045 { 0046 delete d; 0047 } 0048 0049 QString Blog::id() const 0050 { 0051 return d->id; 0052 } 0053 0054 QString Blog::name() const 0055 { 0056 return d->name; 0057 } 0058 0059 QString Blog::description() const 0060 { 0061 return d->description; 0062 } 0063 0064 QDateTime Blog::published() const 0065 { 0066 return d->published; 0067 } 0068 0069 QDateTime Blog::updated() const 0070 { 0071 return d->updated; 0072 } 0073 0074 QUrl Blog::url() const 0075 { 0076 return d->url; 0077 } 0078 0079 uint Blog::postsCount() const 0080 { 0081 return d->postsCount; 0082 } 0083 0084 uint Blog::pagesCount() const 0085 { 0086 return d->pagesCount; 0087 } 0088 0089 QString Blog::language() const 0090 { 0091 return d->language; 0092 } 0093 0094 QString Blog::country() const 0095 { 0096 return d->country; 0097 } 0098 0099 QString Blog::languageVariant() const 0100 { 0101 return d->languageVariant; 0102 } 0103 0104 QVariant Blog::customMetaData() const 0105 { 0106 return d->customMetaData; 0107 } 0108 0109 BlogPtr Blog::Private::fromJSON(const QVariant &json) 0110 { 0111 BlogPtr blog(new Blog); 0112 const QVariantMap map = json.toMap(); 0113 blog->d->id = map[QStringLiteral("id")].toString(); 0114 blog->d->name = map[QStringLiteral("name")].toString(); 0115 blog->d->description = map[QStringLiteral("description")].toString(); 0116 blog->d->published = QDateTime::fromString(map[QStringLiteral("published")].toString(), Qt::ISODate); 0117 blog->d->updated = QDateTime::fromString(map[QStringLiteral("updated")].toString(), Qt::ISODate); 0118 blog->d->url = map[QStringLiteral("url")].toUrl(); 0119 blog->d->postsCount = map[QStringLiteral("posts")].toMap()[QStringLiteral("totalItems")].toUInt(); 0120 blog->d->pagesCount = map[QStringLiteral("pages")].toMap()[QStringLiteral("totalItems")].toUInt(); 0121 const QVariantMap locale = map[QStringLiteral("locale")].toMap(); 0122 blog->d->language = locale[QStringLiteral("language")].toString(); 0123 blog->d->country = locale[QStringLiteral("country")].toString(); 0124 blog->d->languageVariant = locale[QStringLiteral("variant")].toString(); 0125 const QString metadata = map[QStringLiteral("customMetaData")].toString(); 0126 QJsonDocument document = QJsonDocument::fromJson(metadata.toUtf8()); 0127 blog->d->customMetaData = document.toVariant(); 0128 0129 return blog; 0130 } 0131 0132 BlogPtr Blog::fromJSON(const QByteArray &rawData) 0133 { 0134 QJsonDocument document = QJsonDocument::fromJson(rawData); 0135 if (document.isNull()) { 0136 return BlogPtr(); 0137 } 0138 0139 const QVariant json = document.toVariant(); 0140 const QVariantMap map = json.toMap(); 0141 if (map[QStringLiteral("kind")].toString() != QLatin1StringView("blogger#blog")) { 0142 return BlogPtr(); 0143 } 0144 0145 return Private::fromJSON(map); 0146 } 0147 0148 BlogsList Blog::fromJSONFeed(const QByteArray &rawData) 0149 { 0150 QJsonDocument document = QJsonDocument::fromJson(rawData); 0151 if (document.isNull()) { 0152 return BlogsList(); 0153 } 0154 0155 const QVariant json = document.toVariant(); 0156 const QVariantMap map = json.toMap(); 0157 if (map[QStringLiteral("kind")].toString() != QLatin1StringView("blogger#blogList")) { 0158 return BlogsList(); 0159 } 0160 0161 BlogsList items; 0162 const QVariantList blogs = map[QStringLiteral("items")].toList(); 0163 items.reserve(blogs.size()); 0164 for (const QVariant &blog : blogs) { 0165 items << Blog::Private::fromJSON(blog); 0166 } 0167 return items; 0168 }