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"