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 }