[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: playground/base/plasma/ions/buienradar
From: Shawn Starr <shawn.starr () rogers ! com>
Date: 2009-08-15 1:02:05
Message-ID: 1250298125.478490.24693.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 1011543 by spstarr:
Get 5 day forecast info parsed for Netherlands now :-). Next is to store it. Fix up \
some functions, add some plumbing methods needed
M +91 -15 ion_buienradar.cpp
M +21 -3 ion_buienradar.h
--- trunk/playground/base/plasma/ions/buienradar/ion_buienradar.cpp #1011542:1011543
@@ -95,6 +95,13 @@
return conditionList;
}
+QMap<QString, IonInterface::ConditionIcons> \
BuienradarIon::setupForecastIconMappings(void) const +{
+ QMap<QString, ConditionIcons> forecastList;
+ forecastList["a"] = Overcast;
+ return forecastList;
+}
+
QMap<QString, IonInterface::ConditionIcons> const& BuienradarIon::dayIcons(void) \
const {
static QMap<QString, ConditionIcons> const condval = setupDayIconMappings();
@@ -113,6 +120,12 @@
return wval;
}
+QMap<QString, IonInterface::ConditionIcons> const& \
BuienradarIon::forecastIcons(void) const +{
+ static QMap<QString, ConditionIcons> const foreval = \
setupForecastIconMappings(); + return foreval;
+}
+
// ctor, dtor
BuienradarIon::BuienradarIon(QObject *parent, const QVariantList &args)
: IonInterface(parent, args), d(new Private())
@@ -291,7 +304,7 @@
}
-WeatherData BuienradarIon::parseStation(WeatherData& data, QXmlStreamReader& xml)
+void BuienradarIon::parseStation(WeatherData& data, QXmlStreamReader& xml)
{
data.temperature_C = i18n("N/A");
data.weather = i18n("N/A");
@@ -386,15 +399,75 @@
}
}
}
+}
- return data;
+void BuienradarIon::parseForecast(WeatherData& data, QXmlStreamReader& xml)
+{
+ while (!xml.atEnd()) {
+ xml.readNext();
+
+ if (xml.isEndElement()) {
+ break;
+ }
+
+ if (xml.name() == "url") {
+ xml.readElementText();
+ } else if (xml.name() == "urlbackup") {
+ xml.readElementText();
+ } else if (xml.name() == "tekst_middellang") {
+ xml.readElementText();
+ } else if (xml.name() == "tekst_lang") {
+ xml.readElementText();
+ } else if (xml.name().toString().contains("dag-plus")) {
+ parseDayForecast(data, xml);
+ } else {
+ parseUnknownElement(xml);
+ }
+ }
}
-WeatherData BuienradarIon::parseWeatherStations(WeatherData& data, QXmlStreamReader& \
xml) +void BuienradarIon::parseDayForecast(WeatherData& data, QXmlStreamReader& xml)
{
while (!xml.atEnd()) {
xml.readNext();
+
+ if (xml.isEndElement()) {
+ break;
+ }
+ if (xml.name() == "datum") {
+ xml.readElementText();
+ } else if (xml.name() == "dagweek") {
+ kDebug() << "Day of Week: " << xml.readElementText();
+ } else if (xml.name() == "kanszon") {
+ xml.readElementText();
+ } else if (xml.name() == "kansregen") {
+ kDebug() << "Probability of Precipitation: " << xml.readElementText();
+ } else if (xml.name() == "minmmregen") {
+ xml.readElementText();
+ } else if (xml.name() == "maxmmregen") {
+ xml.readElementText();
+ } else if (xml.name() == "mintemp") {
+ kDebug() << "Min Temperature: " << xml.readElementText();
+ } else if (xml.name() == "maxtemp") {
+ kDebug() << "Max Temperature: " << xml.readElementText();
+ } else if (xml.name() == "windrichting") {
+ kDebug() << "Wind Direction: " << xml.readElementText();
+ } else if (xml.name() == "windkracht") {
+ kDebug() << "Wind Speed: " << xml.readElementText();
+ } else if (xml.name() == "icoon") {
+ kDebug() << "Wind Icon to use: " << \
xml.attributes().value("ID").toString(); + } else {
+ parseUnknownElement(xml);
+ }
+ }
+}
+
+void BuienradarIon::parseWeatherStations(WeatherData& data, QXmlStreamReader& xml)
+{
+ while (!xml.atEnd()) {
+ xml.readNext();
+
if (xml.isEndElement()) {
break;
}
@@ -402,38 +475,41 @@
if (xml.isStartElement() && xml.name() == "weerstation") {
if (xml.name() == "weerstation") {
if (!d->m_foundStation) {
- data = parseStation(data, xml);
+ parseStation(data, xml);
}
if (!d->m_source.isEmpty()) {
if (d->m_source.split('|')[2] == data.locationName) {
d->m_foundStation = true;
- return data;
+ return;
}
}
- } else {
- parseUnknownElement(xml);
- }
+ }
+ } else {
+ parseUnknownElement(xml);
}
}
-
- return data;
}
-WeatherData BuienradarIon::parseStationList(WeatherData& data, QXmlStreamReader& \
xml) +void BuienradarIon::parseStationList(WeatherData& data, QXmlStreamReader& xml)
{
while (!xml.atEnd()) {
xml.readNext();
if (xml.isStartElement() && xml.name() == "weerstations") {
if (xml.name() == "weerstations") {
- data = parseWeatherStations(data, xml);
+ parseWeatherStations(data, xml);
} else {
parseUnknownElement(xml);
}
- }
+ } else if (xml.isStartElement() && xml.name() == "verwachting_meerdaags") {
+ if (xml.name() == "verwachting_meerdaags") {
+ parseForecast(data, xml);
+ } else {
+ parseUnknownElement(xml);
+ }
+ }
}
- return data;
}
// Parse the city list and store into a QMap
@@ -470,7 +546,7 @@
if (xml.isStartElement()) {
if (xml.name() == "buienradarnl") {
d->m_source = source;
- data = parseStationList(data, xml);
+ parseStationList(data, xml);
} else {
parseUnknownElement(xml);
}
--- trunk/playground/base/plasma/ions/buienradar/ion_buienradar.h #1011542:1011543
@@ -54,6 +54,20 @@
QString windGust; // windstoten - Float value
QString pressure; // luchtdruk
QString visibility; // zichtmeters
+
+ // Five day forecast
+ struct ForecastInfo {
+ QString forecastPeriod; // dagweek
+ QString forecastSummary; // icon name == forecast in this case
+ QString iconName; // icoon
+
+ QString forecastTempHigh; // maxtemp
+ QString forecastTempLow; // mintemp
+ QString popPrecent; // kansregen (chance of rain)
+ QString windForecast; // windkracht (wind speed)
+ QString windDirForecast; // windrichting (wind direction)
+ };
+
};
class KDE_EXPORT BuienradarIon : public IonInterface
@@ -81,9 +95,11 @@
/* Buienradar Methods - Internal for Ion */
QMap<QString, ConditionIcons> setupDayIconMappings(void) const;
QMap<QString, ConditionIcons> setupNightIconMappings(void) const;
+ QMap<QString, ConditionIcons> setupForecastIconMappings(void) const;
QMap<QString, ConditionIcons> const& nightIcons(void) const;
QMap<QString, ConditionIcons> const& dayIcons(void) const;
+ QMap<QString, ConditionIcons> const& forecastIcons(void) const;
QMap<QString, WindDirections> setupWindIconMappings(void) const;
QMap<QString, WindDirections> const& windIcons(void) const;
@@ -121,9 +137,11 @@
void parseUnknownElement(QXmlStreamReader& xml) const;
// Parse weather XML data
- WeatherData parseStation(WeatherData& data, QXmlStreamReader& xml);
- WeatherData parseWeatherStations(WeatherData& data, QXmlStreamReader& xml);
- WeatherData parseStationList(WeatherData& data, QXmlStreamReader& xml);
+ void parseStation(WeatherData& data, QXmlStreamReader& xml);
+ void parseForecast(WeatherData& data, QXmlStreamReader& xml);
+ void parseDayForecast(WeatherData& data, QXmlStreamReader& xml);
+ void parseWeatherStations(WeatherData& data, QXmlStreamReader& xml);
+ void parseStationList(WeatherData& data, QXmlStreamReader& xml);
private:
class Private;
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic