[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