File indexing completed on 2024-05-05 16:49:22

0001 /*
0002  * SPDX-FileCopyrightText: 2021 Han Young <hanyoung@protonmail.com>
0003  *
0004  * SPDX-License-Identifier: LGPL-2.0-or-later
0005  */
0006 #include "pendingalerts.h"
0007 #include <QNetworkReply>
0008 namespace KWeatherCore
0009 {
0010 class PendingAlertsPrivate : public QObject
0011 {
0012     Q_OBJECT
0013 public:
0014     PendingAlertsPrivate(const QJsonDocument &config,
0015                          QNetworkReply *reply = nullptr,
0016                          QObject *parent = nullptr);
0017     AlertEntries alertEntries;
0018     bool isFinished = false;
0019 Q_SIGNALS:
0020     void networkError();
0021     void finished();
0022 
0023 private:
0024     void parseAlerts(QNetworkReply *reply);
0025     FeedParser *parser = nullptr;
0026 };
0027 PendingAlertsPrivate::PendingAlertsPrivate(const QJsonDocument &config,
0028                                            QNetworkReply *reply,
0029                                            QObject *parent)
0030     : QObject(parent)
0031     , parser(new FeedParser(config, this))
0032 {
0033     if (reply)
0034         connect(reply, &QNetworkReply::finished, this, [this, reply] {
0035             this->parseAlerts(reply);
0036         });
0037 }
0038 void PendingAlertsPrivate::parseAlerts(QNetworkReply *reply)
0039 {
0040     reply->deleteLater();
0041     if (reply->error()) {
0042         qWarning() << "network error when fetching alerts:"
0043                    << reply->errorString();
0044         Q_EMIT networkError();
0045         return;
0046     }
0047     alertEntries = parser->parse(reply->readAll());
0048     isFinished = true;
0049     Q_EMIT finished();
0050 }
0051 PendingAlerts::PendingAlerts(const QJsonDocument &config, QNetworkReply *reply)
0052     : d(new PendingAlertsPrivate(config, reply, this))
0053 {
0054     connect(d, &PendingAlertsPrivate::finished, this, &PendingAlerts::finished);
0055     connect(d,
0056             &PendingAlertsPrivate::networkError,
0057             this,
0058             &PendingAlerts::networkError);
0059 }
0060 bool PendingAlerts::isFinished() const
0061 {
0062     return d->isFinished;
0063 }
0064 AlertEntries PendingAlerts::value() const
0065 {
0066     return d->alertEntries;
0067 }
0068 }
0069 #include "pendingalerts.moc"