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