File indexing completed on 2024-05-12 05:22:30
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 "profilemetadata.h" 0011 #include "peopleservice.h" 0012 0013 #include <QJsonArray> 0014 #include <QJsonObject> 0015 #include <QJsonValue> 0016 #include <QSharedData> 0017 0018 #include <algorithm> 0019 0020 namespace KGAPI2::People 0021 { 0022 class ProfileMetadata::Private : public QSharedData 0023 { 0024 public: 0025 explicit Private() = default; 0026 Private(const Private &) = default; 0027 Private(Private &&) noexcept = delete; 0028 Private &operator=(const Private &) = delete; 0029 Private &operator=(Private &&) noexcept = delete; 0030 ~Private() = default; 0031 0032 bool operator==(const Private &other) const 0033 { 0034 return userTypes == other.userTypes && objectType == other.objectType; 0035 } 0036 0037 bool operator!=(const Private &other) const 0038 { 0039 return !(*this == other); 0040 } 0041 0042 QList<ProfileMetadata::UserTypes> userTypes{}; 0043 ProfileMetadata::ObjectType objectType{}; 0044 }; 0045 0046 ProfileMetadata::ProfileMetadata() 0047 : d(new Private) 0048 { 0049 } 0050 0051 ProfileMetadata::ProfileMetadata(const ProfileMetadata &) = default; 0052 ProfileMetadata::ProfileMetadata(ProfileMetadata &&) noexcept = default; 0053 ProfileMetadata &ProfileMetadata::operator=(const ProfileMetadata &) = default; 0054 ProfileMetadata &ProfileMetadata::operator=(ProfileMetadata &&) noexcept = default; 0055 ProfileMetadata::~ProfileMetadata() = default; 0056 0057 bool ProfileMetadata::operator==(const ProfileMetadata &other) const 0058 { 0059 return *d == *other.d; 0060 } 0061 0062 bool ProfileMetadata::operator!=(const ProfileMetadata &other) const 0063 { 0064 return !(*this == other); 0065 } 0066 0067 QList<ProfileMetadata::UserTypes> ProfileMetadata::userTypes() const 0068 { 0069 return d->userTypes; 0070 } 0071 ProfileMetadata::ProfileMetadata::ObjectType ProfileMetadata::objectType() const 0072 { 0073 return d->objectType; 0074 } 0075 0076 ProfileMetadata ProfileMetadata::fromJSON(const QJsonObject &obj) 0077 { 0078 ProfileMetadata profileMetadata; 0079 0080 if(!obj.isEmpty()) { 0081 const auto objectTypeEnumString = obj.value(QStringLiteral("objectType")); 0082 if (objectTypeEnumString == QLatin1StringView("PERSON")) { 0083 profileMetadata.d->objectType = ObjectType::PERSON; 0084 } else if (objectTypeEnumString == QLatin1StringView("PAGE")) { 0085 profileMetadata.d->objectType = ObjectType::PAGE; 0086 } else { 0087 profileMetadata.d->objectType = ObjectType::OBJECT_TYPE_UNSPECIFIED; 0088 } 0089 0090 if(obj.value(QStringLiteral("userTypes")).isArray()) { 0091 const auto userTypesJsonArray = obj.value(QStringLiteral("userTypes")).toArray(); 0092 0093 for (const auto &userType : userTypesJsonArray) { 0094 if(userType == obj.value(QStringLiteral("GOOGLE_USER"))) { 0095 profileMetadata.d->userTypes.append(UserTypes::GOOGLE_USER); 0096 } else if(userType == obj.value(QStringLiteral("GPLUS_USER"))) { 0097 profileMetadata.d->userTypes.append(UserTypes::GPLUS_USER); 0098 } else if(userType == obj.value(QStringLiteral("GOOGLE_APPS_USER"))) { 0099 profileMetadata.d->userTypes.append(UserTypes::GOOGLE_APPS_USER); 0100 } else { 0101 profileMetadata.d->userTypes.append(UserTypes::USER_TYPE_UNKNOWN); 0102 } 0103 } 0104 } else { 0105 profileMetadata.d->userTypes.append(UserTypes::USER_TYPE_UNKNOWN); 0106 } 0107 } 0108 0109 return profileMetadata; 0110 } 0111 0112 QJsonValue ProfileMetadata::toJSON() const 0113 { 0114 QJsonObject obj; 0115 0116 { 0117 QJsonArray arr; 0118 std::transform(d->userTypes.cbegin(), d->userTypes.cend(), std::back_inserter(arr), [](const auto &val) { 0119 switch (val) { 0120 default: 0121 case UserTypes::USER_TYPE_UNKNOWN: 0122 return QStringLiteral("USER_TYPE_UNKNOWN"); 0123 case UserTypes::GOOGLE_USER: 0124 return QStringLiteral("GOOGLE_USER"); 0125 case UserTypes::GPLUS_USER: 0126 return QStringLiteral("GPLUS_USER"); 0127 case UserTypes::GOOGLE_APPS_USER: 0128 return QStringLiteral("GOOGLE_APPS_USER"); 0129 } 0130 }); 0131 if (!arr.isEmpty()) { 0132 PeopleUtils::addValueToJsonObjectIfValid(obj, "userTypes", std::move(arr)); 0133 } 0134 } 0135 switch (d->objectType) { 0136 case ObjectType::OBJECT_TYPE_UNSPECIFIED: 0137 PeopleUtils::addValueToJsonObjectIfValid(obj, "objectType", QStringLiteral("OBJECT_TYPE_UNSPECIFIED")); 0138 break; 0139 case ObjectType::PERSON: 0140 PeopleUtils::addValueToJsonObjectIfValid(obj, "objectType", QStringLiteral("PERSON")); 0141 break; 0142 case ObjectType::PAGE: 0143 PeopleUtils::addValueToJsonObjectIfValid(obj, "objectType", QStringLiteral("PAGE")); 0144 break; 0145 } 0146 return obj; 0147 } 0148 0149 } // namespace KGAPI2::People