File indexing completed on 2024-05-05 16:49:21
0001 /* 0002 * SPDX-FileCopyrightText: 2021 Anjani Kumar <anjanik012@gmail.com> 0003 * SPDX-FileCopyrightText: 2021 Han Young <hanyoung@protonmail.com> 0004 * SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #pragma once 0008 #include "alertentry.h" 0009 #include "alertinfo.h" 0010 0011 #include <QObject> 0012 #include <QXmlStreamReader> 0013 #include <QHash> 0014 0015 #include <memory> 0016 0017 namespace KWeatherCore 0018 { 0019 class CAPParser 0020 { 0021 public: 0022 explicit CAPParser(const QByteArray &data = {}); 0023 void setData(const QByteArray &data); 0024 std::unique_ptr<AlertEntry> parse(); 0025 0026 private: 0027 AlertInfo parseInfo(); 0028 QXmlStreamReader m_xml; 0029 enum class Tags { 0030 ALERT, 0031 IDENTIFIER, 0032 SENDER, 0033 SENT_TIME, 0034 STATUS, 0035 MSG_TYPE, 0036 SCOPE, 0037 NOTE, 0038 INFO 0039 }; 0040 inline const static QHash<QString, Tags> tags { 0041 {QStringLiteral("alert"), Tags::ALERT}, 0042 {QStringLiteral("identifier"), Tags::IDENTIFIER}, 0043 {QStringLiteral("sender"), Tags::SENDER}, 0044 {QStringLiteral("sent"), Tags::SENT_TIME}, 0045 {QStringLiteral("msgType"), Tags::MSG_TYPE}, 0046 {QStringLiteral("status"), Tags::STATUS}, 0047 {QStringLiteral("scope"), Tags::SCOPE}, 0048 {QStringLiteral("note"), Tags::NOTE}, 0049 {QStringLiteral("info"), Tags::INFO}}; 0050 0051 enum class InfoTags { 0052 HEADLINE, 0053 DESCRIPTION, 0054 EVENT, 0055 EFFECTIVE_TIME, 0056 ONSET_TIME, 0057 EXPIRE_TIME, 0058 CATEGORY, 0059 INSTRUCTION, 0060 URGENCY, 0061 SEVERITY, 0062 CERTAINITY, 0063 PARAMETER, 0064 AREA, 0065 SENDERNAME, 0066 LANGUAGE 0067 }; 0068 0069 inline const static QHash<QString, InfoTags> infoTags = { 0070 {QStringLiteral("category"), InfoTags::CATEGORY}, 0071 {QStringLiteral("event"), InfoTags::EVENT}, 0072 {QStringLiteral("urgency"), InfoTags::URGENCY}, 0073 {QStringLiteral("severity"), InfoTags::SEVERITY}, 0074 {QStringLiteral("certainty"), InfoTags::CERTAINITY}, 0075 {QStringLiteral("effective"), InfoTags::EFFECTIVE_TIME}, 0076 {QStringLiteral("onset"), InfoTags::ONSET_TIME}, 0077 {QStringLiteral("expires"), InfoTags::EXPIRE_TIME}, 0078 {QStringLiteral("headline"), InfoTags::HEADLINE}, 0079 {QStringLiteral("description"), InfoTags::DESCRIPTION}, 0080 {QStringLiteral("instruction"), InfoTags::INSTRUCTION}, 0081 {QStringLiteral("area"), InfoTags::AREA}, 0082 {QStringLiteral("senderName"), InfoTags::SENDERNAME}, 0083 {QStringLiteral("language"), InfoTags::LANGUAGE} 0084 }; 0085 0086 // constexpr hashmap when? 0087 inline const static QHash<QString, AlertInfo::Category> categoryMap = { 0088 {QStringLiteral("Geo"), AlertInfo::Category::Geo}, 0089 {QStringLiteral("Met"), AlertInfo::Category::Met}, 0090 {QStringLiteral("Safety"), AlertInfo::Category::Safety}, 0091 {QStringLiteral("Security"), AlertInfo::Category::Security}, 0092 {QStringLiteral("Rescue"), AlertInfo::Category::Rescue}, 0093 {QStringLiteral("Fire"), AlertInfo::Category::Fire}, 0094 {QStringLiteral("Health"), AlertInfo::Category::Health}, 0095 {QStringLiteral("Env"), AlertInfo::Category::Env}, 0096 {QStringLiteral("Transport"), AlertInfo::Category::Transport}, 0097 {QStringLiteral("Infra"), AlertInfo::Category::Infra}, 0098 {QStringLiteral("CBRNE"), AlertInfo::Category::CBRNE}, 0099 {QStringLiteral("Other"), AlertInfo::Category::Other} 0100 }; 0101 }; 0102 }