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