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