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 "pendingcap.h" 0007 #include "capparser.h" 0008 #include <QNetworkReply> 0009 namespace KWeatherCore { 0010 class PendingCAPPrivate : public QObject 0011 { 0012 Q_OBJECT 0013 public: 0014 PendingCAPPrivate(QNetworkReply *reply = nullptr, QObject *parent = nullptr); 0015 bool isFinished = false; 0016 QByteArray data; 0017 Q_SIGNALS: 0018 void networkError(); 0019 void finished(); 0020 private: 0021 void parseCAP(QNetworkReply *reply); 0022 }; 0023 PendingCAPPrivate::PendingCAPPrivate(QNetworkReply *reply, QObject *parent) 0024 : QObject(parent) 0025 { 0026 if (reply) { 0027 connect(reply, &QNetworkReply::finished, this, [this, reply] { 0028 this->parseCAP(reply); 0029 }); 0030 connect(reply, &QNetworkReply::errorOccurred, this, &PendingCAPPrivate::networkError); 0031 } 0032 } 0033 0034 void PendingCAPPrivate::parseCAP(QNetworkReply *reply) 0035 { 0036 reply->deleteLater(); 0037 if (reply->error()) { 0038 qWarning() << "network error when fetching alerts:" 0039 << reply->errorString(); 0040 return; 0041 } 0042 0043 data = reply->readAll(); 0044 isFinished = true; 0045 Q_EMIT finished(); 0046 } 0047 std::unique_ptr<AlertEntry> PendingCAP::value() const 0048 { 0049 if (d->data.isEmpty()) 0050 return {}; 0051 0052 CAPParser parser(d->data); 0053 return parser.parse(); 0054 } 0055 PendingCAP::PendingCAP(QNetworkReply *reply) 0056 : d(new PendingCAPPrivate(reply, this)) 0057 { 0058 connect(d, &PendingCAPPrivate::finished, this, &PendingCAP::finished); 0059 connect(d, &PendingCAPPrivate::networkError, this, &PendingCAP::networkError); 0060 } 0061 bool PendingCAP::isFinished() const 0062 { 0063 return d->isFinished; 0064 } 0065 } 0066 #include "pendingcap.moc"