File indexing completed on 2024-05-12 05:22:29

0001 /*
0002  * This file is part of LibKGAPI library
0003  *
0004  * SPDX-FileCopyrightText: 2023 Claudio Cambra <claudio.cambra@kde.org>
0005  *
0006  * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0007  */
0008 
0009 #include "personphotodeletejob.h"
0010 #include "peopleservice.h"
0011 #include "person.h"
0012 #include "utils.h"
0013 
0014 #include <QNetworkRequest>
0015 #include <QNetworkReply>
0016 #include <QUrlQuery>
0017 #include <QJsonDocument>
0018 #include <QJsonObject>
0019 #include <QJsonArray>
0020 
0021 namespace KGAPI2::People
0022 {
0023 
0024 class Q_DECL_HIDDEN PersonPhotoDeleteJob::Private
0025 {
0026 public:
0027     explicit Private(PersonPhotoDeleteJob *parent);
0028     void processPersonPhoto();
0029 
0030     QString personResourceName;
0031     QByteArray photoRawData;
0032 
0033 private:
0034     PersonPhotoDeleteJob * const q;
0035 };
0036 
0037 PersonPhotoDeleteJob::Private::Private(PersonPhotoDeleteJob *parent)
0038     : q(parent)
0039 {
0040 }
0041 
0042 void PersonPhotoDeleteJob::Private::processPersonPhoto()
0043 {
0044     const auto deleteUrl = PeopleService::deleteContactPhotoUrl(personResourceName, PeopleService::allPersonFields());
0045     QNetworkRequest request(deleteUrl);
0046     request.setRawHeader("Host", "people.googleapis.com");
0047     q->enqueueRequest(request);
0048 }
0049 
0050 PersonPhotoDeleteJob::PersonPhotoDeleteJob(const QString &personResourceName, const AccountPtr &account, QObject* parent)
0051     : ModifyJob(account, parent)
0052     , d(std::make_unique<Private>(this))
0053 {
0054     d->personResourceName = personResourceName;
0055 }
0056 
0057 PersonPhotoDeleteJob::~PersonPhotoDeleteJob() = default;
0058 
0059 void PersonPhotoDeleteJob::start()
0060 {
0061     d->processPersonPhoto();
0062 }
0063 
0064 void PersonPhotoDeleteJob::dispatchRequest(QNetworkAccessManager *accessManager,
0065                                            const QNetworkRequest &request,
0066                                            const QByteArray &data,
0067                                            const QString &contentType)
0068 {
0069     Q_UNUSED(data);
0070     Q_UNUSED(contentType);
0071 
0072     QNetworkRequest r = request;
0073     if (!r.hasRawHeader("If-Match")) {
0074         r.setRawHeader("If-Match", "*");
0075     }
0076 
0077     accessManager->sendCustomRequest(r, "DELETE");
0078 }
0079 
0080 ObjectsList PersonPhotoDeleteJob::handleReplyWithItems(const QNetworkReply *reply, const QByteArray &rawData)
0081 {
0082     const auto contentTypeString = reply->header(QNetworkRequest::ContentTypeHeader).toString();
0083     const auto contentType = Utils::stringToContentType(contentTypeString);
0084 
0085     if (contentType != KGAPI2::JSON) {
0086         setError(KGAPI2::InvalidResponse);
0087         setErrorString(tr("Invalid response content type"));
0088         emitFinished();
0089         return {};
0090     }
0091 
0092     ObjectsList items;
0093     const auto json = QJsonDocument::fromJson(rawData);
0094     if (json.isObject()) {
0095         const auto jsonObject = json.object();
0096         const auto personJson = jsonObject.value(QStringLiteral("person")).toObject();
0097         const auto person = Person::fromJSON(personJson);
0098         items << person;
0099     }
0100 
0101     emitFinished();
0102     return items;
0103 }
0104 
0105 }
0106 
0107 #include "moc_personphotodeletejob.cpp"