#include <QtXml>
#include "traffic.hpp"
+#include "log.hpp"
// --------------------------------------------------
-// TrafficInfo
+// CityTrafficInfo
// --------------------------------------------------
-TrafficInfo::TrafficInfo (const QDomElement& elem) throw (const QString&)
+CityTrafficInfo::CityTrafficInfo (const QDomElement& elem) throw (const QString&)
+ : TrafficInfo ()
{
- _valid = false;
- _len1 = getFloatNode (elem, "length_1", 0);
- _len2 = getFloatNode (elem, "length_2", 0);
- _len = getFloatNode (elem, "length", 0);
+ QString color;
+
+ setValid (false);
_ts = getTSNode (elem, "timestamp");
- _isotime = getStringNode (elem, "isotime");
- _localtime = getStringNode (elem, "localtime");
- _valid = true;
+ _level = getIntNode (elem, "level", 1);
+ _tend = getIntNode (elem, "tend", 0);
+ _hint = getStringNode (elem, "hint");
+
+ color = getStringNode (elem, "icon");
+ if (color == "green")
+ _color = Green;
+ else if (color == "yellow")
+ _color = Yellow;
+ else if (color == "red")
+ _color = Red;
+ else
+ throw "Color is unknown";
+
+ setValid (true);
+}
+
+
+void CityTrafficInfo::dump ()
+{
+ Log::instance ()->add (QString ("CityTrafficInfo: level = %1, hint = %2").arg (_level).arg (_hint));
}
-float TrafficInfo::getFloatNode (const QDomElement& elem, const char* node, float def)
+float CityTrafficInfo::getFloatNode (const QDomElement& elem, const char* node, float def)
{
QDomElement e;
bool ok;
}
-int TrafficInfo::getIntNode (const QDomElement& elem, const char* node, int def)
+int CityTrafficInfo::getIntNode (const QDomElement& elem, const char* node, int def)
{
QDomElement e;
bool ok;
}
-QString TrafficInfo::getStringNode (const QDomElement& elem, const char* node) throw (const QString&)
+QString CityTrafficInfo::getStringNode (const QDomElement& elem, const char* node) throw (const QString&)
{
QDomElement e;
QString val;
}
-QDateTime TrafficInfo::getTSNode (const QDomElement& elem, const char* node) throw (const QString&)
+QDateTime CityTrafficInfo::getTSNode (const QDomElement& elem, const char* node) throw (const QString&)
{
QDomElement e;
bool ok;
// --------------------------------------------------
-// ExtendedTrafficInfo
-// --------------------------------------------------
-ExtendedTrafficInfo::ExtendedTrafficInfo (const QDomElement& elem) throw (const QString&)
- : TrafficInfo (elem)
-{
- QString color;
-
- setValid (false);
- _level_raw = getFloatNode (elem, "level_raw", 0);
- _level = getIntNode (elem, "level", 1);
- _tend = getIntNode (elem, "tend", 0);
- _hint = getStringNode (elem, "hint");
-
- color = getStringNode (elem, "icon");
- if (color == "green")
- _color = Green;
- else if (color == "yellow")
- _color = Yellow;
- else if (color == "red")
- _color = Red;
- else
- throw "Color is unknown";
-
- setValid (true);
-}
-
-
-// --------------------------------------------------
// Traffic
// --------------------------------------------------
Traffic::Traffic ()
SLOT (fetchDone (const QByteArray&)));
}
+
// Perform asyncronous refresh of traffic information. If another update
// request is in progress, new is discarded. If update request finished
// successfully, updated() signal called.
void Traffic::update ()
{
- if (_fetcher.busy ())
- return;
-
+ Log::instance ()->add ("Traffic::update: Request status download");
_fetcher.fetch ("http://trf.maps.yandex.net/trf/stat.xml");
}
void Traffic::fetchDone (const QByteArray& data)
{
// parse data got
- if (parse_traffic_data (QString::fromUtf8 (data.data ())))
+ if (parse_traffic_data (QString::fromUtf8 (data.data ()))) {
+ Log::instance ()->add ("Traffic::fetchDone: data parsed successfully");
updated ();
+ }
+ else
+ Log::instance ()->add ("Traffic::fetchDone: data parse error");
}
QDomNode n;
bool ok;
QString s;
- QMap<QString, TrafficInfo> new_info;
- QMap<QString, ExtendedTrafficInfo> new_ext_info;
+ QMap<QString, CityTrafficInfo> new_ext_info;
if (!doc.setContent (xml))
return false;
try {
// Check that it is an extended traffic info
if (!e.firstChildElement ("level").isNull ()) {
- ExtendedTrafficInfo info (e);
+ CityTrafficInfo info (e);
if (info.valid ())
new_ext_info[s] = info;
}
- else {
- TrafficInfo info (e);
- if (info.valid ())
- new_info[s] = info;
- }
}
catch (const QString& msg) {
}
}
_ts = new_ts;
- _info = new_info;
_ext_info = new_ext_info;
return true;
}
-TrafficInfo Traffic::lookup (const QString &id) const
+CityTrafficInfo Traffic::lookup_ext (const QString &id) const
{
- QMap<QString, TrafficInfo>::const_iterator it = _info.find (id);
-
- if (it == _info.end ())
- return TrafficInfo ();
- else
- return it.value ();
-}
-
-
-ExtendedTrafficInfo Traffic::lookup_ext (const QString &id) const
-{
- QMap<QString, ExtendedTrafficInfo>::const_iterator it = _ext_info.find (id);
+ QMap<QString, CityTrafficInfo>::const_iterator it = _ext_info.find (id);
if (it == _ext_info.end ())
- return ExtendedTrafficInfo ();
+ return CityTrafficInfo ();
else
return it.value ();
}
+