be927e937743594b797914682e994982cb858c5b
[googlelatitude] / src / glatitude.cpp
1 #include "glatitude.h"
2
3 GoogleLatitude::GoogleLatitude(QObject *parent) : QObject(parent) {
4     user = "";
5     pass = "";
6     latitude = 0.;
7     longitude = 0.;
8     accuracy = 0.;
9
10     worker = new QNetworkAccessManager();
11     connect(worker, SIGNAL(finished(QNetworkReply *)), this, SLOT(finishedreply(QNetworkReply *)));
12
13     urllogin = QUrl::fromEncoded("https://www.google.com/accounts/ServiceLogin?service=friendview");
14     urldologin = QUrl::fromEncoded("https://www.google.com/accounts/ServiceLoginAuth?service=friendview");
15     urlupdate = QUrl::fromEncoded("http://maps.google.com/glm/mmap/mwmfr?hl=en");
16
17     lastupdate = 0;
18     login_error = false;
19 }
20
21 void GoogleLatitude::login(QString u, QString p) {
22     if ( !u.contains('@') ) u.append("@gmail.com");
23     user = u;
24     pass = p;
25 }
26
27 void GoogleLatitude::set(double la, double lo, double ac) {
28     latitude = la;
29     longitude = lo;
30     accuracy = ac;
31
32     qDebug() << "GoogleLatitude: set la = " << la << " lo = " << lo << " ac = " << ac;
33     qDebug() << "GoogleLatitude: set lastupdate = " << lastupdate << " current = " << QDateTime::currentMSecsSinceEpoch();
34     if (login_error) return;
35     if (la*lo == 0) return;
36     if ( QDateTime::currentMSecsSinceEpoch() < lastupdate + 120*1000 ) return;
37     worker->get(QNetworkRequest(urllogin));
38 }
39
40 void GoogleLatitude::finishedreply(QNetworkReply *r) {
41     if ( r->url() == urllogin ) {
42         qDebug() << "GoogleLatitude: login";
43         QString aidis = r->readAll();
44         QRegExp regexp ("type=\"hidden\".*name=\"GALX\".*value=\"(.*)\"");
45         regexp.setMinimal(1);
46         regexp.indexIn(aidis, 1);
47         QString googleGALX = regexp.capturedTexts().last();
48
49         QByteArray datalogin;
50         datalogin += "&service=friendview";
51         datalogin += "&GALX=" + googleGALX;
52         datalogin += "&Email=" + user;
53         datalogin += "&Passwd=" + pass;
54         worker->post(QNetworkRequest(urldologin), datalogin);
55     } else if ( r->url() == urldologin ) {
56         qDebug() << "GoogleLatitude: dologin";
57         QByteArray datagps;
58         datagps += "t=ul";
59         datagps += "&lat=" + QString::number(latitude);
60         datagps += "&lng=" + QString::number(longitude);
61         datagps += "&accuracy=" + QString::number(accuracy);
62
63         QNetworkRequest request(urlupdate);
64         request.setRawHeader("X-ManualHeader", QString("true").toAscii() );
65         worker->post(request, datagps);
66     } else if ( r->url() == urlupdate ) {
67         QString output = r->readAll();
68         QRegExp regexp ("Authentication required");
69         if (regexp.indexIn(output, 1) != -1) {
70             qDebug() << "GoogleLatitude: update error";
71             login_error = true;
72             emit ERROR();
73         } else {
74             lastupdate = QDateTime::currentMSecsSinceEpoch();
75             qDebug() << "GoogleLatitude: update ok " << " lastupdate = " << lastupdate;
76             emit OK();
77         }
78     } else {
79         qDebug() << "GoogleLatitude Error url:" << r->url();
80         qDebug() << r->rawHeaderList();
81         qDebug() << r->readAll();
82     }
83 }