7#include "kweathercore_p.h"
15 setConfig(configFile);
20 const auto obj = configFile.
object();
23 m_entryMarker = obj[
QLatin1String(
"entry_marker")].toString();
27 if (cap_it != obj.end()) {
29 const auto cap_obj = cap_it->toObject();
30 m_capLinkElementMarker = cap_obj[
QLatin1String(
"element")].toString();
32 m_capValueMarker = cap_obj[
QLatin1String(
"value")].toString();
35 m_capLinkElementMarker.clear();
36 m_capValueMarker.clear();
37 m_capValueType.clear();
42 if (area_it != obj.end()) {
44 const auto area_obj = area_it->toObject();
45 m_areaNameMarker = area_obj[
QLatin1String(
"name")].toString();
46 m_polygonMarker = area_obj[
QLatin1String(
"polygon")].toString();
51 m_areaNameMarker.clear();
52 m_polygonMarker.clear();
53 m_FIPS6Marker.clear();
59 m_certaintyMarker = obj[
QLatin1String(
"certainty")].toString();
62 if (date_it != obj.end()) {
64 const auto date_obj = date_it->toObject();
73std::unique_ptr<std::vector<std::unique_ptr<AlertFeedEntry>>> FeedParser::parse(
const QByteArray &data)
const
76 std::unique_ptr<std::vector<std::unique_ptr<AlertFeedEntry>>> result(
new std::vector<std::unique_ptr<AlertFeedEntry>>());
78 while (!reader.atEnd()) {
79 result->push_back(parseOneEntry(reader));
84std::unique_ptr<AlertFeedEntry> FeedParser::parseOneEntry(
QXmlStreamReader &reader)
const
86 std::unique_ptr<AlertFeedEntry> entry(
new AlertFeedEntry);
87 std::vector<std::pair<QString, QString>> areaCodes;
89 if (reader.
name() == m_titleMarker) {
91 }
else if (reader.
name() == m_summaryMarker) {
93 }
else if (reader.
name() == m_urgencyMarker) {
94 entry->setUrgency(KWeatherCorePrivate::urgencyStringToEnum(reader.
readElementText()));
95 }
else if (reader.
name() == m_severityMarker) {
96 entry->setSeverity(KWeatherCorePrivate::severityStringToEnum(reader.
readElementText()));
97 }
else if (reader.
name() == m_certaintyMarker) {
98 entry->setCertainty(KWeatherCorePrivate::certaintyStringToEnum(reader.
readElementText()));
99 }
else if (m_hasCap && reader.
name() == m_capLinkElementMarker) {
100 entry->setUrl(parseCapElement(reader));
101 }
else if (m_hasArea && reader.
name() == m_areaNameMarker) {
103 }
else if (m_hasArea && reader.
name() == m_polygonMarker) {
104 parsePolygonElement(reader, *entry);
105 }
else if (m_hasArea && reader.
name() == m_FIPS6Marker) {
106 areaCodes.push_back({QStringLiteral(
"FIPS6"), reader.
readElementText()});
107 }
else if (m_hasArea && reader.
name() == m_UGCMarker) {
108 areaCodes.push_back({QStringLiteral(
"UGC"), reader.
readElementText()});
109 }
else if (m_hasDate && reader.
name() == m_dateMarker) {
118 entry->setAreaCodes(areaCodes);
123 Q_ASSERT(m_hasCap && reader.
isStartElement() && reader.
name() == m_capLinkElementMarker);
133void FeedParser::parsePolygonElement(
QXmlStreamReader &reader, AlertFeedEntry &entry)
const
135 if (reader.
name() == m_polygonMarker) {
136 entry.setPolygon(KWeatherCorePrivate::stringToPolygon(reader.
readElementText()));
141#include "moc_feedparser.cpp"
char * toString(const EngineQuery &query)
QDateTime fromString(QStringView string, QStringView format, QCalendar cal)
QJsonObject object() const const
QString toString() const const
QStringView value(QAnyStringView namespaceUri, QAnyStringView name) const const
QXmlStreamAttributes attributes() const const
bool isStartElement() const const
QStringView name() const const
QString readElementText(ReadElementTextBehaviour behaviour)
bool readNextStartElement()