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 "membership.h" 0011 0012 #include "contactgroupmembership.h" 0013 #include "domainmembership.h" 0014 #include "fieldmetadata.h" 0015 #include "peopleservice.h" 0016 0017 #include <QJsonArray> 0018 #include <QJsonObject> 0019 #include <QJsonValue> 0020 #include <QSharedData> 0021 0022 #include <algorithm> 0023 0024 namespace KGAPI2::People 0025 { 0026 0027 struct MembershipDefinition 0028 { 0029 FieldMetadata metadata; 0030 ContactGroupMembership contactGroupMembership; 0031 DomainMembership domainMembership; 0032 }; 0033 0034 class Membership::Private : public QSharedData 0035 { 0036 public: 0037 explicit Private() = default; 0038 Private(const Private &) = default; 0039 Private(Private &&) noexcept = delete; 0040 Private &operator=(const Private &) = delete; 0041 Private &operator=(Private &&) noexcept = delete; 0042 ~Private() = default; 0043 0044 bool operator==(const Private &other) const 0045 { 0046 return domainMembership == other.domainMembership && contactGroupMembership == other.contactGroupMembership && metadata == other.metadata; 0047 } 0048 0049 bool operator!=(const Private &other) const 0050 { 0051 return !(*this == other); 0052 } 0053 0054 DomainMembership domainMembership{}; 0055 ContactGroupMembership contactGroupMembership{}; 0056 FieldMetadata metadata{}; 0057 }; 0058 0059 Membership::Membership() 0060 : d(new Private) 0061 { 0062 } 0063 0064 Membership::Membership(const MembershipDefinition &definition) 0065 : d(new Private) 0066 { 0067 d->metadata = definition.metadata; 0068 d->contactGroupMembership = definition.contactGroupMembership; 0069 d->domainMembership = definition.domainMembership; 0070 } 0071 0072 Membership::Membership(const Membership &) = default; 0073 Membership::Membership(Membership &&) noexcept = default; 0074 Membership &Membership::operator=(const Membership &) = default; 0075 Membership &Membership::operator=(Membership &&) noexcept = default; 0076 Membership::~Membership() = default; 0077 0078 bool Membership::operator==(const Membership &other) const 0079 { 0080 return *d == *other.d; 0081 } 0082 0083 bool Membership::operator!=(const Membership &other) const 0084 { 0085 return !(*this == other); 0086 } 0087 0088 DomainMembership Membership::domainMembership() const 0089 { 0090 return d->domainMembership; 0091 } 0092 ContactGroupMembership Membership::contactGroupMembership() const 0093 { 0094 return d->contactGroupMembership; 0095 } 0096 0097 void Membership::setContactGroupMembership(const ContactGroupMembership &value) 0098 { 0099 d->contactGroupMembership = value; 0100 } 0101 FieldMetadata Membership::metadata() const 0102 { 0103 return d->metadata; 0104 } 0105 0106 void Membership::setMetadata(const FieldMetadata &value) 0107 { 0108 d->metadata = value; 0109 } 0110 0111 Membership Membership::fromJSON(const QJsonObject &obj) 0112 { 0113 if(obj.isEmpty()) { 0114 return Membership(); 0115 } 0116 0117 MembershipDefinition definition; 0118 0119 const auto metadata = obj.value(QStringLiteral("metadata")).toObject(); 0120 definition.metadata = FieldMetadata::fromJSON(metadata); 0121 0122 const auto contactGroupMembership = obj.value(QStringLiteral("contactGroupMembership")).toObject(); 0123 definition.contactGroupMembership = ContactGroupMembership::fromJSON(contactGroupMembership); 0124 0125 const auto domainMembership = obj.value(QStringLiteral("domainMembership")).toObject(); 0126 definition.domainMembership = DomainMembership::fromJSON(domainMembership); 0127 0128 return Membership(definition); 0129 } 0130 0131 QList<Membership> Membership::fromJSONArray(const QJsonArray &data) 0132 { 0133 QList<Membership> memberships; 0134 0135 for(const auto &membership : data) { 0136 if(membership.isObject()) { 0137 const auto objectifiedMembership = membership.toObject(); 0138 memberships.append(fromJSON(objectifiedMembership)); 0139 } 0140 } 0141 0142 return memberships; 0143 } 0144 0145 QJsonValue Membership::toJSON() const 0146 { 0147 QJsonObject obj; 0148 0149 if (!d->contactGroupMembership.contactGroupResourceName().isEmpty()) { 0150 PeopleUtils::addValueToJsonObjectIfValid(obj, "contactGroupMembership", d->contactGroupMembership.toJSON()); 0151 } else if (d->domainMembership.inViewerDomain()) { 0152 PeopleUtils::addValueToJsonObjectIfValid(obj, "domainMembership", d->domainMembership.toJSON()); 0153 } 0154 // Skip, field metadata is only useful for receiving -> PeopleUtils::addValueToJsonObjectIfValid(obj, "metadata", d->metadata.toJSON()); 0155 return obj; 0156 } 0157 0158 } // namespace KGAPI2::People