Kgapi

photo.cpp
1/*
2 * SPDX-FileCopyrightText: 2021 Daniel Vrátil <dvratil@kde.org>
3 * SPDX-FileCopyrightText: 2022 Claudio Cambra <claudio.cambra@kde.org>
4 *
5 * SPDX-License-Identifier: LGPL-2.1-only
6 * SPDX-License-Identifier: LGPL-3.0-only
7 * SPDX-License-Identifier: LicenseRef-KDE-Accepted-LGPL
8 */
9
10#include "photo.h"
11
12#include "fieldmetadata.h"
13#include "peopleservice.h"
14
15#include <QJsonArray>
16#include <QJsonObject>
17#include <QJsonValue>
18#include <QSharedData>
19
20#include <algorithm>
21
22namespace KGAPI2::People
23{
24class Photo::Private : public QSharedData
25{
26public:
27 explicit Private() = default;
28 Private(const Private &) = default;
29 Private(Private &&) noexcept = delete;
30 Private &operator=(const Private &) = delete;
31 Private &operator=(Private &&) noexcept = delete;
32 ~Private() = default;
33
34 bool operator==(const Private &other) const
35 {
36 return metadata == other.metadata && isDefault == other.isDefault && url == other.url;
37 }
38
39 bool operator!=(const Private &other) const
40 {
41 return !(*this == other);
42 }
43
44 FieldMetadata metadata{};
45 bool isDefault{};
46 QString url{};
47};
48
50 : d(new Private)
51{
52}
53
54Photo::Photo(const Photo &) = default;
55Photo::Photo(Photo &&) noexcept = default;
56Photo &Photo::operator=(const Photo &) = default;
57Photo &Photo::operator=(Photo &&) noexcept = default;
58Photo::~Photo() = default;
59
60bool Photo::operator==(const Photo &other) const
61{
62 return *d == *other.d;
63}
64
65bool Photo::operator!=(const Photo &other) const
66{
67 return !(*this == other);
68}
69
71{
72 return d->metadata;
73}
74
76{
77 d->metadata = value;
78}
79bool Photo::isDefault() const
80{
81 return d->isDefault;
82}
83
84void Photo::setIsDefault(bool value)
85{
86 d->isDefault = value;
87}
89{
90 return d->url;
91}
92
93void Photo::setUrl(const QString &value)
94{
95 d->url = value;
96}
97
98Photo Photo::fromJSON(const QJsonObject &obj)
99{
100 Photo photo;
101
102 if(!obj.isEmpty()) {
103 const auto metadata = obj.value(QStringLiteral("metadata")).toObject();
104 photo.setMetadata(FieldMetadata::fromJSON(metadata));
105 photo.setUrl(obj.value(QStringLiteral("url")).toString());
106 photo.setIsDefault(obj.value(QStringLiteral("default")).toBool());
107 }
108
109 return photo;
110}
111
112QList<Photo> Photo::fromJSONArray(const QJsonArray &data)
113{
114 QList<Photo> photos;
115
116 for(const auto &photo : data) {
117 if(photo.isObject()) {
118 const auto objectifiedPhoto = photo.toObject();
119 photos.append(fromJSON(objectifiedPhoto));
120 }
121 }
122
123 return photos;
124}
125
126QJsonValue Photo::toJSON() const
127{
128 QJsonObject obj;
129
130 // Skip, field metadata is only useful for receiving -> PeopleUtils::addValueToJsonObjectIfValid(obj, "metadata", d->metadata.toJSON());
131 PeopleUtils::addValueToJsonObjectIfValid(obj, "default", d->isDefault);
132 PeopleUtils::addValueToJsonObjectIfValid(obj, "url", d->url);
133 return obj;
134}
135
136} // namespace KGAPI2::People
Metadata about a field.
A person's photo.
Definition photo.h:35
void setMetadata(const FieldMetadata &value)
Sets value of the metadata property.
Definition photo.cpp:75
bool isDefault() const
True if the photo is a default photo; false if the photo is a user-provided photo.
Definition photo.cpp:79
Photo()
Constructs a new Photo.
Definition photo.cpp:49
QString url() const
The URL of the photo.
Definition photo.cpp:88
void setIsDefault(bool value)
Sets value of the isDefault property.
Definition photo.cpp:84
void setUrl(const QString &value)
Sets value of the url property.
Definition photo.cpp:93
FieldMetadata metadata() const
Metadata about the photo.
Definition photo.cpp:70
bool isEmpty() const const
QJsonValue value(QLatin1StringView key) const const
QJsonObject toObject() const const
void append(QList< T > &&value)
This file is part of the KDE documentation.
Documentation copyright © 1996-2024 The KDE developers.
Generated on Fri May 3 2024 11:50:41 by doxygen 1.10.0 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.