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"