Plasma
ion_bbcukmet.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_BBCUKMET_H
00023 #define _ION_BBCUKMET_H
00024
00025 #include <QtXml/QXmlStreamReader>
00026 #include <QRegExp>
00027 #include <QtCore/QStringList>
00028 #include <QDebug>
00029 #include <kurl.h>
00030 #include <kio/job.h>
00031 #include <kio/scheduler.h>
00032 #include <kdemacros.h>
00033 #include <plasma/dataengine.h>
00034 #include "ion.h"
00035 #include "formulas.h"
00036
00037 class WeatherData
00038 {
00039
00040 public:
00041 QString place;
00042 QString stationName;
00043
00044 QString obsTime;
00045 QString condition;
00046 QString temperature_C;
00047 QString temperature_F;
00048 QString windDirection;
00049 QString windSpeed_miles;
00050 QString humidity;
00051 QString pressure;
00052 QString pressureTendency;
00053 QString visibilityStr;
00054
00055
00056 struct ForecastInfo {
00057 QString period;
00058 QString summary;
00059 int tempHigh;
00060 int tempLow;
00061 int windSpeed;
00062 QString windDirection;
00063 };
00064
00065
00066 QVector <WeatherData::ForecastInfo *> forecasts;
00067 };
00068
00069 class KDE_EXPORT UKMETIon : public IonInterface
00070 {
00071 Q_OBJECT
00072
00073 public:
00074 UKMETIon(QObject *parent, const QVariantList &args);
00075 ~UKMETIon();
00076 void init();
00077 bool metricUnit(void);
00078 bool timezone(void);
00079 void setMeasureUnit(const QString& unit);
00080 void setTimezoneFormat(const QString& tz);
00081 bool updateIonSource(const QString& source);
00082 void updateWeather(const QString& source);
00083
00084 QString place(const QString& source);
00085 QString station(const QString& source);
00086 QString observationTime(const QString& source);
00087 QString condition(const QString& source);
00088 QMap<QString, QString> temperature(const QString& source);
00089 QMap<QString, QString> wind(const QString& source);
00090 QString humidity(const QString& source);
00091 QString visibility(const QString& source);
00092 QMap<QString, QString> pressure(const QString& source);
00093 QVector<QString> forecasts(const QString& source);
00094
00095 protected slots:
00096 void setup_slotDataArrived(KIO::Job *, const QByteArray &);
00097 void setup_slotJobFinished(KJob *);
00098 void setup_slotRedirected(KIO::Job *, const KUrl &url);
00099 void observation_slotDataArrived(KIO::Job *, const QByteArray &);
00100 void observation_slotJobFinished(KJob *);
00101 void forecast_slotDataArrived(KIO::Job *, const QByteArray &);
00102 void forecast_slotJobFinished(KJob *);
00103
00104 private:
00105
00106
00107
00108 void findPlace(const QString& place, const QString& source);
00109 void validate(const QString& source);
00110 void getFiveDayForecast(const QString& source);
00111 void getXMLData(const QString& source);
00112 bool readSearchXMLData(const QString& source, QXmlStreamReader& xml);
00113 bool readFiveDayForecastXMLData(const QString& source, QXmlStreamReader& xml);
00114 void parseSearchLocations(const QString& source, QXmlStreamReader& xml);
00115
00116
00117 bool readObservationXMLData(const QString& source, QXmlStreamReader& xml);
00118 void parsePlaceObservation(const QString& source, WeatherData& data, QXmlStreamReader& xml);
00119 void parseWeatherChannel(const QString& source, WeatherData& data, QXmlStreamReader& xml);
00120 void parseWeatherObservation(const QString& source, WeatherData& data, QXmlStreamReader& xml);
00121 void parseFiveDayForecast(const QString& source, QXmlStreamReader& xml);
00122 void parseUnknownElement(QXmlStreamReader& xml);
00123
00124 private:
00125 class Private;
00126 Private *const d;
00127 };
00128
00129 K_EXPORT_PLASMA_ION(bbcukmet, UKMETIon)
00130
00131 #endif