no update on x or y == 0
[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     urlloc = QUrl::fromEncoded("http://www.google.com/loc/json");
17 }
18
19 void GoogleLatitude::login(QString u, QString p) {
20     if ( !u.contains('@') ) u.append("@gmail.com");
21     user = u;
22     pass = p;
23 }
24
25 void GoogleLatitude::set(double la, double lo, double ac) {
26     latitude = la;
27     longitude = lo;
28     accuracy = ac;
29
30     if (la*lo == 0) return;
31     worker->get(QNetworkRequest(urllogin));
32 }
33
34 void GoogleLatitude::get() {
35     QByteArray postloc = QByteArray("{version:\"1.1.0\"}");
36     worker->post(QNetworkRequest(urlloc),postloc);
37 }
38
39 void GoogleLatitude::finishedreply(QNetworkReply *r) {
40     if ( r->url() == urllogin ) {
41         QString aidis = r->readAll();
42         QRegExp regexp ("type=\"hidden\".*name=\"GALX\".*value=\"(.*)\"");
43         regexp.setMinimal(1);
44         regexp.indexIn(aidis, 1);
45         QString googleGALX = regexp.capturedTexts().last();
46
47         QByteArray datalogin;
48         datalogin += "&service=friendview";
49         datalogin += "&GALX=" + googleGALX;
50         datalogin += "&Email=" + user;
51         datalogin += "&Passwd=" + pass;
52         worker->post(QNetworkRequest(urldologin), datalogin);
53     } else if ( r->url() == urldologin ) {
54         QByteArray datagps;
55         datagps += "t=ul";
56         datagps += "&lat=" + QString::number(latitude);
57         datagps += "&lng=" + QString::number(longitude);
58         datagps += "&accuracy=" + QString::number(accuracy);
59
60         QNetworkRequest request(urlupdate);
61         request.setRawHeader("X-ManualHeader", QString("true").toAscii() );
62         worker->post(request, datagps);
63     } else if ( r->url() == urlupdate ) {
64         QString output = r->readAll();
65         QRegExp regexp ("Authentication required");
66         if (regexp.indexIn(output, 1) != -1) {
67             emit setERROR();
68         } else {
69             emit setOK();
70         }
71         qDebug() << output;
72     } else if ( r->url() == urlloc ) {
73         QString loc = r->readAll();
74         QRegExp regexp ("\\{\"latitude\":(.*),\"longitude\":(.*),\"accuracy\":(.*)\\}");
75         regexp.setMinimal(1);
76         regexp.indexIn(loc, 1);
77         latitude = regexp.capturedTexts().at(1).toDouble();
78         longitude = regexp.capturedTexts().at(2).toDouble();
79         accuracy = regexp.capturedTexts().at(3).toDouble();
80         emit getOK();
81         qDebug() << "lat = " + QString::number(latitude) + " lng = " + QString::number(longitude) + " acc = " + QString::number(accuracy);
82     } else {
83         qDebug() << "Error";
84         qDebug() << "url:" << r->url();
85         qDebug() << r->rawHeaderList();
86         qDebug() << r->readAll();
87     }
88 }