Fix typo
[yandex-traffic] / traffic.hpp
index 5671b9e..03283b8 100644 (file)
@@ -2,8 +2,12 @@
 #define __TRAFFIC_H__
 
 #include <QtCore>
+#include <QtNetwork>
+#include <QtXml>
 
 
+#include "http_fetcher.hpp"
+
 // Base data of traffic information
 class TrafficInfo
 {
@@ -13,8 +17,34 @@ private:
     QString _isotime;
     QString _localtime;
 
+    bool _valid;
+
+protected:
+    float getFloatNode (const QDomElement& elem, const char* node, float def);
+    int getIntNode (const QDomElement& elem, const char* node, int def);
+    QString getStringNode (const QDomElement& elem, const char* node) throw (const QString&);
+    QDateTime getTSNode (const QDomElement& elem, const char* node) throw (const QString&);
+
+    void setValid (bool new_val)
+    { _valid = new_val; };
+
 public:
-    TrafficInfo ();
+    TrafficInfo ()
+        : _valid (false)
+    {};
+
+    TrafficInfo (const QDomElement& elem) throw (const QString&);
+
+    bool valid () const
+    { return _valid; };
+
+    QString localtime () const
+    { return _localtime; };
+
+    QDateTime ts () const
+    { return _ts; };
+
+    virtual void dump ();
 };
 
 
@@ -22,6 +52,7 @@ class ExtendedTrafficInfo : public TrafficInfo
 {
 public:
     enum light_color {
+        Unknown,
         Red,
         Yellow,
         Green
@@ -29,26 +60,64 @@ public:
 
 private:
     float _level_raw;
-    quint8 _level;
+    int _level;
     light_color _color;
-    quint8 _tend;
+    int _tend;
     QString _hint;
 
 public:
-    ExtendedTrafficInfo ();
+    ExtendedTrafficInfo ()
+        : TrafficInfo ()
+    {};
+
+    ExtendedTrafficInfo (const QDomElement& elem) throw (const QString&);
+
+    int level () const
+    { return _level; };
+
+    int tend () const
+    { return _tend; };
+
+    QString hint () const
+    { return _hint; };
+
+    ExtendedTrafficInfo::light_color color () const
+    { return _color; };
+
+    virtual void dump ();
 };
 
 
-class Traffic
+class Traffic : public QObject
 {
+    Q_OBJECT
+
 private:
     QDateTime _ts;
 
     QMap<QString, TrafficInfo> _info;
     QMap<QString, ExtendedTrafficInfo> _ext_info;
 
+    HttpFetcher _fetcher;
+
+    bool parse_traffic_data (const QString& xml);
+
+private slots:
+    void fetchDone (const QByteArray& data);
+
+signals:
+    void updated ();
+
 public:
     Traffic ();
+
+    void update ();
+
+    QDateTime ts () const
+    { return _ts; };
+
+    TrafficInfo lookup (const QString &id) const;
+    ExtendedTrafficInfo lookup_ext (const QString &id) const;
 };