331ae5429d57b88fcec2d5a4cb471bb2d1d054f3
[ptas] / zouba / 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
16 #include "ytv.h"
17
18 Route::Route() :
19   q( new RoutePrivate( this ) ),
20   manager( new QNetworkAccessManager(this) )
21 {
22   connect( manager, SIGNAL( finished(QNetworkReply*) ), this, SLOT( replyFinished(QNetworkReply*) ) );
23 }
24
25 Route::~Route()
26 {
27   delete manager;
28   manager = 0;
29 }
30
31 void Route::getRoute()
32 {
33   QUrl fullUrl( ytv );
34
35   QStringList a;
36   a << q->fromLocation().x() << q->fromLocation().y();
37   QStringList b;
38   b << q->toLocation().x() << q->toLocation().y();
39
40   fullUrl.addQueryItem( "a", a.join(",") );
41   fullUrl.addQueryItem( "b", b.join(",") );
42   fullUrl.addQueryItem( "user", username );
43   fullUrl.addQueryItem( "pass", password );
44
45   manager->get( QNetworkRequest( fullUrl ) );
46 }
47
48 void Route::replyFinished( QNetworkReply * reply )
49 {
50   RouteData routeData = q->parseReply( reply->readAll() );
51
52   emit( routeReady( routeData ) );
53 }
54
55 void Route::setFromLocation( const Location &location )
56 {
57   if ( location.isValid() ) {
58     q->setFromLocation( location );
59   } else {
60     Location *locationPtr = qobject_cast<Location*>(sender());
61     if ( locationPtr ) {
62       q->setFromLocation( *locationPtr );
63       if ( q->toValid() ) {
64         getRoute();
65       }
66     }
67   }
68 }
69
70 const Location &Route::fromLocation()
71 {
72   return q->fromLocation();
73 }
74
75 void Route::setToLocation( const Location &location )
76 {
77   if ( location.isValid() ) {
78     q->setToLocation( location );
79   } else {
80     Location *locationPtr = qobject_cast<Location*>(sender());
81     if ( locationPtr ) {
82       q->setToLocation( *locationPtr );
83       if ( q->fromValid() ) {
84         getRoute();
85       }
86     }
87   }
88 }
89
90 const Location &Route::toLocation()
91 {
92   return q->toLocation();
93 }
94