File indexing completed on 2024-05-12 05:22:25

0001 /*
0002  * SPDX-FileCopyrightText: 2021 Daniel Vrátil <dvratil@kde.org>
0003  *
0004  * SPDX-License-Identifier: LGPL-2.1-only
0005  * SPDX-License-Identifier: LGPL-3.0-only
0006  * SPDX-License-Identifier: LicenseRef-KDE-Accepted-LGPL
0007  */
0008 
0009 #include "calendarurl.h"
0010 
0011 #include "fieldmetadata.h"
0012 #include "peopleservice.h"
0013 
0014 #include <QJsonArray>
0015 #include <QJsonObject>
0016 #include <QJsonValue>
0017 #include <QSharedData>
0018 
0019 #include <algorithm>
0020 
0021 namespace KGAPI2::People
0022 {
0023 class CalendarUrl::Private : public QSharedData
0024 {
0025 public:
0026     explicit Private() = default;
0027     Private(const Private &) = default;
0028     Private(Private &&) noexcept = delete;
0029     Private &operator=(const Private &) = delete;
0030     Private &operator=(Private &&) noexcept = delete;
0031     ~Private() = default;
0032 
0033     bool operator==(const Private &other) const
0034     {
0035         return url == other.url && metadata == other.metadata && type == other.type && formattedType == other.formattedType;
0036     }
0037 
0038     bool operator!=(const Private &other) const
0039     {
0040         return !(*this == other);
0041     }
0042 
0043     QString url{};
0044     FieldMetadata metadata{};
0045     QString type{};
0046     QString formattedType{};
0047 };
0048 
0049 CalendarUrl::CalendarUrl()
0050     : d(new Private)
0051 {
0052 }
0053 
0054 CalendarUrl::CalendarUrl(const CalendarUrl &) = default;
0055 CalendarUrl::CalendarUrl(CalendarUrl &&) noexcept = default;
0056 CalendarUrl &CalendarUrl::operator=(const CalendarUrl &) = default;
0057 CalendarUrl &CalendarUrl::operator=(CalendarUrl &&) noexcept = default;
0058 CalendarUrl::~CalendarUrl() = default;
0059 
0060 bool CalendarUrl::operator==(const CalendarUrl &other) const
0061 {
0062     return *d == *other.d;
0063 }
0064 
0065 bool CalendarUrl::operator!=(const CalendarUrl &other) const
0066 {
0067     return !(*this == other);
0068 }
0069 
0070 QString CalendarUrl::url() const
0071 {
0072     return d->url;
0073 }
0074 
0075 void CalendarUrl::setUrl(const QString &value)
0076 {
0077     d->url = value;
0078 }
0079 FieldMetadata CalendarUrl::metadata() const
0080 {
0081     return d->metadata;
0082 }
0083 
0084 void CalendarUrl::setMetadata(const FieldMetadata &value)
0085 {
0086     d->metadata = value;
0087 }
0088 QString CalendarUrl::type() const
0089 {
0090     return d->type;
0091 }
0092 
0093 void CalendarUrl::setType(const QString &value)
0094 {
0095     d->type = value;
0096 }
0097 QString CalendarUrl::formattedType() const
0098 {
0099     return d->formattedType;
0100 }
0101 
0102 CalendarUrl CalendarUrl::fromJSON(const QJsonObject &obj)
0103 {
0104     CalendarUrl calendarUrl;
0105 
0106     if(!obj.isEmpty()) {
0107         const auto metadata = obj.value(QStringLiteral("metadata")).toObject();
0108         calendarUrl.d->metadata = FieldMetadata::fromJSON(metadata);
0109         calendarUrl.d->url = obj.value(QStringLiteral("url")).toString();
0110         calendarUrl.d->type = obj.value(QStringLiteral("type")).toString();
0111         calendarUrl.d->formattedType = obj.value(QStringLiteral("formattedType")).toString();
0112     }
0113 
0114     return calendarUrl;
0115 }
0116 
0117 QList<CalendarUrl> CalendarUrl::fromJSONArray(const QJsonArray &data)
0118 {
0119     QList<CalendarUrl> calendarUrls;
0120 
0121     for(const auto &calendarUrl : data) {
0122         if(calendarUrl.isObject()) {
0123             const auto objectifiedCalendarUrl = calendarUrl.toObject();
0124             calendarUrls.append(fromJSON(objectifiedCalendarUrl));
0125         }
0126     }
0127 
0128     return calendarUrls;
0129 }
0130 
0131 QJsonValue CalendarUrl::toJSON() const
0132 {
0133     QJsonObject obj;
0134 
0135     PeopleUtils::addValueToJsonObjectIfValid(obj, "url", d->url);
0136     // Skip, field metadata is only useful for receiving -> PeopleUtils::addValueToJsonObjectIfValid(obj, "metadata"}, d->metadata.toJSON());
0137     PeopleUtils::addValueToJsonObjectIfValid(obj, "type", d->type);
0138     // Output only -> PeopleUtils::addValueToJsonObjectIfValid(obj, "formattedType"}, d->formattedType);
0139     return obj;
0140 }
0141 
0142 } // namespace KGAPI2::People