Changes: display route legs in table; removed message table/button
[ptas] / zouba / src / route.cpp
1 #include "route_p.h"
2 #include "route.h"
3
4 #include "routedata.h"
5 #include "location.h"
6
7 #include <QNetworkAccessManager>
8 #include <QNetworkReply>
9 #include <QUrl>
10 #include <QObject>
11 #include <QDebug>
12 #include <QStringList>
13 #include <QString>
14 #include <QXmlStreamReader>
15 #include <QWidget>
16
17 #include "ytv.h"
18
19 Route::Route() :
20   q( new RoutePrivate( this ) ),
21   manager( new QNetworkAccessManager(this) )
22 {
23   connect( manager, SIGNAL( finished(QNetworkReply*) ), this, SLOT( replyFinished(QNetworkReply*) ) );
24 }
25
26 Route::~Route()
27 {
28   delete manager;
29   manager = 0;
30 }
31
32 void Route::getRoute()
33 {
34   qDebug() << "getting route from Ytv";
35
36   QUrl fullUrl( Ytv::Url );
37
38   QStringList a;
39   a << q->fromLocation()->x() << q->fromLocation()->y();
40   QStringList b;
41   b << q->toLocation()->x() << q->toLocation()->y();
42
43   fullUrl.addQueryItem( "a", a.join(",") );
44   fullUrl.addQueryItem( "b", b.join(",") );
45   fullUrl.addQueryItem( "show", QString::number(Ytv::ShowFiveResults) );
46   fullUrl.addQueryItem( "walkspeed", QString::number(Ytv::WalkSpeedFast) );
47   fullUrl.addQueryItem( "optimize", QString::number(Ytv::OptimizeLeastWalking) );
48   fullUrl.addQueryItem( "user", Ytv::Username );
49   fullUrl.addQueryItem( "pass", Ytv::Password );
50
51   manager->get( QNetworkRequest( fullUrl ) );
52   qDebug() << "getting url" << fullUrl.toEncoded();
53   qDebug() << "waiting for reply from Ytv";
54   emit( busy( true ) );
55 }
56
57 void Route::replyFinished( QNetworkReply * reply )
58 {
59   qDebug() << "have reply from Ytv";
60   QList<RouteData> routeData = q->parseReply( reply->readAll() );
61
62   emit( routeReady( routeData ) );
63   emit( busy( false ) );
64 }
65
66 void Route::setFromLocation( Location *location )
67 {
68   qDebug() << "setting new From location (" << location->label() << ")";
69
70   if ( location && location->isValid() ) {
71     qDebug() << "From is valid";
72     q->setFromLocation( location );
73     if ( q->toValid() ) {
74       qDebug() << "To is also valid";
75       getRoute();
76     } else {
77       qDebug() << "To not valid - waiting";
78     }
79   } else {
80     qDebug() << "ERROR:From is not valid";
81     qDebug() << "location=" << location;
82     if ( location ) {
83       qDebug() << "location->isValid()=" << location->isValid();
84     }
85   }
86 }
87
88 Location *Route::fromLocation() const
89 {
90   return q->fromLocation();
91 }
92
93 void Route::setToLocation( Location *location )
94 {
95   qDebug() << "setting new To location (" << location->label() << ")";
96
97   if ( location && location->isValid() ) {
98     qDebug() << "To is valid";
99     q->setToLocation( location );
100     if ( q->fromValid() ) {
101       qDebug() << "From is also valid";
102       getRoute();
103     } else {
104       qDebug() << "From not valid - waiting";
105     }
106   } else {
107     qDebug() << "ERROR:From is not valid";
108     qDebug() << "location=" << location;
109     if ( location ) {
110       qDebug() << "location->isValid()=" << location->isValid();
111     }
112   }
113 }
114
115 Location *Route::toLocation() const
116 {
117   return q->toLocation();
118 }