summaryrefslogtreecommitdiffstats
path: root/weather/yahooweatherresponse.h
blob: ac9d20ef59347e2fb54419617fac9e04517819c2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
#ifndef YAHOOWEATHERRESPONSE_H
#define YAHOOWEATHERRESPONSE_H

#include <QString>
#include <QDomElement>
#include <QTime>
#include <QDate>
#include <QDateTime>

class YahooWeatherResponse
{
public:
    enum TemperatureUnit { Fahrenheit, Celsius };
    enum DistanceUnit { Miles, Kilometers };
    enum PressureUnit { PoundsPerSquare, Millibars };
    enum SpeedUnit { MilesPerHour, KilometersPerHour };
    enum PressureState { Steady, Rising, Falling };

    class Location
    {
    public:
        Location() {};
        Location(QDomElement element);
        QString city() const { return m_city; }
        QString region() const { return m_region; }
        QString country() const { return m_country; }

    private:
        QString m_city;
        QString m_region;
        QString m_country;
    };

    class Units
    {
    public:
        Units() {};
        Units(QDomElement element);
        TemperatureUnit temperature() const { return m_temperature; }
        DistanceUnit distance() const { return m_distance; }
        PressureUnit pressure() const { return m_pressure; }
        SpeedUnit speed() const { return m_speed; }

    private:
        TemperatureUnit m_temperature;
        DistanceUnit m_distance;
        PressureUnit m_pressure;
        SpeedUnit m_speed;
    };

    class Wind
    {
    public:
        Wind() {};
        Wind(QDomElement element);
        int chill() const { return m_chill; }
        int direction() const { return m_direction; }
        int speed() const { return m_speed; }

    private:
        int m_chill;
        int m_direction;
        int m_speed;
    };

    class Atmosphere
    {
    public:
        Atmosphere() {};
        Atmosphere(QDomElement element);
        int humidity() const { return m_humidity; }
        float visibility() const { return m_visibility; }
        float pressure() const { return m_pressure; }
        PressureState pressureState() const { return m_pressureState; }

    private:
        int m_humidity;
        float m_visibility;
        float m_pressure;
        PressureState m_pressureState;
    };

    class Astronomy
    {
    public:
        Astronomy() {};
        Astronomy(QDomElement element);
        QTime sunrise() const { return m_sunrise; }
        QTime sunset() const { return m_sunset; }

    private:
        QTime m_sunrise;
        QTime m_sunset;
    };

    class Condition
    {
    public:
        Condition() {};
        Condition(QDomElement element);
        QString text() const { return m_text; }
        int code() const { return m_code; }
        int temperature() const { return m_temperature; }
        QDateTime date() const { return m_date; }

    private:
        QString m_text;
        int m_code;
        int m_temperature;
        QDateTime m_date;
    };

    class Forecast
    {
    public:
        Forecast() {};
        Forecast(QDomElement element);

        QDate date() const { return m_date; }
        int low() const { return m_low; }
        int high() const { return m_high; }
        QString text() const { return m_text; }
        int code() const { return m_code; }

    private:
        QDate m_date;
        int m_low;
        int m_high;
        QString m_text;
        int m_code;
    };

public:
    YahooWeatherResponse(const QString &locationCode, QDomElement element);

    QString locationCode() const { return m_locationCode; }

    Location location() const { return m_location; }
    Units units() const { return m_units; }
    Wind wind() const { return m_wind; }
    Atmosphere atmosphere() const { return m_atmosphere; }
    Astronomy astronomy() const { return m_astronomy; }
    Condition condition() const { return m_condition; }
    Forecast forecast(int idx) const { return m_forecast[idx]; }

    QDateTime buildDate() const { return m_buildDate; }
    int timeToLive() const { return m_timeToLive; }
    float latitude() const { return m_latitude; }
    float longitude() const { return m_longitude; }
    QDateTime pubDate() const { return m_pubDate; }

    void print();


private:
    QString m_locationCode;
    QDateTime m_buildDate;
    int m_timeToLive;
    float m_latitude;
    float m_longitude;
    QDateTime m_pubDate;

    Location m_location;
    Units m_units;
    Wind m_wind;
    Atmosphere m_atmosphere;
    Astronomy m_astronomy;
    Condition m_condition;
    Forecast m_forecast[2];

    void readItem(QDomElement item);

//    <guid isPermaLink="false">USCA1116_2009_11_08_18_56_PST</guid>





};

#endif // YAHOOWEATHERRESPONSE_H