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

0001 /*
0002  * This file is part of LibKGAPI library
0003  *
0004  * SPDX-FileCopyrightText: 2023 Claudio Cambra <claudio.cambra@kde.org>
0005  * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0006  *
0007  */
0008 
0009 #include "contactgroupdeletejob.h"
0010 #include "peopleservice.h"
0011 #include "private/queuehelper_p.h"
0012 
0013 #include <QNetworkRequest>
0014 #include <QNetworkReply>
0015 #include <QUrlQuery>
0016 #include <QJsonDocument>
0017 #include <QJsonObject>
0018 #include <QJsonArray>
0019 
0020 namespace KGAPI2::People
0021 {
0022 
0023 class Q_DECL_HIDDEN ContactGroupDeleteJob::Private
0024 {
0025 public:
0026     explicit Private(ContactGroupDeleteJob *parent);
0027     void processNextContactGroup();
0028 
0029     QueueHelper<QString> groupResourceNames;
0030     QString lastGroupResourceName;
0031 
0032 private:
0033     ContactGroupDeleteJob * const q;
0034 };
0035 
0036 ContactGroupDeleteJob::Private::Private(ContactGroupDeleteJob *parent)
0037     : q(parent)
0038 {
0039 }
0040 
0041 void ContactGroupDeleteJob::Private::processNextContactGroup()
0042 {
0043     if (groupResourceNames.atEnd()) {
0044         q->emitFinished();
0045         return;
0046     }
0047 
0048     const auto groupResourceName = groupResourceNames.current();
0049     const auto deleteUrl = PeopleService::deleteContactGroupUrl(groupResourceName, false);
0050     QNetworkRequest request(deleteUrl);
0051     request.setRawHeader("Host", "people.googleapis.com");
0052     q->enqueueRequest(request);
0053 }
0054 
0055 
0056 ContactGroupDeleteJob::ContactGroupDeleteJob(const QStringList &contactGroupResourceNames, const AccountPtr& account, QObject* parent)
0057     : DeleteJob(account, parent)
0058     , d(std::make_unique<Private>(this))
0059 {
0060     d->groupResourceNames = contactGroupResourceNames;
0061 }
0062 
0063 ContactGroupDeleteJob::ContactGroupDeleteJob(const QString &contactGroupResourceName, const AccountPtr &account, QObject* parent)
0064     : DeleteJob(account, parent)
0065     , d(std::make_unique<Private>(this))
0066 {
0067     d->groupResourceNames << contactGroupResourceName;
0068 }
0069 
0070 ContactGroupDeleteJob::~ContactGroupDeleteJob() = default;
0071 
0072 void ContactGroupDeleteJob::start()
0073 {
0074     d->processNextContactGroup();
0075 }
0076 
0077 void ContactGroupDeleteJob::handleReply(const QNetworkReply *reply, const QByteArray &rawData)
0078 {
0079     Q_UNUSED(reply);
0080     Q_UNUSED(rawData);
0081 
0082     d->groupResourceNames.currentProcessed();
0083     d->processNextContactGroup();
0084 }
0085 
0086 }
0087 
0088 #include "moc_contactgroupdeletejob.cpp"