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"