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 "persondeletejob.h" 0010 #include "peopleservice.h" 0011 #include "person.h" 0012 #include "private/queuehelper_p.h" 0013 0014 #include <QNetworkRequest> 0015 #include <QNetworkReply> 0016 #include <QUrlQuery> 0017 #include <QJsonDocument> 0018 #include <QJsonObject> 0019 #include <QJsonArray> 0020 0021 #include <KContacts/Picture> 0022 0023 namespace KGAPI2::People 0024 { 0025 0026 class Q_DECL_HIDDEN PersonDeleteJob::Private 0027 { 0028 public: 0029 explicit Private(PersonDeleteJob *parent); 0030 void processNextPerson(); 0031 0032 QueueHelper<QString> peopleResourceNames; 0033 0034 private: 0035 PersonDeleteJob * const q; 0036 }; 0037 0038 PersonDeleteJob::Private::Private(PersonDeleteJob *parent) 0039 : q(parent) 0040 { 0041 } 0042 0043 void PersonDeleteJob::Private::processNextPerson() 0044 { 0045 if (peopleResourceNames.atEnd()) { 0046 q->emitFinished(); 0047 return; 0048 } 0049 0050 const auto person = peopleResourceNames.current(); 0051 const auto deleteUrl = PeopleService::deleteContactUrl(person); 0052 QNetworkRequest request(deleteUrl); 0053 request.setRawHeader("Host", "people.googleapis.com"); 0054 q->enqueueRequest(request); 0055 } 0056 0057 PersonDeleteJob::PersonDeleteJob(const QString &peopleResourceName, const AccountPtr &account, QObject *parent) 0058 : DeleteJob(account, parent) 0059 , d(std::make_unique<Private>(this)) 0060 { 0061 d->peopleResourceNames << peopleResourceName; 0062 } 0063 0064 PersonDeleteJob::PersonDeleteJob(const QStringList &peopleResourceNames, const AccountPtr &account, QObject *parent) 0065 : DeleteJob(account, parent) 0066 , d(std::make_unique<Private>(this)) 0067 { 0068 d->peopleResourceNames = peopleResourceNames; 0069 } 0070 0071 PersonDeleteJob::PersonDeleteJob(const PersonList &people, const AccountPtr &account, QObject* parent) 0072 : DeleteJob(account, parent) 0073 , d(std::make_unique<Private>(this)) 0074 { 0075 QStringList peopleResourceNames; 0076 std::transform(people.cbegin(), people.cend(), std::back_inserter(peopleResourceNames), [](const PersonPtr &person) { 0077 return person->resourceName(); 0078 }); 0079 d->peopleResourceNames = peopleResourceNames; 0080 } 0081 0082 PersonDeleteJob::PersonDeleteJob(const PersonPtr &person, const AccountPtr &account, QObject* parent) 0083 : DeleteJob(account, parent) 0084 , d(std::make_unique<Private>(this)) 0085 { 0086 d->peopleResourceNames << person->resourceName(); 0087 } 0088 0089 PersonDeleteJob::~PersonDeleteJob() = default; 0090 0091 void PersonDeleteJob::start() 0092 { 0093 d->processNextPerson(); 0094 } 0095 0096 void PersonDeleteJob::handleReply(const QNetworkReply *reply, const QByteArray &rawData) 0097 { 0098 Q_UNUSED(reply); 0099 Q_UNUSED(rawData); 0100 0101 d->peopleResourceNames.currentProcessed(); 0102 d->processNextPerson(); 0103 } 0104 0105 } 0106 0107 #include "moc_persondeletejob.cpp"