set update every 120s
[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
18 void GoogleLatitude::login(QString u, QString p) {
19     if ( !u.contains('@') ) u.append("@gmail.com");
20     user = u;
21     pass = p;
22 }
23
24 void GoogleLatitude::set(double la, double lo, double ac) {
25     latitude = la;
26     longitude = lo;
27     accuracy = ac;
28
29     if (la*lo == 0) return;
30     worker->get(QNetworkRequest(urllogin));
31 }
32
33 void GoogleLatitude::finishedreply(QNetworkReply *r) {
34     if ( r->url() == urllogin ) {
35         QString aidis = r->readAll();
36         QRegExp regexp ("type=\"hidden\".*name=\"GALX\".*value=\"(.*)\"");
37         regexp.setMinimal(1);
38         regexp.indexIn(aidis, 1);
39         QString googleGALX = regexp.capturedTexts().last();
40
41         QByteArray datalogin;
42         datalogin += "&service=friendview";
43         datalogin += "&GALX=" + googleGALX;
44         datalogin += "&Email=" + user;
45         datalogin += "&Passwd=" + pass;
46         worker->post(QNetworkRequest(urldologin), datalogin);
47     } else if ( r->url() == urldologin ) {
48         QByteArray datagps;
49         datagps += "t=ul";
50         datagps += "&lat=" + QString::number(latitude);
51         datagps += "&lng=" + QString::number(longitude);
52         datagps += "&accuracy=" + QString::number(accuracy);
53
54         QNetworkRequest request(urlupdate);
55         request.setRawHeader("X-ManualHeader", QString("true").toAscii() );
56         worker->post(request, datagps);
57     } else if ( r->url() == urlupdate ) {
58         QString output = r->readAll();
59         QRegExp regexp ("Authentication required");
60         if (regexp.indexIn(output, 1) != -1) {
61             emit ERROR();
62         } else {
63             emit OK();
64         }
65         qDebug() << output;
66     } else {
67         qDebug() << "Error";
68         qDebug() << "url:" << r->url();
69         qDebug() << r->rawHeaderList();
70         qDebug() << r->readAll();
71     }
72 }