Engines
ion_envcan.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef _ION_ENVCAN_H_
00023 #define _ION_ENVCAN_H_
00024
00025 #include <QtXml/QXmlStreamReader>
00026 #include <QtCore/QStringList>
00027 #include <QDebug>
00028 #include <kurl.h>
00029 #include <kio/job.h>
00030 #include <kio/scheduler.h>
00031 #include <kdemacros.h>
00032 #include <plasma/dataengine.h>
00033 #include "ion.h"
00034 #include "formulas.h"
00035
00036 class WeatherData
00037 {
00038
00039 public:
00040
00041 struct WarningInfo {
00042 QString url;
00043 QString type;
00044 QString priority;
00045 QString description;
00046 QString timestamp;
00047 };
00048
00049
00050 struct ForecastInfo {
00051 QString forecastPeriod;
00052 QString forecastSummary;
00053 QString shortForecast;
00054
00055 QString forecastTempHigh;
00056 QString forecastTempLow;
00057 QString popPrecent;
00058 QString windForecast;
00059
00060 QString precipForecast;
00061 QString precipType;
00062 QString precipTotalExpected;
00063 int forecastHumidity;
00064 };
00065
00066 QString countryName;
00067 QString longTerritoryName;
00068 QString shortTerritoryName;
00069 QString cityName;
00070 QString regionName;
00071 QString stationID;
00072
00073
00074 QString obsTimestamp;
00075 QString condition;
00076 QString temperature;
00077 QString dewpoint;
00078
00079
00080 QString comforttemp;
00081
00082 float pressure;
00083 QString pressureTendency;
00084
00085 float visibility;
00086 QString humidity;
00087
00088 QString windSpeed;
00089 QString windGust;
00090 QString windDirection;
00091
00092 QVector <WeatherData::WarningInfo *> warnings;
00093
00094 QString normalHigh;
00095 QString normalLow;
00096
00097 QString forecastTimestamp;
00098
00099 QString UVIndex;
00100 QString UVRating;
00101
00102
00103 QVector <WeatherData::ForecastInfo *> forecasts;
00104
00105
00106 QString prevHigh;
00107 QString prevLow;
00108 QString prevPrecipType;
00109 QString prevPrecipTotal;
00110
00111
00112 QString sunriseTimestamp;
00113 QString sunsetTimestamp;
00114 QString moonriseTimestamp;
00115 QString moonsetTimestamp;
00116
00117
00118 float recordHigh;
00119 float recordLow;
00120 float recordRain;
00121 float recordSnow;
00122 };
00123
00124 class KDE_EXPORT EnvCanadaIon : public IonInterface
00125 {
00126 Q_OBJECT
00127
00128 public:
00129 EnvCanadaIon(QObject *parent, const QVariantList &args);
00130 ~EnvCanadaIon();
00131 bool updateIonSource(const QString& source);
00132
00133 bool metricUnit(void);
00134 bool timezone(void);
00135 void setMeasureUnit(const QString& unit);
00136 void setTimezoneFormat(const QString& tz);
00137
00138 void updateWeather(const QString& source);
00139
00140 static const int MAX_WARNINGS = 4;
00141
00142 protected:
00143 void init();
00144
00145 protected slots:
00146 void setup_slotDataArrived(KIO::Job *, const QByteArray &);
00147 void setup_slotJobFinished(KJob *);
00148
00149 void slotDataArrived(KIO::Job *, const QByteArray &);
00150 void slotJobFinished(KJob *);
00151
00152 private:
00153
00154
00155
00156 QString country(const QString& source);
00157 QString territory(const QString& source);
00158 QString city(const QString& source);
00159 QString region(const QString& source);
00160 QString station(const QString& source);
00161
00162
00163 QString observationTime(const QString& source);
00164 QMap<QString, QString> warnings(const QString& source);
00165 QString condition(const QString& source);
00166 QMap<QString, QString> temperature(const QString& source);
00167 QString dewpoint(const QString& source);
00168 QString humidity(const QString& source);
00169 QMap<QString, QString> visibility(const QString& source);
00170 QMap<QString, QString> pressure(const QString& source);
00171 QMap<QString, QString> wind(const QString& source);
00172 QMap<QString, QString> regionalTemperatures(const QString& source);
00173 QMap<QString, QString> uvIndex(const QString& source);
00174 QVector<QString> forecasts(const QString& source);
00175 QMap<QString, QString> yesterdayWeather(const QString& source);
00176 QMap<QString, QString> sunriseSet(const QString& source);
00177 QMap<QString, QString> moonriseSet(const QString& source);
00178 QMap<QString, QString> weatherRecords(const QString& source);
00179
00180
00181 void getXMLSetup(void);
00182 bool readXMLSetup(void);
00183
00184
00185 void getXMLData(const QString& source);
00186 bool readXMLData(const QString& source, QXmlStreamReader& xml);
00187
00188
00189 QStringList validate(const QString& source) const;
00190
00191
00192 void parseUnknownElement(QXmlStreamReader& xml);
00193
00194
00195 WeatherData parseWeatherSite(WeatherData& data, QXmlStreamReader& xml);
00196 void parseDateTime(WeatherData& data, QXmlStreamReader& xml, WeatherData::WarningInfo* warning = NULL);
00197 void parseLocations(WeatherData& data, QXmlStreamReader& xml);
00198 void parseConditions(WeatherData& data, QXmlStreamReader& xml);
00199 void parseWarnings(WeatherData& data, QXmlStreamReader& xml);
00200 void parseWindInfo(WeatherData& data, QXmlStreamReader& xml);
00201 void parseWeatherForecast(WeatherData& data, QXmlStreamReader& xml);
00202 void parseRegionalNormals(WeatherData& data, QXmlStreamReader& xml);
00203 void parseForecast(WeatherData& data, QXmlStreamReader& xml, WeatherData::ForecastInfo* forecast);
00204 void parseShortForecast(WeatherData::ForecastInfo* forecast, QXmlStreamReader& xml);
00205 void parseForecastTemperatures(WeatherData::ForecastInfo* forecast, QXmlStreamReader& xml);
00206 void parseWindForecast(WeatherData::ForecastInfo* forecast, QXmlStreamReader& xml);
00207 void parsePrecipitationForecast(WeatherData::ForecastInfo* forecast, QXmlStreamReader& xml);
00208 void parsePrecipTotals(WeatherData::ForecastInfo* forecast, QXmlStreamReader& xml);
00209 void parseUVIndex(WeatherData& data, QXmlStreamReader& xml);
00210 void parseYesterdayWeather(WeatherData& data, QXmlStreamReader& xml);
00211 void parseAstronomicals(WeatherData& data, QXmlStreamReader& xml);
00212 void parseWeatherRecords(WeatherData& data, QXmlStreamReader& xml);
00213
00214 private:
00215 class Private;
00216 Private *const d;
00217 };
00218
00219 K_EXPORT_PLASMA_ION(envcan, EnvCanadaIon)
00220
00221 #endif