File indexing completed on 2024-05-12 05:22:27
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 "nickname.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 Nickname::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 value == other.value && type == other.type && metadata == other.metadata; 0037 } 0038 0039 bool operator!=(const Private &other) const 0040 { 0041 return !(*this == other); 0042 } 0043 0044 QString value{}; 0045 Nickname::Type type{}; 0046 FieldMetadata metadata{}; 0047 }; 0048 0049 Nickname::Nickname() 0050 : d(new Private) 0051 { 0052 } 0053 0054 Nickname::Nickname(const Nickname &) = default; 0055 Nickname::Nickname(Nickname &&) noexcept = default; 0056 Nickname &Nickname::operator=(const Nickname &) = default; 0057 Nickname &Nickname::operator=(Nickname &&) noexcept = default; 0058 Nickname::~Nickname() = default; 0059 0060 bool Nickname::operator==(const Nickname &other) const 0061 { 0062 return *d == *other.d; 0063 } 0064 0065 bool Nickname::operator!=(const Nickname &other) const 0066 { 0067 return !(*this == other); 0068 } 0069 0070 QString Nickname::value() const 0071 { 0072 return d->value; 0073 } 0074 0075 void Nickname::setValue(const QString &value) 0076 { 0077 d->value = value; 0078 } 0079 Nickname::Nickname::Type Nickname::type() const 0080 { 0081 return d->type; 0082 } 0083 0084 void Nickname::setType(Nickname::Type value) 0085 { 0086 d->type = value; 0087 } 0088 FieldMetadata Nickname::metadata() const 0089 { 0090 return d->metadata; 0091 } 0092 0093 void Nickname::setMetadata(const FieldMetadata &value) 0094 { 0095 d->metadata = value; 0096 } 0097 0098 Nickname Nickname::fromJSON(const QJsonObject &obj) 0099 { 0100 Nickname nickname; 0101 0102 if(!obj.isEmpty()) { 0103 const auto metadata = obj.value(QStringLiteral("metadata")).toObject(); 0104 nickname.setMetadata(FieldMetadata::fromJSON(metadata)); 0105 nickname.setValue(obj.value(QStringLiteral("value")).toString()); 0106 0107 const auto type = obj.value(QStringLiteral("type")).toString(); 0108 if (type == QLatin1StringView("MAIDEN_NAME")) { 0109 nickname.setType(Nickname::Type::MAIDEN_NAME); 0110 } else if (type == QLatin1StringView("INITIALS")) { 0111 nickname.setType(Nickname::Type::INITIALS); 0112 } else if (type == QLatin1StringView("GPLUS")) { 0113 nickname.setType(Nickname::Type::GPLUS); 0114 } else if (type == QLatin1StringView("OTHER_NAME")) { 0115 nickname.setType(Nickname::Type::OTHER_NAME); 0116 } else if (type == QLatin1StringView("ALTERNATE_NAME")) { 0117 nickname.setType(Nickname::Type::ALTERNATE_NAME); 0118 } else if (type == QLatin1StringView("SHORT_NAME")) { 0119 nickname.setType(Nickname::Type::SHORT_NAME); 0120 } else { 0121 nickname.setType(Nickname::Type::DEFAULT); 0122 } 0123 } 0124 0125 return nickname; 0126 } 0127 0128 QList<Nickname> Nickname::fromJSONArray(const QJsonArray &data) 0129 { 0130 QList<Nickname> nicknames; 0131 0132 for(const auto &nickname : data) { 0133 if(nickname.isObject()) { 0134 const auto objectifiedNickname = nickname.toObject(); 0135 nicknames.append(fromJSON(objectifiedNickname)); 0136 } 0137 } 0138 0139 return nicknames; 0140 } 0141 0142 QJsonValue Nickname::toJSON() const 0143 { 0144 QJsonObject obj; 0145 0146 PeopleUtils::addValueToJsonObjectIfValid(obj, "value", d->value); 0147 switch (d->type) { 0148 case Type::DEFAULT: 0149 PeopleUtils::addValueToJsonObjectIfValid(obj, "type", QStringLiteral("DEFAULT")); 0150 break; 0151 case Type::MAIDEN_NAME: 0152 PeopleUtils::addValueToJsonObjectIfValid(obj, "type", QStringLiteral("MAIDEN_NAME")); 0153 break; 0154 case Type::INITIALS: 0155 PeopleUtils::addValueToJsonObjectIfValid(obj, "type", QStringLiteral("INITIALS")); 0156 break; 0157 case Type::GPLUS: 0158 PeopleUtils::addValueToJsonObjectIfValid(obj, "type", QStringLiteral("GPLUS")); 0159 break; 0160 case Type::OTHER_NAME: 0161 PeopleUtils::addValueToJsonObjectIfValid(obj, "type", QStringLiteral("OTHER_NAME")); 0162 break; 0163 case Type::ALTERNATE_NAME: 0164 PeopleUtils::addValueToJsonObjectIfValid(obj, "type", QStringLiteral("ALTERNATE_NAME")); 0165 break; 0166 case Type::SHORT_NAME: 0167 PeopleUtils::addValueToJsonObjectIfValid(obj, "type", QStringLiteral("SHORT_NAME")); 0168 break; 0169 } 0170 // Skip, field metadata is only useful for receiving -> PeopleUtils::addValueToJsonObjectIfValid(obj, "metadata", d->metadata.toJSON()); 0171 return obj; 0172 } 0173 0174 } // namespace KGAPI2::People